Are Immutable Linux Distros Ready?

Yes! Here’s why I think so!

Immutable Linux Distros are a new kind of Linux distro that has gained popularity lately, especially with the advent of Valve’s Steam Deck. Unlike the distros people may be familiar with, immutable distros have a read-only base, meaning that software cannot normally be installed to the root filesystem using command line utilities like one may expect from something like Ubuntu. Rather, the root filesystem is kept mostly static, though it still receives updates via either images or new system snapshots.

These systems have gained popularity lately because as the Linux world has aged, we have realized that actually, modifying the root filesystem can cause so many problems that sometimes it isn’t even worth bothering. This can take the form of the dependency hell induced by outdated PPAs on Ubuntu, or certain package combinations may not be tested thoroughly enough given the comparatively short amount of testing done on something like Arch Linux. Or sometimes, we just don’t want users screwing around with their root filesystem and potentially installing something that causes it to boot to a TTY. Not saying it’s necessarily their fault, especially if what was installed was just another package from the distro’s repo, but the goal here is to minimize these sorts of cases and to have a system that will always work at its most basic level.

The question in the title of this post is admittedly a bit loaded, so I will be frank in saying that the user experience of immutable distros in certain areas is worse than “classic” distros. But I think for most use cases, we’ve actually made it and I would consider them something worth using.

What works

Thanks to the work done on integrating Flatpak with these systems, a surprisingly large amount of things already work fairly well on these systems. Web browsing, with few caveats like KeepassXC integration (which may or may not already be solved, I haven’t checked in a while) basically Just Works by going to the app store and installing whatever browser your heart desires, and the same goes for other basic tasks like email, office work, chat, news reading, and so on. There are still a few limitations with things like dragging and dropping on apps that haven’t implemented the portal for it, but this can usually be worked around.

Although SteamOS is probably what comes to a lot of people’s minds when they think about immutable Linux success stories, I think it is also worth giving praise to the Steam Flatpak, which is not used by SteamOS and yet is exceptionally good in my experience. I’ve pretty much exclusively used non-immutable distros for the almost 4 years I’ve used Linux, but I’ve often relied on the unofficial Steam Flatpak instead of the official Steam deb installer or whatever gets shipped in my distro’s repos. There are a couple of things that don’t work in my experience, such as Gamescope (maybe I held it wrong), start menu items for games (which I know could be done through Flatpak thanks to the Heroic Games Launcher, and is just a matter of adapting Steam for this), and I believe SteamVR(?), but apart from that it works about as well as any other version of Steam. Plus, because of Flatpak’s nifty feature to let you easily delete all data from an app after uninstalling it, I find managing it to be much simpler than the traditional distributions of Steam.

App development is also really great on immutable distros, but only if you are willing to learn how things work differently on them. You’ll have to use containers to install your development toolchains, which sounds a bit daunting, but many immutable systems like Bazzite and Kalpa package distrobox out of the box, which basically gives you another, non-immutable Linux distro in a terminal. Technically it’s more complex for that, but that’s basically all you need to know as a user. So like, if I wanted to use something that relied on Ubuntu, I’d probably do something like

distrobox create --image ubuntu ubuntu-box
distrobox enter ubuntu-box

And then boom, it works how you would expect an Ubuntu system to. This is also a great approach for something like VSCode, because while there is a Flatpak version of it, the way it’s sandboxed has left me completely mystified on how to use it. But over on distrobox, just install it via deb package like you would on Ubuntu, and then grab gcc or whatever else you need. Super duper easy. You can even export a start menu launcher for a GUI app installed through distrobox for convenience:

distrobox-export --app REAPER

(Speaking of Reaper, now’s a good time to get into the sticky parts)

What works less good

In my extremely limited testing, music production does work on these immutable systems, and using distrobox it’s basically the same as you would expect on anything else. But there is a caveat that I haven’t been able to address: when I want HDMI audio output in Reaper, I have to rely on pipewire-jack. I’m not really sure if there’s a way to get this to work in a container, though, because technically the host system’s pipewire should be running outside the container, and I’m not sure if a container’s audio config could reach it. This is something I’ll simply have to do more testing on. Plus, because containers are often pretty stripped-down in terms of their package count, some GUI apps will expect some packages to already be installed (like xdg-utils for generating start menu entries), but because it’s a minimal container, it won’t be there. I’ve also noticed that Reaper will fall back on the basic X11 cursors instead of the Breeze themed cursors I’m used to, because my container doesn’t actually have the Breeze cursors installed!

Also, you need to be picky about which distro you choose if you have NVIDIA drivers, but this is always the case even if you aren’t using an immutable system. I think it’s technically possible to get the proprietary NVIDIA drivers working on something like Kalpa, but I’ve had such bad luck with NVIDIA on openSUSE systems in the past that I just wouldn’t bother. Meanwhile Bazzite has an iso with the drivers built in. How lucky.

I feel like there was something else I had trouble with on these systems, but that genuinely might be all there is in this section. Whether or not something will work with these systems is usually only a question when you need to rely on an app starting a process for another app (like Reaper using Yabridge to start Wine), but as the Steam Flatpak has shown us, even this isn’t necessarily an insurmountable task for Flatpak. And when it is, just use distrobox.

What doesn’t work, at all

Idk. I can’t really think of anything.

So yeah they’re pretty good

And not only do they work with everything above, but they also have the benefit of massively increased stability thanks to an expectation of the userbase relying on a very limited number of base system configurations, and this usually allows for nice things like automatic updates on Kalpa. Kalpa’s update system is actually one of my favorite things ever and I really wish it was a thing on systems like Windows and macOS. For system updates, rather than downloading the update and then rebooting to apply the update for like 5 minutes, Kalpa will instead download the update, create a new snapshot of the base system (which is really space efficient thanks to its BTRFS filesystem), and then apply the update on the new snapshot while the system is still running! Then, when it’s time to reboot the system, it just instantly switches over to the new snapshot, which means to the perception of the user, the update took like 20 seconds. Such an improvement.

Another thing I appreciate about these systems is that because there is no expectation of installing software through the distro’s own repos, we don’t have the meme Kubuntu situation where, in Discover, you can have 3 different versions of VLC: the deb package, the Snap package, and because many apps are exclusive to the format, the Flatpak package because you went ahead and installed Flathub at some point. Instead, there is usually only one expected source of software: Flathub. Some systems like SteamOS also support Appimages but I would not really consider it a competitor to Flatpak, as it’s like comparing portable .exe files to installer .msi files on Windows.

I think if the success of the Steam Deck is anything to go by, it’s that not only are immutable Linux distros ready for daily use, they can genuinely be a huge financial success in a consumer product. Soon I plan on switching over to Kalpa on my main system, and though I am eager to see how it goes, I also know that it will probably be extremely boring because I’ll basically have the exact same system and workflow as before except I never have to perform updates anymore. Which is exactly how I like it, because I’m lazy!