Well, yet another “should I give up NixOS” or “should I go stable/unstable” post.
Before start, I’d like to point out that what I am talking about is desktop use, which means you install lots of random softwares that could sometimes be very niche, and you often need to get things done ASAP.
NixOS on server is fantastic, but not the focus in this post. Again, this post is only about desktop experience.
I’ve been using NixOS on desktop for ~3 months, on server for longer. I started my desktop experience with 24.05 stable, and switched to flakes&nixos-unstable, for the reason that IME/fontconfig/Wayland/… support is much better on unstable. As I am building up more and more complex setup with my real-wolrd life getting busier, troubles come.
The Release Cycle of nixos-unstable
Wherever you make a post asking about which channel to go, there will be people telling you “unstable is really stable”. A recent survey says it’s almost half-half in total, but I believe unstable takes a bigger part on desktop.
In a traditional rolling distro, when a single package breaks, what the maintainers do is very simple: fix and test themselves, push to the repo, wait for mirrors to sync, user upgrade. I admit there are bigger problems and more complex models, but what’s happening the most often are small mistakes, like upgrade through CI but the package build need some little edits.
In nixos-unstable things are a little different. Something breaks, people submitting issue - then here comes the fun part: Sometimes it’s too niche, no one can fix it (usually happens with a build system that require networking and FHS); Assume it’s fixed, it takes a few hours to a few days to be reviewed and merged. Things gets worse when the fix is part of a bigger treewide rewrite, which is not merged so quickly. Assume it’s merged. We must wait 4-5 days for the CI and cache until it’s really available on nixos-unstable.
Pessimistic speaking, that could be weeks in total.
What’s worse, while you are waiting, another package breaks. Congratulations, keep waiting until you find a window period that you can finnaly upgrade.
In nixos_zhcn telegram group we have a bot tracking when PRs are merged and pushed to staging/master/small/unstable. Part of the use case is tracking when they can finally upgrade without breaking things. In the recent weeks it seems to happen more frequently, every nixos-unstable upgrade is like patients in bed waiting for potent medicine.
I know, I know, there are workarounds, which I am already using as well.
You can simply copy it to your configuration and callPackage
or use an overlay, if the fix is not complex. You can add master or unstable-small to your configs and pick some packages from it, if you have the resources to build. You can add an old rev of nixpkgs in your config.
These don’t always work. Sometimes a module doesn’t give you the option to choose package. Sometimes what’s broken is down below the abstration so that you cannot simply modify.
We build all the abstraction of Nix to upgrade “seemslessly”. But here we are spending more time on the abstraction layers per se.
I gonna say something that doesn’t feel right: Archlinux has a news channel for possible breaking changes, which instructs the users how to fix manually. Some nix guy criticizes this for “not maintaining things well and dump their responsibility to the users”. But look above, isn’t that what we do?
I wish we have a news channel for unstable, seriously.
Containers: Escape hatches
Nix solves the problem that podman/docker tries to solve in a way more elegant way.
Guess you all have heard about this.
Python + CUDA. Do I need to say more?
Or any other thing that is too complicated or poorly maintained to use in Nix.
I admit it is possible to figure out how to get everything working on Nix. But just “waste” some space for a container you will save plenty of time. It’s all about time cost (can’t remember the abbreviation phrase).
How many packages do you have in your flatpak/distrobox?
A very interesting finding is that, while all immutable distro I know are focusing on the concept of “minimal immutable host + application container”, NixOS community is, on the other hand, trying to install everything on host even when it’s super complicated on non-FHS.
Migrating to Stable?
Personally I am planning to migrate my desktop as well as all my vps to stable after the release of 24.11. And put things in flatpak/distrobox as much as possible on desktop. Yep the “immutable host + application container”.
But as I recall how I started with 24.05, I hesitate. Wayland, Nvidia, IME …
Every year is the year of Linux desktop.
While enjoying the freedom and customizability we cherish, we probably already forget what a complete desktop experience feels like. Got used to dealing with the glitches without even realizing it.
Desktop experience is evolving really fast, which means we need to keep moving forward. Point release cycle of half a year is still too long. As well as the gaming, performance cliché. Maybe releasing every month like tumbleweed is a more desirable sweet point.
May be I should simply install Archlinux. Nix as a package manager is available everywhere anyway.
Conclusion
I write this post not to criticize the selfless maintainers of an open source project. I have the highest respect for their work and I am learning to contribute as a newbie as well.
The point is that we should see the limitations.
No one should be blamed for the terrible experience of mentioned “upgrade window”, but this doesn’t mean the problem doesn’t exit.
All these words are from the perspective of a unmature linux user. Any criticize is welcomed. Maybe you can share you “best practice” as well.