« Back to Home

My switch from Windows to Linux

December 7th, 2021

When Microsoft launched WSL, I thought there would be no reason to switch my desktop over to Linux. Gone are the days of hacky installs of Cygwin or MinGW -- now there's a full blown Linux kernel running side-by-side with Windows. WSLg and VSCode integration further sweetened the deal.

But I recently had an issue that broke the camel's back. A few months back I needed to enroll in the Windows Insider program. I can't remember what feature I needed, but it was only available in the Dev channel. I hesitantly enrolled, encouraged by anecdotal reports that it was stable enough for daily use. But then I encountered an obscure bug in Windows' certificate system. A perfectly valid TLS certificate was being flagged as revoked. I spent hours debugging this issue, and confirmed with Firefox (that uses its own certificate store and verification code) and OpenSSL that this was indeed a Windows bug.

I tried to back out of the Insider program only to discover there's no way to. Enrolling in the Dev channel is permanent. The only option to downgrade is to reinstall Windows.

I thought, if I need to reinstall anyway, why not give Linux a try? At least I would be able to pull the source code and hack away if I encountered an issue like this.

Picking a Distro

The distro choice was obvious to me: Fedora. Fedora is the "upstream" of the Enterprise Linux family of operating systems, and I have probably about 10 years' experience managing CentOS on servers, so I figured a lot of skill would be transferrable. dnf and systemctl are like second nature to me.

I did briefly considered some others like Ubuntu and Arch. I've tried Ubuntu before, but I've come to the conclusion I don't like Debian-based systems. Is it apt or apt-get? Arch was excluded because I didn't really want to tinker around with my system. I want it to mostly just work.

The Install

Fedora has taken criticism for its install process. It uses Anaconda, just like CentOS 7 & 8, so it was pretty familiar to me. I understand why a new user would find it confusing, particularly the partition setup screen.

One interesting thing is I noticed the default filesystem is now Btrfs. I've heard mixed things about Btrfs, which was actually explicitly removed from CentOS 8. I had no first-hand experience with it. But I accepted it, since I trust the Fedora team to have wisely picked it as the default filesystem. Only time will tell how well it holds up.

GNOME

I use a mouse and keyboard with three 27" monitors. GNOME out of the box does not seem particularly suited for this use case. I could see it being quite nice on a laptop with a single screen and a trackpad with multi-touch. But for my use case, the default setup seemed less-than-ideal. I wanted a more familiar desktop.

Yeah, I could have used a KDE Plasma-based spin of Fedora, but I kind of wanted to stick to what has the most momentum and support.

One of the first things I did was install Dash-To-Panel and ArcMenu. These extensions, in combination, restore a Windows-like workflow with a "start menu" and taskbar.

I've heard extensions break regularly with GNOME updates. If this becomes a recurrent issue, I may actually switch to KDE.

Nvidia

Fedora installs with the open-source nouveau drivers for Nvidia graphics cards. It kind of stinks. Performance is poor and it lacks some important power management features. I prefer a fully functioning system over a fully free and open-source one, so I had no qualms installing the Nvidia proprietary drivers.

The install is pretty easy. Packages are available from RPMfusion. Apparently, it's able to keep up with kernel updates by dynamically recompiling the kernel module on boot. So that's pretty neat.

Wayland

I've apparently picked up Fedora during a major transition time for the Linux desktop. Gradually, the old and outdated X11 windowing system is being replaced by the much-improved Wayland protocol.

Just a few weeks before my install, Nvidia added Wayland support to their drivers. After hearing so many good things about Wayland, I decided to try it out.

The experience is almost perfect. It has one killer flaw: "night light" does not work. On Windows, I rely on f.lux to gradually shift my monitor color orange/red at night to reduce eye strain. It really makes a big difference. According to this GNOME bug report, the problem is that Nvidia's drivers do not support gamma ramps.

Since I really do rely on this feature, I've been using X11. As a result, I have screen tearing and no HiDPI/fractional scaling support, so I have to run one of my monitors at a lower resolution.

I've done a little experimenting working around this issue by using a shell script to change the color temperature on my monitors using ddcutil. Perhaps if I get this working I will write a blog on this.

Software Support

It's a mixed bag. Expect some apps to just not work altogether, with no clear indication why. You will likely have to tweak environment variables, Flatpak settings, and disable GPU acceleration to get things to work at all. Screen-sharing is still problematic. Apps running with XWayland will only ever see other apps also running with XWayland. PipeWire is supposed to fix this, but a lot of apps don't work with it yet.

It feels like things are just so close to working right.

Firefox

I love Firefox. But my experience on Linux thus far has been disastrous.

Performance out-of-the-box was very bad. Simply scrolling down a page was laggy. Apparently Firefox is also in kind of a transitory state over to a new rendering engine called webrender, which is supposedly way faster but disabled by default on Linux. There's no easy way to turn this on or to even know you need to turn it on. You have to dig into about:config to find it. Same thing with EGL vs GLX which I'm still not sure what the difference is, other than EGL is supposed to be better. Then on top of that, you have to manually configure whether to use native Wayland, XWayland, or X11, controlled via an environment variable, all of which have subtle differences and impact on performance. Expect to become familiar with about:support.

The most annoying problem is video playback. Despite having a very powerful, 16-core CPU (i9-7960x) and still relevant GPU (1080 Ti), Firefox cannot smoothly play back even 720p video.

VA-API is supposed to provide hardware accelerated video playback. However, this API is not supported by Nvidia, so to get this working, I had to install some sort of shim layer for VA-API on top of VDPAU, which is another hardware acceleration API that is supported by Nvidia. So the only way to get decent video playback is through this hack. On top of that, VDPAU is completely unsupported on Wayland. Unlucky!

On X11

GPU acceleration works, but if you have another browser window open, or any other GPU accelerated program like a game, it will start to lag and stutter for unknown reasons.

Poking around the internet looks like this has been an issue for years. This is currently being tracked here. Despite what the thread says, it was still an issue when I tried EGL on X11.

On Wayland

VDPAU is unsupported. Your video will be CPU decoded and will result in dropped frames and worse performance.

That said, it's more usable then the lag endured on X11 so I put up with it.

PDF Editing

GNOME comes with a PDF viewer. It has some annotation features but definitely can't sign forms. This is a big deal. I need to be able to fill and sign PDF forms.

There are a few PWAs that can do this, but I really want a native app, because I don't know if I can trust them to not send my forms out to the cloud somewhere.

Based on a few WineHQ reports, I assumed Adobe Acrobat would work fine enough in WINE. After installing (er, pirating) some Windows fonts, Acrobat is able to view PDF documents just fine. Where trouble arises is the "Fill & Sign" functionality, which just produces a black screen.

Steam

I used to play games a lot. I don't anymore, but my friends do, and sometimes I like to join them. Valve has spent a lot of time making Linux a first-class platform for gaming, and I am genuinely impressed by how many titles work with WINE. I do have a very frustrating issue with Steam, though.

Every once in a while, Steam will just refuse to open. A small window will appear briefly. I can't even make out what it says. I think it has something to do with updating. Then... nothing. I see Steam running in the background, but it appears to have hanged. No console output so far has indicated to me where the problem is.

The only solution I've found is to delete the entire ~/.steam directory. This has the unfortunate effect of uninstalling all installed games as well, making this solution particularly obnoxious.

Keyboard

A real headscratcher was getting the function (F1-12) keys working. They "work" in the sense that they are detected as media keys instead of function keys. That's fine, but I'd like to switch between the two by using the Fn button.

The issue appears to be both partially my keyboard (Keychron K2) and partially the Linux driver. The fix was documented on someone's blog.

echo "options hid_apple fnmode=0" | sudo tee -a /etc/modprobe.d/hid_apple.conf

Not really the best user experience.

The Takeaway

I am surprised by how much on the Linux desktop just works.

But as demonstrated in this blog, there are a lot of subtle bugs and missing features. So far, they amount to annoyances, but I can easily see how other users would find it "death by a hundred papercuts". A lot of troubleshooting experience on servers does not transfer to desktop, and I had to learn dozens of new technologies, abbreviations, and tools.

Despite my issues, I will almost certainly continue "daily-driving" Fedora. It's good enough to allow me to get my work done, though it does have rough edges. The development experience and customizable is unmatched by Windows.