68
Marcus’s DevOps Brief: Linux for developers has been my specialty for over a decade, building and maintaining development environments for teams ranging from three-person startups to enterprise DevOps organizations. My daily drivers are Arch Linux for personal work and Ubuntu LTS for team servers. Every command in this article was captured live from my VMware test VMs running Ubuntu 26.04, Fedora 44, and Arch Linux.
Setting up Linux development environments for over a decade has revealed a consistent pattern: the gap between Linux and proprietary operating systems keeps widening. Today, in 2026, Ubuntu 26.04 ships Rust coreutils by default, Fedora 44 runs GNOME 50 on Wayland-only, and Arch Linux gives you kernel 7.0 the day it drops. If you are a developer still wrestling with WSL quirks or waiting for macOS Homebrew to resolve dependency conflicts, Linux in 2026 is the cleanest path to a friction-free development workstation. Linux for developers has never been more polished, and this guide shows you exactly how to set up each major distribution.
This guide walks you through setting up a complete developer environment on three major distributions: Ubuntu 26.04 LTS, Fedora 44, and Arch Linux. The article covers IDEs, language runtimes, Docker, Git, terminal multiplexing, databases, API testing, remote development, and performance tuning. Every command in this article was captured live from VMware test VMs running each distro.
Why Develop on Linux in 2026
Linux is not just free. It is the only major operating system where your package manager, compiler, container runtime, and kernel are maintained by the same community pipeline. On macOS, developers spend more time fighting Xcode version conflicts than writing code. On Windows, even with WSL2, filesystem performance walls appear when working across the NTFS boundary. On Linux, everything lives in one namespace. The package manager handles system libraries, the container runtime shares the kernel, and the IDE connects to the same SSH agent used for deployment.
The 2026 kernel cycle brought significant improvements for developers. Kernel 7.0 ships with expanded io_uring support, improved cgroup v2 memory accounting, and native Rust driver frameworks. Ubuntu 26.04 LTS replaced GNU coreutils with uutils (the Rust rewrite), which means faster file operations and memory-safe utilities across the board. Fedora 44 ships DNF5, which resolves packages 3x faster than the old DNF4. Arch Linux, as always, gives you the bleeding edge: kernel 7.0.14, GCC 16.1, and Rust 1.96 on day one. I have found that the practical difference between these distros comes down to how much maintenance overhead you are willing to accept.
Choosing Your Developer Distro: Ubuntu 26.04 vs Fedora 44 vs Arch Linux
Insight: The real difference between these distros is not the packages themselves (they all ship the same versions eventually). It is the release cadence and maintenance burden. Ubuntu gives you 5 years of stability. Fedora gives you 13 months of cutting-edge. Arch gives you rolling updates with no guaranteed stability. Choose based on how much time you want to spend maintaining your system versus writing code.
I have used all three daily drivers extensively, and my recommendation depends on your tolerance for maintenance versus your desire for cutting-edge packages.
Ubuntu 26.04 LTS is the safe pick. It ships with Python 3.14, Node.js 22, Go 1.26, Rust 1.93, and .NET 10 out of the box. The five-year support cycle means you will never wake up to a broken package manager after an upstream release. Ubuntu also ships Docker 29.1 with cgroup v2 by default, and the new Snap Devpacks bundle Spring and Go frameworks into single-command installs. If you are on a team or need LTS stability, my recommendation is Ubuntu.
Fedora 44 is the favorite for solo development. It ships GNOME 50 with Wayland-only (no X.org session fallback), DNF5 for fast package resolution, and Kernel 7.0.13. Fedora gets new kernel versions within weeks of upstream, and its RPM Fusion repository gives you access to proprietary codecs and drivers without PPAs. The tradeoff: Fedora releases every 13 months, so you will upgrade more often than Ubuntu.
Arch Linux is for developers who want total control. Every package is bleeding-edge: Node.js 26.4, Go 1.26.4, Rust 1.96, Docker 29.6. The AUR gives you access to tools that are not in any other distro’s repos. The tradeoff: you will spend more time maintaining your system, and breaking changes can happen with any pacman -Syu. Arch works well on personal workstations, but it is not ideal for team environments.
Essential IDE Setup: VS Code, Neovim, JetBrains, and Qt Creator 20
The daily driver for most developers is VS Code with the Remote SSH extension, though I switch to Neovim for quick edits and terminal-heavy workflows. Here is how to set up both on each distro.
VS Code on Ubuntu 26.04
Pro Tip: On Ubuntu, you can skip the manual repository setup entirely by installing VS Code from the Snap store: sudo snap install code --classic. This auto-updates with Snap and avoids GPG key management. The manual approach shown below gives you more control over the repository configuration.
VS Code is not in the default Ubuntu repos, so you need to add Microsoft’s repository. On Ubuntu, the Microsoft GPG keyring approach works best:
fosslinux@ubuntu:~$ sudo apt install -y wget gpg [sudo] password for fosslinux: Reading package lists... Done Building dependency tree... Done Reading state information... Done wget is already the newest version (1.25.0-2ubuntu4). gpg is already the newest version (2.4.8-4ubuntu3). fosslinux@ubuntu:~$ wget -qO- | gpg --dearmor -o /usr/share/keyrings/packages.microsoft.gpg fosslinux@ubuntu:~$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] stable main" | sudo tee /etc/apt/sources.list.d/vscode.list deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] stable main fosslinux@ubuntu:~$ sudo apt update && sudo apt install -y code ... Setting up code (1.126.0) ... fosslinux@ubuntu:~$ code --version 1.126.0 7e7950df89d055b5a378379db9ee14290772148a x64
VS Code on Arch Linux
On Arch, VS Code is in the official repos, which makes installation trivial:
fosslinux@archlinux:~$ sudo pacman -S --noconfirm code resolving dependencies... looking for conflicting packages... Packages (4) c-ares-1.34.6-1 electron42-42.3.0-1 ripgrep-15.1.0-4 code-1.126.0-1 Total Download Size: 200.59 MiB Total Installed Size: 1021.96 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... ... fosslinux@archlinux:~$ code --version 1.126.0 7e7950df89d055b5a378379db9ee14290772148a x64
Neovim on Arch Linux
For terminal-heavy days, Neovim with the LazyVim distribution is the go-to choice. On Arch:
fosslinux@archlinux:~$ sudo pacman -S --noconfirm neovim
resolving dependencies...
looking for conflicting packages...
Packages (14) libluv-1.52.1-1 libutf8proc-2.11.3-1 libvterm-0.3.3-2 ...
neovim-0.12.3-1
Total Download Size: 8.00 MiB
Total Installed Size: 34.60 MiB
:: Proceed with installation? [Y/n]
...
fosslinux@archlinux:~$ nvim --version | head -3
NVIM v0.12.3
Build type: RelWithDebInfo
LuaJIT 2.1.1780076327
Qt Creator 20 also just shipped with AI agent support via the Agent Client Protocol (ACP) extension. If you are developing Qt/C++ applications, this is worth evaluating. The new Zen Mode puts your code editor into focus, and the ACP chat panel lets you interact with AI coding agents directly inside the IDE.
Language Runtime Installation: Python, Node.js, Go, and Rust
Ubuntu 26.04 ships Python 3.14 and Rust 1.93 in the default repos. Fedora 44 ships Go 1.26 and Node.js 26. Arch Linux, being rolling release, always has the latest versions. Here is the practical difference I have found across all three.
Python
fosslinux@ubuntu:~$ python3 --version Python 3.14.4 fosslinux@fedora:~$ python3 --version Python 3.14.6 fosslinux@archlinux:~$ python3 --version Python 3.14.6
All three distros ship Python 3.14. Ubuntu is slightly behind on the patch version, but for development purposes, the difference is negligible. pyenv works on all three distros when you need to switch between Python versions for different projects.
Node.js
Node.js installation varies the most across distros. Ubuntu requires the NodeSource repository for Node.js 22, while Arch and Fedora ship newer versions from their default repos:
fosslinux@ubuntu:~$ node --version v22.23.1 fosslinux@fedora:~$ node --version v26.4.0 fosslinux@archlinux:~$ node --version v26.4.0
nvm (Node Version Manager) works on all distros to pin Node.js versions per project. This avoids the “works on my machine” problem when collaborating with teammates on different distros.
Go
fosslinux@ubuntu:~$ go version go version go1.26.0 linux/amd64 fosslinux@fedora:~$ go version go version go1.26.4-X:nodwarf5 linux/amd64 fosslinux@archlinux:~$ go version go version go1.26.4-X:nodwarf5 linux/amd64
Go 1.26 is available on all three distros. Ubuntu ships 1.26.0, while Fedora and Arch have 1.26.4. For most projects, this patch difference does not matter. The official Go installer from go.dev works when a specific patch version is needed.
Rust
Ubuntu 26.04 is the first LTS to ship Rust coreutils (uutils) as the default userland. This means ls, cat, sort, wc, and roughly 80 other utilities are Rust binaries instead of GNU C. Installing Rust via rustup on Ubuntu gives you the latest stable toolchain:
fosslinux@ubuntu:~$ curl --proto "=https" --tlsv1.2 -sSf | sh -s -- -y ... info: default toolchain set to stable-x86_64-unknown-linux-gnu stable-x86_64-unknown-linux-gnu installed - rustc 1.96.0 (ac68faa20 2026-05-25) fosslinux@ubuntu:~$ source "$HOME/.cargo/env" fosslinux@ubuntu:~$ rustc --version rustc 1.96.0 (ac68faa20 2026-05-25)
On Arch and Fedora, Rust 1.96 was already installed from the default repos. The rustup approach on Ubuntu gives you more control over toolchain versions, which matters when maintaining projects that target specific Rust editions.
Docker and Container Development on Linux
Why It Matters: Ubuntu 26.04 removed cgroup v1 support entirely. If you are migrating from an older Ubuntu install, your Docker Compose files that reference cgroup v1 paths (like /sys/fs/cgroup/memory) will fail silently or produce confusing errors. Test your containers on a fresh Ubuntu 26.04 install before committing to the upgrade.
Docker on Linux is straightforward, but there are distro-specific gotchas. Ubuntu 26.04 uses cgroup v2 exclusively (cgroup v1 was removed from systemd 259), so older Docker configurations that reference cgroup v1 paths will break. Fedora and Arch have supported cgroup v2 for years, so their Docker setups are more mature.
fosslinux@ubuntu:~$ docker --version Docker version 29.1.3, build 29.1.3-0ubuntu4.1 fosslinux@fedora:~$ docker --version Docker version 29.6.1, build 8900f1d330 fosslinux@archlinux:~$ docker --version Docker version 29.6.1, build 8900f1d330
After installing Docker, add your user to the docker group to avoid running sudo docker for every command:
fosslinux@ubuntu:~$ sudo usermod -aG docker fosslinux fosslinux@ubuntu:~$ newgrp docker fosslinux@ubuntu:~$ docker run hello-world
On Ubuntu, I also enable the Docker daemon to start on boot:
fosslinux@ubuntu:~$ sudo systemctl enable --now docker
Git Configuration for Professional Development
Git is pre-installed on all three distros, but the versions differ slightly. Here is a standard Git configuration that works on every new workstation:
fosslinux@archlinux:~$ git --version git version 2.54.0 fosslinux@archlinux:~$ git config --global user.name "Marcus T." fosslinux@archlinux:~$ git config --global user.email "[email protected]" fosslinux@archlinux:~$ git config --global init.defaultBranch main fosslinux@archlinux:~$ git config --global core.editor nvim fosslinux@archlinux:~$ git config --global --list user.name=Marcus T. [email protected] init.defaultbranch=main core.editor=nvim
SSH key-based authentication for GitHub and GitLab follows the same process on all three distros:
fosslinux@ubuntu:~$ ssh-keygen -t ed25519 -C "[email protected]" fosslinux@ubuntu:~$ eval "$(ssh-agent -s)" fosslinux@ubuntu:~$ ssh-add ~/.ssh/id_ed25519 fosslinux@ubuntu:~$ cat ~/.ssh/id_ed25519.pub
Copy the output and add it to your GitHub or GitLab account under SSH Keys.
Terminal Multiplexing with Tmux and Zellij
Tmux has been the terminal multiplexer of choice for years, but Zellij has been gaining traction in the Rust ecosystem. Here is a standard tmux setup that works on every workstation:
fosslinux@archlinux:~$ sudo pacman -S --noconfirm tmux resolving dependencies... looking for conflicting packages... Packages (2) libutempter-1.2.3-1 tmux-3.7-1 Total Download Size: 0.53 MiB Total Installed Size: 1.25 MiB :: Proceed with installation? [Y/n] ... fosslinux@archlinux:~$ tmux -V tmux 3.7
A solid ~/.tmux.conf includes mouse support, 256-color terminal, and a custom status bar. The key bindings that work well daily are Ctrl-a as prefix (instead of the default Ctrl-b), | for vertical split, and - for horizontal split. This layout has been battle-tested for years and becomes muscle memory quickly.
For developers who want a more modern terminal multiplexer, Zellij is worth evaluating. It ships with a built-in session manager, floating windows, and a plugin system written in WASM. On Arch Linux, you can install it with pacman -S zellij.
Debugging Tools Every Linux Developer Needs
Linux ships with some of the best debugging tools in the industry, and most of them are pre-installed. Here are the essentials:
fosslinux@ubuntu:~$ which strace ltrace gdb /usr/bin/strace /usr/bin/gdb
strace is my go-to for diagnosing system call issues. When a program fails silently, running strace -f ./myapp shows exactly which system calls are failing and why. gdb handles Segfaults and core dumps. perf is the kernel’s built-in profiler, and it is pre-installed on all three distros:
fosslinux@ubuntu:~$ perf --version perf version 7.0.6 fosslinux@fedora:~$ perf --version perf version 7.1.1-1 fosslinux@archlinux:~$ perf --version perf version 7.1.1-1
For memory leak detection, valgrind works on C/C++ projects. For Python, py-spy handles sampling profiling. For Node.js, the built-in --inspect flag with Chrome DevTools covers most use cases.
Database Setup: MySQL, PostgreSQL, and MongoDB
Database installation varies significantly across distros. Ubuntu ships MySQL 8.4, while Fedora and Arch ship MariaDB (the MySQL fork). Here is what each distro provides:
fosslinux@ubuntu:~$ mysql --version mysql Ver 8.4.10-0ubuntu0.26.04.1 for Linux on x86_64 ((Ubuntu)) fosslinux@archlinux:~$ mysql --version mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead mysql from 12.3.2-MariaDB, client 15.2 for Linux (x86_64) using readline 5.1
PostgreSQL 18.4 is available on all three distros. I prefer PostgreSQL for new projects because of its JSONB support and extension ecosystem:
fosslinux@ubuntu:~$ psql --version psql (PostgreSQL) 18.4 (Ubuntu 18.4-0ubuntu0.26.04.1) fosslinux@archlinux:~$ psql --version psql (PostgreSQL) 18.4
For MongoDB, the official MongoDB repository works better than distro packages, because MongoDB updates frequently and distro packages often lag behind. The installation process is identical across all three distros: add the MongoDB GPG key, add the repository, and install with your package manager.
API Testing and Development Tools
For API testing, I use httpie (a user-friendly curl replacement) and curl for scripting. Both are available on all three distros:
fosslinux@archlinux:~$ http --version 3.2.4 fosslinux@ubuntu:~$ curl --version | head -1 curl 8.18.0 (x86_64-pc-linux-gnu) libcurl/8.18.0 OpenSSL/3.5.5
httpie gives you syntax-highlighted JSON responses, persistent sessions, and intuitive request formatting. For example, a POST request with JSON body looks like this:
fosslinux@ubuntu:~$ http POST name="Marcus" email="[email protected]"
For more complex API workflows, Postman is available as a native Linux application. On Ubuntu, you can install it from the Snap store or download the AppImage from the Postman website.
Remote Development with SSH and VS Code Remote
Remote development is where Linux truly shines. The OpenSSH server is pre-installed on all three distros, and VS Code’s Remote SSH extension lets you edit code on a remote server as if it were local.
fosslinux@archlinux:~$ ssh -V OpenSSH_10.3p1, OpenSSL 3.6.3 9 Jun 2026 fosslinux@ubuntu:~$ ssh -V OpenSSH_10.2p1 Ubuntu-2ubuntu3.2, OpenSSL 3.5.5 27 Jan 2026
My workflow is: SSH into the target server, open VS Code with code ., and the Remote SSH extension handles the rest. The extension installs a VS Code server on the remote machine, and all IntelliSense, debugging, and terminal operations happen over the SSH connection. This approach has been how I manage production servers and development VMs without keeping multiple terminal windows open.
For SSH hardening, I always disable password authentication and use key-based auth exclusively. On Ubuntu 26.04, OpenSSH 10.2 ships with post-quantum cryptography support via the [email protected] key exchange algorithm.
Performance Optimization for Developer Workstations
Developer workstations accumulate cruft over time. Here are the optimizations I apply to every new Linux install:
1. Disable unnecessary services. On a development workstation, Bluetooth, Avahi, and CUPS are unnecessary unless actively used:
fosslinux@ubuntu:~$ sudo systemctl disable --now bluetooth fosslinux@ubuntu:~$ sudo systemctl disable --now avahi-daemon
Worth Knowing: ZRAM is not just for low-memory systems. Even with 32GB of RAM, ZRAM improves performance by keeping frequently accessed swap pages in compressed memory rather than on disk. The compression ratio is typically 2:1 or better, effectively doubling your usable swap space without touching the SSD.
2. Enable zram for swap compression. ZRAM compresses swap in memory, which is faster than swapping to disk. On Fedora 44, this is enabled by default. On Ubuntu and Arch:
fosslinux@ubuntu:~$ sudo apt install -y zram-tools fosslinux@ubuntu:~$ sudo systemctl enable --now zramswap
3. Tune kernel parameters for development workloads. Increasing the inotify watch limit for large codebases and enabling TCP BBR congestion control helps:
fosslinux@ubuntu:~$ echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf fosslinux@ubuntu:~$ echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf fosslinux@ubuntu:~$ echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf fosslinux@ubuntu:~$ sudo sysctl -p
4. Use Intel Performance Skills for CPU optimization. Intel just released an open-source project called Intel Performance Skills that uses AI agent workflows to profile Linux CPU workloads and suggest optimizations. It is MIT-licensed and available on GitHub. For Intel hardware, this is worth evaluating for performance-critical development workloads.
Frequently Asked Questions
Which distro should I choose if I am new to Linux?
Ubuntu 26.04 LTS. It has the largest community, the most tutorials, and five years of support. You will find answers to every question on Ask Ubuntu or the Ubuntu Forums.
Can I use WSL2 instead of a native Linux install?
Yes, but with caveats. WSL2 runs a real Linux kernel, but the filesystem boundary between Windows and Linux introduces performance penalties. If your work involves heavy I/O (compiling large projects, working with Docker volumes), native Linux is significantly faster.
Do I need to install all three distros?
No. Pick one and stick with it. I use Arch on my personal workstation and Ubuntu on my team servers. The commands in this article work across all three, but you only need to master one package manager.
Is Docker different on each distro?
The Docker Engine is identical, but the installation process and default configurations differ. Ubuntu 26.04 uses cgroup v2 exclusively, which means older Docker Compose files that reference cgroup v1 paths will need updating. Fedora and Arch have supported cgroup v2 for longer, so their Docker setups are more battle-tested.
What about AI coding assistants?
AMD just released GAIA 0.21.2 with a bash coding agent that runs locally on Ryzen AI hardware. Qt Creator 20 shipped with AI agent support via the Agent Client Protocol. GitHub Copilot and Cursor both work on Linux. The AI coding tooling on Linux in 2026 is mature enough for production use.
Conclusion
Setting up a Linux development environment in 2026 is faster and more reliable than it has ever been. Ubuntu 26.04 gives you stability and LTS support. Fedora 44 gives you cutting-edge packages with a 13-month release cycle. Arch Linux gives you bleeding-edge everything with the maintenance overhead to match. Whichever distro you choose, you will get Python 3.14, Go 1.26, Rust 1.96, Docker 29+, and a terminal environment that macOS and Windows simply cannot match.
I have been developing on Linux for over a decade, and the gap between Linux and proprietary operating systems has never been wider. The tooling is better, the performance is better, and the community is better. If you have been waiting for the right time to switch, that time is now.
