Strangely enough for a Mac/iOS user, I have spent a lot of time using Linux throughout the years, but mostly on servers. Since last year, however, I have started to hedge my bets on what desktop OS I will be using for the next twenty years or so.
By my completely unscientific reckoning, this year I have probably spent well over half my personal computing time using Linux instead of macOS (and the rest was likely evenly split between my MacBook and an iPad).
The reasons for that are manifold:
- I never really stopped using anything or went all-in on any platform except, perhaps, the iPad – and that, despite many wonderful third-party apps, still doesn’t have a proper development environment.
- I wasn’t as optimistic about macOS as I am now (Apple Silicon largely changed that, but I think the days of my having multiple Macs are over).
- Electron trash has invaded both my Mac and Windows desktops in several guises, and Linux still has a lot of native applications (there used to be a joke about there being as many Linux desktop apps as widget toolkits, but that’s not quite true anymore).
- A lot of my personal pursuits are deeply technical, and I can find excellent (and most often free) tools in the Open Source ecosystem – and many of them will likely never run on a Mac either due to their legacy or to Apple’s sandboxing requirements.
So I’ve now been running Fedora on three machines for an extended period of time:
- The original
LXC
container where I started testing Fedora 35, which I’ve upgraded all the way to 37 in the meantime and which I use daily as a personal sandbox (now withRDP
GPU
acceleration out of the box, so I don’t need to do any hacks). - My Lenovo, which is where I end up doing a lot of my
MCU
and 3D design/printing stuff, which I also upgraded to 37. - My ancient C720 Chromebook, which has only 2GB of
RAM
but is still useful as a thin client and glorified typewriter, and is still on 351 because it’s fine that way.
What I Like So Far
The experience has been pretty good for five main reasons:
- I get the default, vanilla
GNOME
desktop (which I customize to feel just enough like macOS that it is comfortable to use when I’m tired and really don’t want to deal with weird icons andUX
conventions). - Hardware support has been excellent (as long as you are willing to ignore some quirks like failing to roam between Wi-Fi access points that share the same
SSID
, and paper over some cracks by forcing the occasional misbehavingUSB
device to disconnect). - There is no shortage of quasi-mainstream applications (and by that I mean FreeCAD, Cura, SuperSlicer, and all the development tools I use, especially VS Code).
- I have made it a key priority to be able to seamlessly move between devices, and most of my environment is standardized (same set of tools across machines) and synced (largely through SyncThing, but also via some configuration files in
git
for a few key things). This, of course, works great in a Linux environment. - I can use a touch screen on my laptop without offending the
UX
gods, because Linux doesn’t judge. So there.
There are some critical caveats here, of course.
The first is that I don’t care about office applications, or personal productivity as most people see it because for me, at least, 90% of that is in the cloud or accessible via a browser, and I also won’t be using those while working in Linux – that’s literally not what I want to be doing with it.
Also, as a matter of principle I don’t want to rely on browser-based applications for my personal pursuits–all I want to do is either too close to the hardware or too complex for the kind of web UI that personal and business computing has been dumbed down to.
If you’re an old-time Mac user, the Linux ecosystem is my current equivalent of the days before the App Store, when you had dozens of amazing indie developers building stuff that was actually useful and filled the myriad of workflow niches you had.
And there are dozens of native apps for the taking, of often surprising quality and polish.
Applications
Obviously, there’s no App Store bottleneck. Well, there is the GNOME Software Center, but it conflates software updates with app discovery, so I don’t really consider it a store. It just looks like an app store because everyone decided to ape that model, and application discovery in the Linux ecosystem was a hugely fragmented experience.
It largely works these days, but it’s still clunky and slow and fallible (search, in particular, very seldom works for me). But it has achieved one key goal: it is now much easier to find up-to-date versions of things than a few years ago and application updates through it are painless, so it kinda works like the App Store.
On Fedora, when I can’t get the apps I want via OS packages or the GNOME Software Center, they are usually available in flatpak
or AppImage
formats that I don’t need any weird workarounds to install.
But I still prefer installing things like Bitwig by converting them to an RPM package, since the flip side is that flatpak
can also be a tremendous nuisance to deal with if your software needs any kind of hardware access (or, in my case, the ability to talk to WINE wrappers for VSTs).
And (amazingly) I can run a fair sampling of Windows software pretty well, including music software and games2.
I also don’t have to deal with the madness of snap
and Ubuntu’s insistence on using it for things like Firefox–which is why I decided to try Fedora in the first place.
But the main upshot is that, in many regards Fedora has made Elementary OS redundant for me, since I get a mainstream experience with minimal tweaking or any deviation from a mainline distribution.
What I Don’t Like
Full disk encryption works, but logging in with two passwords from a cold boot (one for the machine and another for your user) seems archaic in this day and age. Fortunately sleep/resume has been working perfectly for me on my Lenovo for a while now.
GNOME is still opinionated beyond reason, and remains hell-bent on attrition warfare against its users where it regards things like UX
choices and desktop themes (which Fedora isn’t really to blame for). There’s more than enough for an entire section below.
More generally speaking, it’s harder to find RPM
s or even tested package build scripts for some things, whereas .deb
files for everything you could possibly want are pretty much everywhere.
Also, the release cycle is an annoyance. In short, upgrading every 6 months feels stupid when you’re used to Ubuntu LTS, and I’ve found that some package repositories I was using just stopped being updated with fixes for “old” releases as maintainers assumed everyone would move to the new Fedora release.
Plus I found there is some risk to the upgrade process itself.
The GUI
updater, in particular, has a tendency to remove third-party package repositories for some reason, whereas the CLI
one allows for more control and prompts you to confirm (some of) what it is about to do.
So I’m going to start upgrading between releases like this:
sudo dnf upgrade --refresh
sudo dnf autoremove
sudo dnf system-upgrade download --releasever=37
sudo dnf system-upgrade reboot
The only time this completely failed on me so far (yielding a broken machine) was an arm64
container, which is kind of understandable given how much of an edge case it is.
But the overall pressure to essentially risk breaking your desktop every six months reminded me of exactly why I chose to move away from Fedora many years ago.
Development Annoyances
Although there are quite a few niceties where it regards fresh versions of language runtimes and tooling (I got Python 3.11 with Fedora 37, which is pretty good), the bottom line is that Ubuntu is still better if you’re a developer who needs their tools to “just work”.
A case in point: I needed to compile a small Scheme program to a native executable, and I have been using Gambit, which is available in Fedora.
But even though the interpreter worked, the compiler is not packaged correctly and failed with:
/usr/bin/ld: cannot open linker script file /builddir/build/BUILD/.package_note-gambit-c-4.9.3-7.fc36.x86_64.ld: No such file or directory
In Fedora 37, this is still an issue:
/bin/ld: cannot open linker script file /builddir/build/BUILD/gambit-v4_9_3-devel/.package_note-gambit-c-4.9.3-8.fc37.x86_64.ld: No such file or directory
The Chicken Scheme compiler works, though, and both worked flawlessly in Ubuntu.
This kind of thing (i.e., a poorly tested package) makes me wary of using Fedora for developing anything off the beaten path without using containers.
And my woes are not limited to weird language runtimes–I also couldn’t get Android development tools to work on Fedora 36. I lost patience and just installed them in an Ubuntu container with LXDE
(which I also use remotely via RDP
), and haven’t tried them on Fedora 37 yet–and likely never will.
For simpler stuff, I make ample use of Docker and Ubuntu images while working in VS Code (which, thankfully, is available as an RPM
).
GNOME Annoyances
Like I wrote above, GNOME
continues to wage war upon its users by coming up with all sorts of weird UX
limitations–it’s as if they wanted to emulate Apple in both simplicity and completely failing to understand what users actually want.
For instance, changing the desktop theme is now almost verboten, and both the icon “dash” and application search are hidden until you hit the Super
key and zoom out into workspace management, which annoys the heck out of anyone more sensitive to visual motion and feels completely superfluous.
The UX
is just weird sometimes–dialog boxes will pop up behind your applications, and in Fedora 37/GNOME
43 they’ve gimped the Nautilus file manager by taking out an icon size that was a great compromise between size and being able to recognize previews, plus they’ve baked in a “dynamic” grid that leaves enormous amounts of white space between icons.
And it’s buggy. I had a number of issues with toggling dark mode on and off–the Appearance pane in Settings simply refused to switch back to dark mode, including on a fresh test install I spun up just to try to understand what was going on.
Bringing this up in any kind of discussion effectively devolves into an “it works for me” argument (or, more amusingly, an “you shouldn’t customize things” argument, which is just hilarious considering this is Linux we’re talking about).
But the bad habit of hiding file pickers behind the current application and throwing up a notification saying a portal was open (perhaps to some far away land) nearly drove me insane before I fixed it with:
gsettings set org.gnome.desktop.wm.preferences focus-new-windows 'smart'
I guess the default was just… dumb. The rest, so far, I can’t do much about, which is annoying.
As to built-in apps, GNOME
applications mostly work if you have basic needs, but fall flat on their face if you try to use, say, calendaring or e-mail with any real life online service. Fortunately I don’t really need any kind of conventional “productivity” applications, but it would have been nice to have them work reliably3.
For instance, it is still frustrating to use Geary to even read e-mail, let alone reply to it. I do use it (and really want to like it), but it is still buggy and fiddly and I just can’t trust it to do more than keeping tabs on a couple of personal inboxes while I’m away from my Mac or iPad.
Desktop Scaling
This is something that is literally in your face whenever you plug in a monitor (and most of mine are HIDPI
ones) or open a remote session. There is experimental fractional scaling support on GNOME
42+ that you can activate by using:
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
…but in my experience it just completely broke a number of things, including (for some reason) my mouse pointer, which vanishes after a while.
So I just use this when I have to switch displays:
#!/bin/bash
# Get Current Scaling factor
SCALE=$(gsettings get org.gnome.desktop.interface text-scaling-factor)
# Set what to toggle to
if [[ ${SCALE:0:4} == "1.10" ]]; then
SCALE_SWITCH=1.25
elif [[ ${SCALE:0:4} == "1.25" ]]; then
SCALE_SWITCH=1.5
else [[ ${SCALE:0:3} == "1.5" ]]
SCALE_SWITCH=1.10
fi
# (Optional) Message intentions to CLI and GNOME Notifications
echo -e "Previous Font Scale: $SCALE, Switched to $SCALE_SWITCH"
notify-send "Previous Font Scale: $SCALE, Switched to $SCALE_SWITCH"
# Run switch command
gsettings set org.gnome.desktop.interface text-scaling-factor $SCALE_SWITCH
Putting Lipstick on a GNOME
Despite GNOME
trying to force libadwaita
on everyone, I can still theme enough of the desktop to use it without visual annoyances, and use extensions like Dash to Dock
extension to have a proper dock and provide other amenities.
The WhiteSur theme I use can, at least for the moment, hide away most of the imperfections and even fix the insane Nautilus icon spacing (and that is exactly why I keep using it):
So my GNOME
desktop looks (and to some extent, feels) very much like a Mac, except for the lack of global menus (which GNOME
also killed off ages ago).
This may seem whimsical, but it saves me a lot of hassle when your brain is wired to look for specific UI
elements (and even icons) in certain places.
Believe me when I tell you that after a very long working day, when it’s suddenly 10PM and you want to resurrect the brain cells you lost in the corporate struggle by unwinding and perhaps coding a bit, you don’t want to be figuring out where window widgets are or which icon does what.
Aesthetics and polish go a long way towards satisfaction here, and vanilla GNOME
just doesn’t work for me.
I can also use Kvantum
to apply the same theme to Qt apps (which can feel notoriously alien on any platform), although I keep forgetting to do this:
echo "export QT_STYLE_OVERRIDE=kvantum" >> ~/.profile
But there’s a bit of a risk here: Like anyone who’s been using a certain kind of computing environment, I rely a lot on visual cues and desktop polish.
So if GNOME
keeps pushing the (pretty ugly to my eyes) libadwaita
look and making it hard to theme the desktop in a way that makes sense to me it just might force me to look elsewhere–and that is perhaps Fedora’s Achilles heel as far as I’m concerned.
After all, development environment issues are things I can work around, and they’re part of what I expect to happen in a computer given what I use it for.
But UX issues get personal, and my use of Elementary OS was driven largely by its design and end-to-end UX polish. But I do have alternatives–even simpler mainstream ones.
I’m not really interested in using LXDE
at this point, but I am keeping an Ubuntu container with an LXDE
desktop on hand, just in case…
Extensibility
The nice thing about using Linux is that (even in GNOME
) it is so much easier to do little tweaks to your desktop experience than in macOS. There are just enough GNOME
extensions to tweak most of what I want, and even though they are sometimes poorly maintained, at least the barrier to entry is non-existent.
For instance, since most of what I do in Fedora these days is around development and 3D printing, I ended up hacking together my own set of file thumbnail generators for .blend
, .3mf
, .stl
and .scad
files, which I will eventually extend for some common kinds of Godot assets.
Doing that kind of thing on the Mac would have been… interesting these days.
Going Forward
I have been thinking about buying or building a desktop PC, and have been noodling in the crazy (and perhaps non-existent) intersection of high thread count CPU
s (a Ryzen 9 would be nice), exorbitantly priced GPU
s (a topic that’s been beaten to death, but one I want to tackle because I really want to be able to do some modern ML stuff), quiet fans, and efficient power consumption.
I really don’t know what I will be getting since I have been looking at various Ryzen 6900HX mini PCs as well as “normal” desktops. Form factor is just a minor thing here, since I am happy enough with using a remote solution to just stick the thing into a closet.
But I am 99% sure that if I get it anytime soon, it will run Fedora, and I guess that is about as good an endorsement for Linux on the desktop as I’ll ever write.
-
Almost two years after writing this, it’s running 39 and working, which is a testament to how tough that little machine actually is. ↩︎
-
I am occasionally surprised by how well some low-level Windows stuff works under WINE and still pop into Steam now and then, but those are outliers in daily usage. ↩︎
-
I blame
evolution-data-server
for most of this, but then again I’m biased since I spent far too long fighting it during my years as postmaster. ↩︎