Will Styler's Homepage
Will Styler

Associate Teaching Professor of Linguistics at UC San Diego

Director of UCSD's Computational Social Science Program

Moving from MacOS to Linux: What’s better?

November 25th, 2023

I recently made a post about my journey to Linux from MacOS, and what’s missing and needing improvement. Today, I’d like to talk about the other side of the coin, and discuss the things that just plain work better on Linux than on MacOS. Many of these are also improvements relative to Windows, but improving on Windows is a remarkably low bar, so I’ll just compare against MacOS here.

General Improvements

Cost

Linux is both libre and gratis, and as such, you can install the majority of software you need without spending money. I probably spend a bit more each month in optional Patreon and other donations to authors of tools I love than I spent on Mac software, but I feel like it’s my responsibility as a linux user who’s doing OK financially.

More importantly, though, you can put Linux on commodity hardware which is not wildly overpriced, which means that you can have systems with equivalent performance, storage, memory, and GPU for, in many cases, several thousand dollars less. You can also choose among processors, motherboards, GPUs, and more to customize your PC to your precise needs. If you buy something like a Framework laptop, you even get repairability, easier data recovery, and upgradability, even in laptops.

But, as the old joke goes, ‘Linux is free if your time is worthless’, and if I was billing myself for time I spent tweaking things, I’d probably be on about equal footing. TANSTAAFL, as always.

Speed

It’s hard to compare Apples to oranges in terms of hardware, but Linux has a sense of ‘snappy’ within the OS that MacOS has been gradually losing. This may be partly due to hardware differences, but spending time on (even M-series) Macs now feels a bit sluggish, partly due to animations, partly due to slow application loads, and due to my inability to optimize it. M-series macs start up faster, 100%, but once I’m into the OS, I feel like I can move much faster in Linux.

Less ‘Holding it wrong’

One of the most frustrating parts of MacOS was the number of things I wanted to do or wanted to set up which, sooner or later, I realized were simply not possible because Apple says so. Things like properly mounting FUSE volumes, disabling long animations, modifying certain types of window behavior, methods of interacting with other devices, reading other drive formats, and increasingly more tasks as MacOS gradually iOS-ifies, all lived behind the solid wall of ‘Apple says no, get back in line’.

Although these issues sometimes had reasonable justifications in terms of device security, often times, thinking carefully, you’d realize that if they really wanted to keep the bad guys out, the razor wire wouldn’t be on the inside of the wall, and the control wasn’t to protect you, but to protect their stock price. More frustratingly still was the sheer malignant narcissism of ‘Oh, no, that’s not the right way to use your machine, you’re holding it wrong, so stop trying to do that and do it our way’. This is particularly frustrating when they’ve made a new change for you as a part of a new release, and you realize that there’s not a meaningful way to ‘go back’ to the last release, particularly if you’d like the latest hardware. You will use your computer as they want you to, and you’re mistaken if you think you have a choice.

If Apple products are beautiful, luxurious, and exorbitantly expensive rental condo with an incredibly restrictive lease and HOA, Linux is an isolated tract of forest where nobody else is around. There are no laws, nobody cares what you do, and you are in control, for better and worse. If you hurt yourself, nobody can save you but you, while at the same time, nobody controls your machine but you, and you can rig up whatever you’d like on your property. This is liberating, if not occasionally exhausting, and you need to know what you’re doing, or have a friend who does, in case you make a mistake.

Of course, ‘anything is possible’ does not mean ‘anything is easy’, and much like any survival show, you’re given the bare minimum required to live through the first few nights, and expected to work the rest out on your own. And, naturally, there are places where Linux doesn’t offer some functionality I need, and I simply don’t have the ability to write the code needed to patch it in, or I don’t want to dedicate the time to figure it out. But it’s still nice to know that if something truly mattered, I could figure it out, and nobody’s shareholders are better enriched by trying to stop me.

Things which work better on Linux

Automation and Synchronization

I’ve talked previously about my love for automating and standardizing my environment, first using shell scripts, then using Ansible. Although you can do a lot of automation in MacOS with tools like Homebrew and Cask and the Unix shell, there’s still a frustrating amount of “Now open this menu, and uncheck this box”, and no shortage of ‘OK, now go to this app’s website, download the latest version, open the .dmg, drag to Applications…’ installs.

With Fedora, it’s incredibly easy to automate the installation of roughly everything, with Ansible commands for DNF, rpm-ostree, Flatpak, symlink creation, and more. There’s also the advantage of dotfiles and .config folders for most system configuration elements in KDE and other apps, which mean that most settings can be copied over by literally copying a file. By letting some files synchronize and then running two scripts, I can go from ‘fresh install’ to ‘fully configured’. I can also fully back up these scripts and configuration files, meaning that if my laptop got wiped, I could just run that script and be back in business quickly.

This also means that keeping two machines (e.g. a desktop and laptop) in sync is much easier, not just in terms of files (using Syncthing), but also configuration and software installation. If I make some tweaks, I re-run my ansible scripts (which are idempotent) on the other machine, and only what needs changed, changes. So, it’s easy.

Shell and Python Scripting

It shouldn’t surprise anybody that shell script is a first-class citizen on Linux, but the sheer number of things I can do with a terminal is much, much higher (and better documented) than on MacOS. As such, it’s very easy to write scripts in bash or Python which do whole sets of common tasks, and integrate directly with the rest of the OS. Some examples:

Mind you, much of this can be done on MacOS (for now), but the list of things you can do from a CLI seems to be shrinking with each major OS change, and it was absolutely delightful to be able to abandon some very ugly hacks I used on the MacOS side to make things work.

Tiling Window Management

I am a ride-or-die tiling window manager user. I don’t ever want to move a window with my mouse, and I don’t need to see my desktop background in the margins around a window. I paid for these pixels, so I’m going to use them, damnit. So, I use window tiling scripts which make windows fill the screen, or if there are multiple, evenly divides them, and lets me rearrange them, move them, and even send them to another screen, without using the mouse at all. On Linux, this just plain works, so well that it’s boring, with many, many tiling window managers and scripts which give you choices of how to work things.

One of these days, Apple will finally and bravely invent active Window Tiling, and it will be revolutionary for users everywhere, but until then, you can currently get a very passable imitation on MacOS with Yabai. That said, it is constantly fighting with MacOS, and there are no shortage of situations where an application keeps moving itself, and Yabai keeps moving it back, and similar bits of jank coming from Apple fighting to control windows itself.

Customization

As mentioned above, Linux is customizable almost to a fault. Compared to MacOS (which lets you pick an accent color), Linux can look however you want it to (c.f. /r/unixporn which is actually work-safe unless your employer is allergic to catgirls). In practice, I do much less of this than I thought I would, limiting it mostly to customizing the KDE panel and wallpaper (which I rarely see, see above), along with a ton of hotkeys, but it’s nice to know I can.

restic

restic is the best backup software I’ve found. Not the easiest, but the best. And although it runs just fine on MacOS, on Linux, it gains a number of useful features, the biggest of which is the ability to mount a local (or remote) restic backup repository as a filesystem, and then just go through snapshots and retrieve what you need as if it were any other file. It works incredibly well, and makes ‘Oops, I deleted that important folder because I was an idiot’ a matter of 20 seconds or so to fix.

Music synchronization with Android

iTunes has been terrible for the better part of a decade now, and being forced to use it to organize music going onto your phone is brutal. With Android and Linux, you can just use Syncthing to automatically sync your music folder to your phone, and read from those folders using PowerAmp. My music is always up to date, and I just don’t have to care.

Sadly, with an iPhone, Apple’s garden walls don’t allow you to sync music from a Linux computer at all. So, if you’re switching, plan to switch everything. Which is also better because…

kde-connect with Android

KDE-Connect is built into KDE, and is a little program which exists to connect your phone and computer wirelessly. Notifications on your phone end up on your computer, allowing you to respond, click buttons (e.g. Duo prompts), see what’s going off, sync the clipboard, and even control music on your computer from your phone (and vice versa). It works really well, and with Android, has lots of features and power. Really, really nice bit of software.

Things which just don’t exist on Mac

There are also some things which, for all intents and purposes, just aren’t really a thing on MacOS.

Atomic Updates and Rollbacks (from Silverblue/Kinoite)

On MacOS, updates were relatively few and far between, often required 10-15 minutes of watching a black bar fill up to install, and were a gigantic pain to roll back if there was a problem (which, particularly in x.0 releases, there often was). Even a small security update was a process, and a process that you specifically had to initiate. And even then, the update process is a bit brittle (as is also the case in most Linux distributions): If your computer lost power mid-update (e.g. for a desktop), you could end up in a bad state.

Moving to Fedora Kinoite has been a bit annoying, but mostly really excellent, with the biggest benefit being that updates happen silently in the background, as you’re using the machine. Then, next time you restart the computer, you’ll be in the latest version. Updates are also atomic, which means that nothing is changed until everything is completed, such that you can forcibly power down your computer mid-update, and when you power it up, it’ll be right where you left it, because the update never finished, so it never created a new state to boot into.

More importantly, it also means that if the update breaks your workflow somehow, all you need to do is to reboot, and then choose the prior system image, and you’re right back to where you were. You can also ‘pin’ a known-working system image, so that you know you’ve always got something to go back to. Mind you, this is not a ‘snapshot’ of your whole system, and your user data, files, configuration, etc are all still up-to-date if you revert to a prior system, it only reverts the core OS and any layered packages. So, even if you’ve made a bunch of new files and changes in your home directory since your pinned image, you’ll have everything up to date, just running an older system.

To give you an example of the power of this: I recently tried a Day-1 upgrade to Fedora 39. I followed the steps, booted in, and after a few minutes, realized that pytorch hadn’t been updated to work with Python 3.12, which broke the LLMs and image generation tools I was experimenting with. So, I rebooted, chose the previous Fedora 38 image, and I was right back where I started, with no ill effects, and have continued getting updates on 38 from there. Neat!

Machine Learning

Linux is the best operating system for machine learning, because most serious machine learning machines run Linux. Many toolkits have Mac versions now, which is great, but Linux versions land first, and tend to run much faster than the same tool running in Windows (even on the same hardware). So, when I hear about some neat new tool, I can generally just spin up a new venv, install it, and I’m off. It’s a wonderful thing.

Gaming

MacOS has very little possibility for PC gaming. With underpowered GPUs in Apple Products, serious games don’t tend to run particularly well. More problematically, there’s little compatibility among mainstream PC games (with a few notable exceptions like Factorio, Diablo, No Man’s Sky, Portal, and a few Aspyr ports which… often work?). So, going from Mac to Linux was eye-opening. Suddenly, nearly every game was not only playable on my PC, but wildly performant (given the better GPU). I thought I’d need to keep a Windows partition around, but I do not, and in many cases, Linux outperformed Windows on the same titles, while I still had both installed.

At this point, Steam’s work on the Proton compatibility layer means that with the exception of anti-cheat-rootkit-encumbered multiplayer games, any given game works, and if there are problems out of the box, ProtonDB has solutions. Couple this with tools like Lutris which enable other games (e.g. Blizzard titles), Linux has allowed me to become a PC gamer, and that’s been absolutely wonderful, catching up with 20 years of titles I’ve missed being a Mac-and-Console person.

A powerful Linux computer is now a powerful gaming computer, without the pain of Windows. This needs to be shouted from the rooftops in the Linux community.

Alternative Desktops Environments and Window Managers

Finally, it’s worth noting that, although I happen to really like KDE a lot more than Gnome or i3 or sway or xmonad or anything else, other folks disagree. The biggest shock to many people’s system coming from ‘My way or the Highway’ MacOS is that something as fundamental as your Desktop Environment, Window Manager, file explorer, and audio subsystem can be flat-out replaced.

So, if you try Linux and don’t love KDE, try gnome, or sway, or something else. You can choose your own adventure here, and it really does make a big difference.

In Summary

I feel many things about switching to Linux, several of them positive, and as annoying as it can be, and as much as sometimes feel like I’m missing something, there are absolutely areas where it simply outperforms MacOS.

Ultimately, my advice to possible switchers is to look at the good of going to Linux, and the not so good. Maybe you’ll find you don’t care about the things which are missing, and the things that work better truly matter to you. Maybe you’re a gamer who, reasonably, just can’t stomach Windows. Maybe you’re a person who may want a Mac, but can’t afford the cost of entry and ongoing software. Maybe you just want to learn more about how computers work, while also trying something new which will teach you how to interact with the operating system which runs on every single one of the top 500 supercomputers on Earth. Or, perhaps you’re like me, and you do care about some of the deficiencies, but you care more about privacy, freedom, repair and upgrade, a strong community-based computing movement, and the right to own and control your own computer.

If any of that sounds like you, then maybe it’s time to make like a tree sitting above Isaac Newton, and finally drop that Apple.