Half-a-decade of Fedora Silverblue
I wrote, back in 2020, about my frustrations with how macOS was increasingly locked down. That spurred me to purchase a System76 Lemur Pro which ran Pop!_OS and eventually, I became an early adopter of the first-gen Framework Laptop.
I'll save my thoughts on my Gen1 Framework Laptop for another day, but I wanted to spend some time writing about the best decision that I made with my Framework Laptop: Fedora Silverblue.
I'm no stranger to Desktop Linux. I started dual-booting Kubuntu Linux out of middle school-aged frustration with Windows Vista back in the days of 9.04 "Jaunty Jackalope". A piece of software called "Wubi" that ran as an executable on Windows made installing Ubuntu on any Windows machine a pretty idiot-proof experience.
In my now seventeen years of running Linux as a hobbyist, the one thing I've always struggled with is that... I tend to blow up my Linux install.
I'll be on KDE and suddenly a new GNOME release promises a feature that I want to use and then a Theseus' ship operation to move my desktop environment would break my X11 in a way that I couldn't fix. Or maybe, I'll attempt a dist-upgrade in a dangerous way and break my entire system.
Fedora Silverblue is an immutable desktop operating system. Put simply, the entire root file system is immutable and mounted read-only on your system. Having root be entirely unwriteable broke my brain for a bit. Rather, think of your entire root filesystem as an atomic commit (with its own hash), like in Git. When you update your system, you pull down bits and pieces to form the image of an immutable image that matches the atomic commit hash of an OS update supplied by Fedora. You then apply those updates on reboot.
At first glance, this is a massive step backwards in usability. Linux package updates have never required a reboot for as long as I've been around.
However, the magic is in the rollback.
Let's say I apply a system update and something doesn't play well with my laptop and I experience some form of regression. Let's say I decide to use the Fedora KDE Silverblue (Kinoite) distribution instead of the GNOME distribution. If I don't like the changes I've made, I can seamlessly reboot my system into the last root image as if nothing happened.
Installing software has proven to be a bit of a chore.
Fedora supplies, as a last resort, rpm-ostree, which downloads an RPM package, layers it on-top of your root image as a new root image, which you can then reboot into. rpm-ostree should be used only as a fallback because Fedora encourages you to install software in userspace. To do that, one either searches for a Flatpak package or installs a package in Toolbox. Toolboxes are throwaway containers that you can use to install such software.
As an example:
toolbox create cowsay
toolbox enter cowsay
sudo dnf install cowsay
cowsay
Will let me install cowsay inside of a Toolbox container. You can then alias certain commands in your bashrc to run inside of said toolbox container.
Installing Signal with Toolbox
I rely on Signal as a communication tool. Signal does not provide first-party packages for non-Debian based distributions. For several years, I ran a third-party created Flatpak package, since Flatpak is distribution-agnostic. However, relying on a third-party created package of a chat client for an end-to-end encrypted service just doesn't make sense.
Enter Toolbox! With Toolbox, you can create a container running Ubuntu and then follow the regular process to install Signal via the Debian repositories.
Note: Signal now ships an AppImage which works on Fedora, but I still find this a pretty cool demonstration of what's possible with Toolbox containers.
Linux Brew
Recently, I discovered that Brew, of macOS fame, can also be used to install packages in userspace on Linux. Brew has become my new favourite tool for installing software on Silverblue.
Five Years
I've found warts every now and then when running Silverblue, but it just hit me today that I've been running my Linux install for just under five years now.
⋊> ~/D/P/t/posts on main ◦ sudo ls -l /root/anaconda-ks.cfg 21:15:33
-rw-------. 1 root root 730 Oct 21 2021 /root/anaconda-ks.cfg
⋊> ~/D/P/t/posts on main ◦ rpm-ostree
That is far-and-away the longest I've ever used a Linux installation! In part, it must be because I've had less of an appetite to distrohop and I just want something that works, but the point is, Silverblue is just that. I am able to run rpm-ostree upgrade knowing full well that if anything fails, I can just roll it back.
I highly recommend giving Silverblue a go. Have you tried running it before? Let me know what you think!