Future Tech

Nix forked, but over politics instead of progress

Tan KW
Publish date: Thu, 16 May 2024, 08:58 AM
Tan KW
0 459,802
Future Tech

Comment Recent ructions in the Nix project over moderation, leadership, and funding, have led to a fork… but one that fails to address the technical and human issues with Nix packaging itself.

First there was an anonymous open letter calling for its community to "save Nix together". (Call us old-fashioned, but "openness" to us implies using your real names.) Then, Nix's creator and head of its foundation, Eelco Dolsta, responded with a post called On community in Nix. This did not go down well, and was followed by a fork of Nix and its community, under the odd sobriquet of Auxolotl. Then, possibly too late, Dolstra stepped down. What happens next is not yet clear.

Nix is an alternative packing system for Linux and other Unix-like OSes, which we examined in some depth in late 2021. There's also a Linux distribution built with Nix, called NixOS, which we took a look at the following year. Even before the fork, Nix wasn't the only automated declarative packaging tool: there's also GNU Guix, which does more or less the same thing, but defined in the GNU Guile dialect of Scheme instead of the new Nix language.

In some languages, the word "nix" could be pronounced like niche - and ironically, Nix is a niche tool. So far, it has had little impact on mainstream Linux packaging; the big players are spending their efforts on containerized packaging tools instead, such as the Red Hat backed Flatpak and Canonical's Snappy. Even so, unlike many FOSS projects, Nix has money. VR murder headset inventor Palmer Luckey's "AI" powered combat-drone maker Anduril is a big user, and offered to sponsor the annual Nix conference last year, to considerable controversy.

Now that Dr Dolstra has gone, perhaps the fragmented community will re-unite. This particular curmudgeon, though, feels that this particular Nix fork missed a big opportunity: to automatically generate and manage more human-readable filesystems.

Nix works wonders by automatically storing code in a software-generated and software-managed directory hierarchy. This has a profoundly off-putting side-effect: it eliminates a human-readable filesystem. In NixOS, the traditional Unix layout is gone, with just a handful of empty directories left behind. It's replaced by a ton of folders under /nix/store/ called stuff like nqi39ksavkfrxkrz3d0797n5wmzi9r30-go-1.16.15. Nix enthusiasts point out that this delivers lots of benefits, but to achieve these, you have to just… trust that your path and so on will work and stuff will just auto-magically be found somehow.

Critics point out that the price you pay is letting go of navigating your own filesystem - and what if, for some reason, the software goes wrong? Software has a habit of doing that. If Nix breaks in some way, how can a mere human use this hierarchy, let alone modify or repair it?

That's just too much for a lot of Unix graybeards. The filesystem layout is one the defining characteristics of Unix-like systems.

This particular jaded old hack much prefers the approach of GoboLinux. The developers of this experimental distro proposed a different bargain. They still completely discard the traditional filesystem layout. Instead, they isolate all versions of all programs in their own folders. In return, you get a more readable directory tree.

In GoboLinux, you can work out where things are without knowing, just by exploring an English-language directory tree. It offers better isolation between components than the classic Unix approach of dumping all binaries in /bin… or /usr/bin or /sbin or /usr/sbin or /usr/local/bin, according to some arcane system that last made sense on a DEC PDP with half a dozen 5MB hard disks in 1972.

What Gobo offers is akin to semantic versioning, but applied to the filesystem: a semantic filesystem layout, where folder names encapsulate versioning info and are more meaningful than the old 1970s reduce-typing-effort-at-all-costs approach.

Nix (and Guix) tell us to just ignore paths and ignore directory names: you don't need them, we will manage that for you. Gobo says forget traditional paths, here are some better ones that you will find easier and more useful. For me, Gobo offers a more attractive proposition.

However, in real life, it seems that both approaches were too much for most people. So, my suggestion is: why not merge them? Try to bring the advantages of Gobo - readable, meaningful directory paths - to some successor of Nix. Rather than a flat, software-managed directory tree which finds things using unreadable hashes, instead, devise a consistent algorithm that categorizes applications, and libraries, and config files, and automatically allocates them to a human-readable tree. Here is an entirely fanciful example:

/gonix/apps/gui/productivity/images/krita/5.1/
/gonix/apps/console/shell/bash/5.2/
/gonix/apps/programming/compilers/fpc/3.1/
/gonix/libraries/c/glibc/2.39
/gonix/apps/console/editors/vim/9.1

I appreciate that there is more to different binaries than just version numbers, and they may have to be sub-divided according to other criteria as well. If there must be machine-generated hashes, put them at the ends of paths. Readability first, programmability second. This isn't profoundly radical. For example, the Spack package manager for clusters does something broadly similar.

One possible issue is that this could result in very long directory paths, but with all the work on next-generation filesystems from Btrfs to OpenZFS to bcachefs, this can surely be addressed. Btrfs, for instance, has namespaces so flexible that it's even possible to install multiple distributions in a single partition. Bedrock Linux goes even further and attempts to meld multiple independent distributions into a single, usable system.

Gobo retains the classic Unix directory tree, empty apart from lots of symbolic links, for backwards-compatibility, but hides it from human users with the GoboHide kernel module. Perhaps some namespace wizardry could present a fake traditional view of a software-defined directory tree, or fake a compressed $LEGACY_NIX hierarchy from a more complex human-readable $FUTURE_NIX one.

As it is today, Nix fixes many of the issues with traditional Unix software packaging methods. As Michael Brantley, CTO of Nix vendor Flox told us at FOSDEM, after three decades administering proprietary Unix machines and later Linux ones:

That's a considerable endorsement from an experienced expert. The thing is, though, that we were all beginners once, and anything that makes Unix even more forbidding for both beginners and veterans is a problem. One that, in our humble opinion, needs fixing more urgently than problems of community moderation or sponsorship. ®

Bootnote

Fun fact: the word axolotl comes from the Nahuatl: āxōlōtl, from ātl ("water") + xōlōtl ("slippery or wrinkled one"). That means that the original - and thus arguably correct - pronunciation is, roughly, "ah-show-loat", to rhyme with "goat."

 

https://www.theregister.com//2024/05/14/nix_forked_but_over_politics/

Discussions
Be the first to like this. Showing 0 of 0 comments

Post a Comment