Back to blog
EngineeringFebruary 11, 2025·Nathan Kovac

Goodbye Windows: Why I Switched to Kubuntu for Development

After years on Windows, I finally switched my daily driver to Kubuntu. Docker is first-class, the terminal doesn't fight me, and everything I SSH into feels like home now. Here are the practical migration notes.

#Kubuntu#Linux#Desktop#Development Environment

It's 9 PM and I'm writing this from a machine that no longer has the Windows logo on the boot screen. The switch finally happened. I've been threatening it for months, and tonight I pulled the trigger and didn't look back.

This is the story of why, and the practical details for anyone considering the same move.

The Breaking Point

For a long time, Windows was fine. WSL2 made Linux tooling available. VS Code Remote-SSH meant I was editing on the server anyway. Docker Desktop worked, mostly.

But "mostly" and "fine" accumulate friction. The last six months — the Proxmox cluster, the domain controller, the local inference stack — meant I was spending my days in a Linux world and my evenings translating back to Windows. Every SSH config tweak, every shell script, every Docker volume mount passed through a compatibility layer that worked but never felt native.

The breaking moment: I was debugging a GPU passthrough test and realized I was maintaining three mental models — the Windows way, the WSL way, and the actual Linux way. Three is two too many.

Why Kubuntu Specifically

I didn't want a religious experience. I wanted a desktop that worked, a package manager that wasn't hostile, and a DE that didn't require relearning window management. Kubuntu checked the boxes:

  • Ubuntu base — same repos, same answers, same muscle memory as every server I run.
  • KDE Plasma — a desktop that respects that I might want a taskbar and windows that behave like windows.
  • Stable LTS — 24.04 is boring in the best way.

The installer asked sane questions and was done. No driver hunt, no surprise reboots. I spent more time picking a wallpaper than installing.

What Got Better Immediately

Docker is first-class. No Docker Desktop wrapper, no WSL2 VM layer, no "Docker is starting..." spinner that lies to you. It's just Docker. systemctl enable docker and it's there, every boot, no ceremony. Container startup times dropped noticeably because there's no VM boundary to cross.

The terminal is the terminal. No more choosing between PowerShell's quirks and WSL's translation layer. Bash is the default. Zsh if I want it. Every command I run on the servers runs identically on my desktop. Scripts are portable. Aliases work. My .bashrc is the same file, everywhere.

SSH is native. The SSH agent, the config, the keys — they live where they're supposed to. No forwarding gymnastics to make Git auth work through Remote-SSH. ssh-add and done.

Everything feels like the infrastructure. This is the big one and it's hard to explain if you haven't felt it. My desktop and my servers now share an operating system. The tools, the file paths, the conventions — they're the same. When I SSH into the Proxmox nodes or the dev VMs, I'm not switching contexts. I'm just switching machines.

What I Miss

I'm not going to pretend it's all upside. A few things:

  • Outlook. Thunderbird is fine for mail, but the calendar muscle memory is real and the alternatives don't quite match it.
  • Some proprietary tools. A Windows-only accounting app now lives in a VM on the Proxmox cluster, accessed via Remote Desktop. Slightly clunky, fully functional.
  • Games. Proton handles most of it. I didn't have time for the rest anyway.

Notice what's not on the list: dev tools, editors, runtimes, cloud CLIs, Docker, Kubernetes tooling. All as good or better on Linux.

The Migration, Practically

A few things made the switch clean:

Keep /home on a separate partition. This means future OS reinstalls don't touch my files or configs. Standard Linux advice, worth repeating.

Dotfiles in Git. My .bashrc, .gitconfig, .ssh/config, editor configs — all in a private repo. New machine, git clone, symlink, done. I've been doing this for the servers for a while; now the desktop benefits too.

AppImage and Flatpak for desktop apps. These sidestep the package manager versioning questions for things like Slack, Discord, browsers. System packages for system tools; containerized formats for user apps. Clean separation.

NVIDIA drivers from the official repo, not Ubuntu's. Same lesson as on the inference server — the distro drivers lag, and for GPU work that matters.

The Domain Controller, Revisited

One nice surprise: the Kubuntu desktop joined sorren.local cleanly using the same SSSD setup I wrote about before. Same identity, same Kerberos auth, same network shares. The mixed-OS infrastructure didn't care that my desktop OS changed — that's the payoff of using standard protocols.

Was It Worth It

Yes. The accumulated friction of developing for Linux on Windows is gone. My mental model collapsed from three layers to one. Docker is faster. SSH is simpler. The terminal is the terminal. If you're building Linux infrastructure and developing on Windows, ask yourself why — WSL2 is a bridge, and bridges are for crossing, not living on.

It's late and the machine is quiet and everything works. That's the review.

NK
Nathan Kovac
Founder & Lead Engineer at Sorren.ai