GNU Guix System or
Guix System (formerly named
GuixSD) is a
rolling release,
free and open source Linux distribution built on Guix, similar to how
NixOS is built on
Nix. It enables a
declarative programming operating system configuration and allows system upgrades that the user can
roll back. It uses the GNU Shepherd
init system and the
Linux-libre kernel, with the support of the
GNU Hurd kernel under development. On February 3, 2015, the
Free Software Foundation added the distribution to its list of endorsed free Linux distributions.
Architecture support Central processing unit (CPU) architecture support includes: •
IA-32 •
x86-64 •
ARMv7 •
AArch64 •
POWER9 •
RISC-V 64 •
MIPS64 enable the user to declaratively compose the configuration of
daemons and background services and specify configurations. This enables the user, within a single configuration file or modularized configuration, to configure the whole operating system (e.g., to have a
Tor proxy, an
ssh server, and a webserver serving guix-web via
nginx on a specific port at
bootup). They can: • generate files in the filesystem (needed by some applications e.g. files in
/etc) • run any code for setting up daemons • create specific user and group accounts (e.g. a database user for
PostgreSQL)
GNU Shepherd init system The GNU Guix System uses the
GNU Daemon Shepherd, formerly known as
Daemon managing Daemons (dmd), as its
init system, which is developed in tandem with Guix and is written and configurable in
Guile. It supplies user-space functionality asynchronously as services, which under Shepherd are
generic functions and
object data types which it uses to extend the base operating system in a defined way. In contrast to
systemd, a userspace shepherd process runs as the user. Central to the Shepherd model of
user space initialization is the concept of the
extension, a form of
composability whereby services are designed to be layered onto other services, augmenting them with more elaborate or specialized behaviours as desired. This expresses the instantiation-based dependency relationships found in many modern init systems, making the system modular, but also allows services to interact
variadically with other services in arbitrary ways, e.g. a service that extends two other services,
requiring only one to be present, but readily extending the second one if it is later instantiated without the need for any further reconfiguration or setup. Shepherd also provides
virtual services which allow
dynamic dispatch over a class of related service objects, such as all those which instantiate a
mail transfer agent (MTA) for the system. A system governed via the Shepherd daemon can represent its user space as a
directed acyclic graph, with the "system-service," which is responsible for early phases of booting up the system and initializing it, as its root, and all subsequently initialized services as extensions to system-service functionality, either directly or transitively over other services. It is intended to be highly programmable by the
system administrator using Guile Scheme, but it can also be used to manage per-user profiles of unprivileged daemons and services. Its services and configuration are stored uniformly as object-oriented
Scheme code, and while a core set of services are provided with the basic GNU Guix System, arbitrary new services can be flexibly declared, and through Guile's
object system,
GOOPS, existing services can be redefined at the user's discretion by asking the Shepherd to dynamically rewrite services in specified ways on instantiation. GNU Shepherd was originally designed to work with
GNU Hurd, and was later adopted by GNU Guix System.
Roll-back Similar to the roll-back feature of
Nix, if a system update leaves users with a broken system, users can easily roll back individual packages as well as the whole system state with a single command, guix package --roll-back. This means that the kind of stable channel that is very common in other Linux distributions is no longer needed for users who are willing to report a bug and wait a few minutes, when trying to update via
guix pull. This is accomplished by a combination of Guix's functional
package manager, which treats each package and system configuration as an immutable and reproducible entity, and the generation system which maintains a history of system configurations as "generations." These generations are stored as separate profiles, which allows the user to roll back to any previous configuration, and these generations can be shown with guix package --list-generations.
Reception Jesse Smith from
DistroWatch Weekly reviewed GNU Guix System 0.15.0 (then named GuixSD), and said, "GuixSD has a package manager that I like", but criticized the limited hardware support and its limited documentation. The documentation has since then been expanded and improved with videos and a cookbook in six languages with tutorials, how-to guides and examples. == Reproducible scientific workflows ==