The Guix package manager is a higly reproducable and stable package manager based on the Nix package manager. It wan made by the FSF, meaning that it allows ou to install a variety of 100% free software. The reproducability and saftey that comes with the Gnu Guix package manager is unrivaled. You may be tempted to install the “Gnu Guix System”, however you can instal the Gnu Guix package manager on any existing Gnu/Linux system. I am going to show you how you can install and use the Guix package manager.
The simplest answer is that it lets you get packages not available in your distribution, or newer versions of packages. However, Guix offers interesting features that typical GNU/Linux package managers do not:
package management on a per-user basis, each user has their own set of packages independent of the system packages (a “profile”), user can add/remove packages to their profile without needing root
operations on profiles are atomic, they can be rolled back if necessary. This is especially helpful when using Guix System, as it keeps track of previous generations of the system so in case you do break something you can just boot into the previous generation
Reproducible builds are a big focus of the Guix project, and the Guix builder does its best to ensure builds are reproducible (e.g. zeroing all timestamps, cutting off network access and so on)
package transformations - i.e. build from git commit X, with patch Y, etc.
Functional package management: a package is defined in Guile Scheme and takes an “origin” (source git repository or tarball) and set of “input” packages, and produces one or more files in the “store.” Each package knows only about the set of inputs given to it; the build process cannot make network connections or pollute the system outside the build environment.
Channels (i.e. package repositories) are simply git repos containing Guile modules. Once you know how to define packages in Scheme it’s fairly simple to just put them up in a git repo online. Guix is a source-based distribution so you don’t even have to build any packages, the package manager will do that
An environment is a temporary profile containing the set of dependencies for a given package, meant to more easily get started in hacking on a single package.
Thanks for the info!