GNU's advanced distro and transactional package manager
gnu.org
gnu.org
>It uses low-level mechanisms from the Nix package manager, but packages are defined as native Guile modules, using extensions to the Scheme language—which makes it nicely hackable.
Though I've never bothered to figure out exactly how much if any code is actually shared between the two.
I think part of the reason they are now cruising past Nix (despite 1/10th of the users) is that it's written in a proper programming language, and not a home-made language that relies heavily on bash.
That said, I'm really happy with NixOS after two years, and would not consider going back to any "conventional" distro for my own workstation. Coming from a Gentoo background, there is nothing like screwing up your system and simply booting into the previous generation :)
Having the entire system configuration in one place that can be version controlled is a big plus too. You can create a live CD, VM, container etc from the very same code.
Nix and Guix can also be used standalone (think Homebrew or Gentoo Prefix), and can be very handy shell tools. E.g. `guix environment foo`[1] will drop you to an ephemeral shell environment with all build dependencies of package foo available.
0: https://www.gnu.org/software/guix/manual/html_node/Security-...
1: https://www.gnu.org/software/guix/manual/html_node/Invoking-...
If Guix gets to the point where every concern except that surpasses NixOS, we might see a close-to-upstream Guix-fork or third party repo (like MELPA and MARMALADE for Emacs) being established to address that.
Or at least so we can hope.
The fact that Guix won't distribute packages for non-free software does not mean that it restricts you in using Guix to manage such software packages.
I think a lot of people will get a taste of these advantages through e.g. Docker and Snappy and will eventually go all in with GuixSD or NixOS. These types of stateless software ecosystems will continue to become more common until eventually they are the norm.
Typically your total system-configuration can be divided into a few distinct parts: bootloader and filesystem-partitions, kernel and software.
These features are to some extent dependent on each other, but not in any way which breaks dependency management or causes conflict, and thus can mostly be treated distinctly.
Basically you configure A bootloader, not several. The configuration is about which one that is and where you put it. Depending on if you use UEFI or not, this is either 100% tied to the filesystem layout, or just 99%.
Then the rest of the tooling just uses that info to populate the boot menu. In functional terms, a bootloader should have no side-effects on the system booted, so as long it boots the system, you should be fine.
The kernel doesn't really care about what bootloader you use as, as long as it boots it with the correct parameters. You can have several kernel-configurations in parallell which are accessible from the same bootloader-menu, but as you say, you cannot be booted into several versions at the same time.
That's not really a real-world problem though, because software very rarely depend on a specific kernel-version, they just depend on having a kernel. If a package depends on specific kernel modules, it's free to add these as dependencies, which will be resolved.
This means you can have a 100% functionally constructed system on top of a few config-files, with minimal chance of crafting a configuration which is internally incompatible. If it is, the tooling will tell you, and your system build will fail.
You can also have several mututally incompatible configurations within the same filesystem and boot between or chroot into these. It's an incredibly powerful concept.
The only reason I'm not running NixOS today on my laptop is that I need 100% end-user finish with regard to a "just works" desktop, and I'm not willing to build that myself, one package at a time, with the limited spare-time I have.
So I appreciate and respect both NixOS and GUIX and the work being invested in them, but for now I run Fedora :)
Might as well run BSD: Your peripherals still won't work but at least the system underneath is still more coherent.