Originally posted by Delgarde
View Post
- Nix came first, and the Guix team borrowed their ideas but changes their package specification format from the Nix domain-specific-language to Guile Scheme.
- They allow multiple versions of the same package to be installed and used by different users at the same time. This includes system libraries and other dependencies. If two users use the same version of a library they do share the reference, it's not simply a case of installing a complete copy of everything except /etc/ and /boot/ under each user account.
- The teams behind the two projects do a lot of work on reproducible builds, so most of the packages will get bit-for-bit compatibility if compiled on different computers. I think the Guix team does more work on this than Nix, but then I've followed Guix more closely.
- Upgrades and rollbacks are fully atomic, so a power failure during the process won't leave the system in an inconsistent state. I'm sure it's not foolproof, filesystems are not ACID like a database. But I think the upgrades involve installing and configuring everything in an isolated way and then swapping a very tiny number of symlinks. So a power failure at any point but the symlink switch is harmless.
- GuixSD, the Linux distribution that uses Guix as its only package manager, uses GNU shepherd for init. NixOS, the Linux distribution that uses Nix as its only package manager, uses systemd. The Guix team doesn't dislike systemd, they just hope to support GNU Hurd someday and systemd relies on some Linux kernel features that the Hurd team does not plan to implement.
But Flatpak has several key differences:
1. As far as I know, Nix and Guix don't include any application sandboxing. They can support it, but you have to write your Nix or Guix package with the sandbox included. Flatpak sandboxes by default, you can't bypass it.
2. Guix is free-as-in-freedom software only. I don't know about Nix. So if you want proprietary drivers or Minecraft with Guix you need to write your own Guix packages. Or you can use Guix as a second package manager on your Debian/Ubuntu/Fedora/Arch/Void distribution and install the proprietary drivers or Minecraft with apt/apt/dnf/pacman/xbps respectively and install free software with Guix. I think Nix is more permissive. (Edit) Flatpak is, as far as I understand it, much easier to use with proprietary software. It works fine with free software, so easy interoperability with proprietary products is not a fundamentally bad thing. But I suspect it will be more successful because of the interoperability. (end Edit)
I think all three of reproducible builds, atomic upgrades and rollbacks, and sandboxing will become more important as time goes on. I wouldn't be surprised if Nix, Guix, and Flatpak start to converge in terms of the three features.
Comment