But NixOS isn’t the only declarative distro out there. In fact GNU forked Nix fairly early and made their own spin called Guix, whose big innovation is that, instead of using the unwieldy Nix-language, it uses Scheme. Specifically Guile Scheme, GNU’s sanctioned configuration language. I’ve been following Guix for a bit, but it never felt quite ready to me with stuff like KDE being only barely supported and a lot of hardware not working out of the box.
However, now that (after three years) Guix announced its 1.5.0 release with a lot of stuff stabilized and KDE finally a first-party citizen, I figured now is the best time to give it a fresh shot. This post captures my experiences from installation to the first 3-4 days.
↫ Nemin’s blog
If you’re interested in Guix, but aren’t quite sure if you want to take the plunge, this article does a great job of showing you the ropes, listing what issues you might run into, some pitfalls to avoid, and so on.

I think declarative is a very cool way to setup/configure things. It’s the GitOps way, probably the best ‘right way’.
What is most interesting to me about Guix is that they were able to do the full-source bootstrap.for reproducible builds. I think they are the only one in the world. And they are able to do it on 2 CPU architectures as well. So they take a 357-byte ‘program’, so you can verify by hand and this huge pile of source files and first build a small compiler and bigger compiler and eventually GCC old version and a GCC newer version and newer version and newer version, etc. And eventually they build python, etc.
Normally any software that is build is build from a binary (often from a previous version if the compiler is ‘self hosting’). Which is the problem outlined in the Reflections on Trusting Trust by Ken Thompson’s speech from 1983.
It’s all months of work to build all this (and they got funded for it too), I think maybe it was even longer than a year in total. but they did it and we now have something that you can actually build and verify the whole chain.
That was a really great read. It is interesting to hear from a long-time Nix user just how much better the system is when using Guile as the configuration language.
But the major take-away for me is that there needs to be a non-GNU fork of Guix. First, it sounds like it could be more popular than Nix as it addresses the central complaint I hear about Nix (the complex and home-grown configuration language). Second, most Guix users do not actually use Guix as intended by GNU.
From the article, “64% of Guix users utilize the Nonguix channel”. Wait. What? And from the link provided, it is actually 66%. A perfect 2 in 3.
And it is not like Guix makes that easy. Check our the Nonguix page:
https://gitlab.com/nonguix/nonguix
This is how the project describes itself.
“Guix channel for packages that can’t be included upstream. Please do NOT promote or refer to this repository on any official Guix communication channels.”
And then this is the first line of the README: “This channel does not endorse any non-free application. We believe it is non-ethical, harmful to software development and restricts the users freedom.”
The first rule of Nonguix is that we do not talk about Nonguix.
The entire and sole reason Nonguix exists is to distribute non-free software. So what does “does not endorse” and “we believe it is non-ethical” mean? If you do not endorse it, and in fact consider it non-ethical, then why are you doing it? Shut it down. Crazy stuff.
Of course, the reason they are doing it is that 2 in 3 Guix users find the system unusable without non-free software. Instead of trying to wedge that into a GNU project, why not just fork it into a non-GNU system that can be open about it and make things easier for users? Something with similar guidelines to Debian sounds about right. Apparently, we would be doing the Nix users a favour as well.
I have never used Nix because it sounds like I do not have enough free time. I have never tried Guix because I know a 100% free-software distribution would be useless on the hardware that I own. If there were a proper Nonguix distro, it sounds like that would be worth a shot.
I’m certain a large part of the Guix developers want to keep the code GNU-style free and give people the freedom to add something on top if they want to, but are also such purist they don’t want to even point to any of it.
Maybe the people working on Nonguix see it as a way for people to run that software to help with transitions ? Sometimes you need the original program to read a (binary) file format.
I agree, a more Debian way with just making it optional would be easier, but as mentioned the people working on Guix probably don’t want it.
It’s important to have a base where certain freedom is ensured. If you end up with a base environment which is contaminated with non-free code, that brings all kinds of complexities, most notably legal ones, but also maintenance risks.
With the current base especially commercial projects can be built on top and shipped without having to worry about whether any license allows this or not or whether parts of the code are available or not.
Here is a good article that describes the issue that a lot of other repositories have: https://www.fsf.org/bulletin/2021/fall/keeping-track-of-freedom-while-managing-packages
I’m in Java development myself where Maven Central is the primary place where people look for packages. While not mentioned in the article, it suffers from the same issue and for developers it is quite a hassle to ensure that all dependencies are actually licensed to us without restrictions.
Note that Guix does not need to be your main system. You can deploy it on top of another system too. This clean separation with Nonguix does ensure that whatever you ship will not depend on something you can’t actually legally ship when you stay with just Guix.