Distinct patterns for reproducibility
Guix and Nix use very different patterns for ensuring your build environments are exactly reproduced. Both systems use the concept of a “channel” that contains the Nix or Scheme code for its packages and services. When you ask the nix/guix package manager to install something it uses its list of channels at the versions it has checked out. So the same code could produce different environments on the same system if they don’t have the same set of channels and the same versions of those channels checked out. Updating your system involves updating your channels and then asking your system to check and build updates. When guix forked from Nix one of the things they addressed was this and so they have a time-machine you can use to create the exact version of guix used to build the original environment, which then will build that original environment. Nix doesn’t have a way of dealing with this unless you use the experimental flakes feature, which instead describes the channel dependencies and package build together. This means that with guix, if you want reproducible builds, you’ll be using at least two scheme files while in Nix it could all be in just one.