• adrianmalacoda@lemmy.ml
    link
    fedilink
    arrow-up
    4
    ·
    3 years ago

    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.