GNU Guix System

Last updated

Guix System
Guix logo.svg
Guixsd-xfce-icecat-emacs.png
Guix System running Xfce, GNU IceCat and GNU Emacs
Developer GNU Project [1] [2]
OS family Linux (Unix-like)
Working stateCurrent [3]
Source model Free software, FSDG
Latest release 1.4.0 [4]   OOjs UI icon edit-ltr-progressive.svg / 19 December 2022;15 months ago (19 December 2022)
Marketing targetDesktop
Package manager GNU Guix
Platformsx86_64, i686, aarch64, armv7, powerpc64le
Kernel typeMonolithic: Linux-libre (operational) Microkernel: GNU Hurd (under development)
Userland GNU
License GPL
Official website guix.gnu.org

GNU Guix System or Guix System [5] [6] (previously known as GuixSD [7] ) is a rolling release, free and open source Linux distribution built around the GNU Guix package manager. [8] [9] It enables a declarative operating system configuration [10] and allows system upgrades which the user can rollback. [11] It uses the GNU Shepherd init system [12] [13] and the Linux-libre kernel, with support of the GNU Hurd kernel under development. [14] On February 3, 2015, the Free Software Foundation added the distribution to its list of endorsed free Linux distributions. [15] The Guix package manager and the Guix System drew inspiration from and were based on the Nix package manager and NixOS respectively. [16]

Contents

Architecture support

The following CPU architectures are supported: [17]

Features

System services

System services, which are defined in Guile Scheme, [20] 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, a ssh server, and a webserver serving guix-web via nginx on a specific port at bootup). They can: [21]

GNU Shepherd init system

The Guix System uses the GNU Daemon Shepherd, formerly known as "dmd" ("Daemon managing Daemons"), as its init system, which is developed in tandem with Guix and is written and configurable in Guile. [22] 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 specialised behaviours as desired. [23] This expresses the instantiation-based dependency relationships found in many modern init systems, [24] making the system modular, but also allows services to interact variadically with other services in arbitrary ways, e.g. a service which 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. [25] 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 boot and init, as its root, and all subsequently initialized services as extensions to system-service functionality, either directly or transitively over other services. [23] [26]

It is intended to be highly programmable by the system administrator using Guile, but it can also be used to manage per-user profiles of unprivileged daemons and services. [27] Its services and configuration are stored uniformly as object-oriented Scheme code, and while a core set of services are provided with the basic Guix System, [28] 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. [29] [30]

GNU Shepherd was originally designed to work with GNU Hurd, and was later adopted by Guix System. [31]

Parameterized Packages

With Guix's model of building every package from source, Guix is able to take advantage of this and include compile-time options for almost all of its packages. Parameterized packages represent an innovative package transformation approach that extends its capability to finely adjust compile-time settings. This includes tasks like eliminating redundant dependencies or configuring a package to support only specific locales. The applications of this advancement are diverse, spanning from high-performance computing to embedded systems. Additionally, it has the potential to address some of Linux's challenges, such as oversized binary files and complex dependency structures. In the case of substitutes, it is still unknown how the combination of parameters will be treated, however it is suggested that important combinations should be included in the repository. This is similar to Gentoo Linux's USE flags. This is still in development, and as such is yet to be seen in an official Guix release. [32]

Release and stability

To date, the Guix System is dependent on unstable git repository development [33] shared with Guix but enables users or organizations to set up stable release channels themselves via the channel-feature. [34]

Updates

Packages in Guix are generally very up-to-date[ according to whom? ] thanks to the lack of a package maintainer bottlenecks. Anyone can contribute an update subject to community approval and the process is assisted by tools such as guix refresh. [35]

Changes to the git repository are peer-reviewed by community members and committed by one of the 45 people with commit access. [36] In practice these builds sometimes[ how often? ] cause system breakages for users because of a typo or similar error, but these are often solved within minutes. The way Guix pull operates means users retain a working system in the meantime.[ citation needed ]

Roll-back

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 simple command:
guix package --roll-back [37]
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, [38] and the generation system which maintains a history of system configurations as "generations." These generations are stored as separate profiles, which allow you to roll back to any previous configuration, [39] and you can see these generations with
guix package --list-generations.

Reception

Jesse Smith from DistroWatch Weekly reviewed GNU Guix System 0.15.0 (at the time named GuixSD), and said, "GuixSD has a package manager that I like", but criticized the limited hardware support and its limited documentation. [40] The documentation has since then been expanded and improved with videos [41] and a cookbook [42] in six languages with tutorials, how-to guides and examples.

See also

Related Research Articles

<span class="mw-page-title-main">GNU Hurd</span> Operating system kernel designed as a replacement for Unix

GNU Hurd is a collection of microkernel servers written as part of GNU, for the GNU Mach microkernel. It has been under development since 1990 by the GNU Project of the Free Software Foundation, designed as a replacement for the Unix kernel, and released as free software under the GNU General Public License. When the Linux kernel proved to be a viable solution, development of GNU Hurd slowed, at times alternating between stasis and renewed activity and interest.

man page Unix software documentation

A man page is a form of software documentation usually found on a Unix or Unix-like operating system. Topics covered include computer programs, formal standards and conventions, and even abstract concepts. A user may invoke a man page by issuing the man command.

<span class="mw-page-title-main">Portage (software)</span> Gentoo package management system

Portage is a package management system originally created for and used by Gentoo Linux and also by ChromeOS, Calculate, Sabayon, and Funtoo Linux among others. Portage is based on the concept of ports collections. Gentoo is sometimes referred to as a meta-distribution due to the extreme flexibility of Portage, which makes it operating-system-independent. The Gentoo/Alt project was concerned with using Portage to manage other operating systems, such as BSDs, macOS and Solaris. The most notable of these implementations is the Gentoo/FreeBSD project.

cron Job scheduler for Unix-like operating systems

The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs, also known as cron jobs, to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading email at regular intervals.

<span class="mw-page-title-main">Arch Linux</span> Rolling release distribution of Linux

Arch Linux is an independently developed x86-64 general-purpose Linux distribution that strives to provide the latest stable versions of most software by following a rolling-release model. The default installation is intentionally minimal so that users can add only the packages they require.

Technical variations of Linux distributions include support for different hardware devices and systems or software package configurations. Organizational differences may be motivated by historical reasons. Other criteria include security, including how quickly security upgrades are available; ease of package management; and number of packages available.

init UNIX system component

In Unix-based computer operating systems, init is the first process started during booting of the operating system. Init is a daemon process that continues running until the system is shut down. It is the direct or indirect ancestor of all other processes and automatically adopts all orphaned processes. Init is started by the kernel during the booting process; a kernel panic will occur if the kernel is unable to start it, or it should die for any reason. Init is typically assigned process identifier 1.

launchd is an init and operating system service management daemon created by Apple Inc. as part of macOS to replace its BSD-style init and SystemStarter. There have been efforts to port launchd to FreeBSD and derived systems.

<span class="mw-page-title-main">Linux</span> Family of Unix-like operating systems

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution (distro), which includes the kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses and recommends the name "GNU/Linux" to emphasize the use and importance of GNU software in many distributions, causing some controversy.

GNU variants are operating systems based upon the GNU operating system. According to the GNU project and others, these also include most operating systems using the Linux kernel and a few others using BSD-based kernels.

Nix is a cross-platform package manager. It employs a model in which software packages are each installed into unique directories with immutable contents. These directory names correspond to cryptographic hashes that take into account all dependencies of a package, including other packages managed by Nix.

<span class="mw-page-title-main">Linux-libre</span> Version of the Linux kernel without proprietary code

According to the Free Software Foundation Latin America, Linux-libre is a modified version of the Linux kernel that contains no binary blobs, obfuscated code, or code released under proprietary licenses. In the Linux kernel, they are mostly used for proprietary firmware images. While generally redistributable, binary blobs do not give the user the freedom to audit, modify, or, consequently, redistribute their modified versions. The GNU Project keeps Linux-libre in synchronization with the mainline Linux kernel.

NixOS is a free and open source Linux distribution based on the Nix package manager. NixOS is configured using composable modules, and relies on packages defined in the Nixpkgs project. Package recipes and configurations are written in the purpose-built "Nix language" that ships with the Nix package manager.

systemd Suite of system components for Linux

systemd is a software suite that provides an array of system components for Linux operating systems. The main aim is to unify service configuration and behavior across Linux distributions. Its primary component is a "system and service manager" – an init system used to bootstrap user space and manage user processes. It also provides replacements for various daemons and utilities, including device management, login management, network connection management, and event logging. The name systemd adheres to the Unix convention of naming daemons by appending the letter d. It also plays on the term "System D", which refers to a person's ability to adapt quickly and improvise to solve problems.

<span class="mw-page-title-main">OpenRC</span> Init system for Unix-like computer operating systems

OpenRC is a dependency-based init system for Unix-like computer operating systems. It was created by Roy Marples, a NetBSD developer who was also active in the Gentoo project. It became more broadly adopted as an init system outside of Gentoo following the decision by some Linux distributions not to adopt systemd.

<span class="mw-page-title-main">GNU Guix</span> Purely functional package manager for the GNU system

GNU Guix is a functional cross-platform package manager and a tool to instantiate and manage Unix-like operating systems, based on the Nix package manager. Configuration and package recipes are written in Guile Scheme. GNU Guix is the default package manager of the GNU Guix System distribution.

<span class="mw-page-title-main">Hyperbola GNU/Linux-libre</span> Linux distribution based on Arch Linux

Hyperbola GNU/Linux-libre is a Linux distribution for the i686 and x86-64 architectures. It is based on Arch Linux snapshots and Debian development. It includes the GNU operating system components and the Linux-libre kernel instead of the generic Linux kernel. Hyperbola GNU/Linux-libre is listed by the Free Software Foundation as a completely free operating system, true to their Free System Distribution Guidelines.

doas is a program to execute commands as another user. The system administrator can configure it to give specified users privileges to execute specified commands. It is free and open-source under the ISC license and available in Unix and Unix-like operating systems.

References

  1. "About — GuixSD". gnu.org. Archived from the original on April 12, 2017. Retrieved March 16, 2017.
  2. "GNU/Linux FAQ - GNU Project - Free Software Foundation". Free Software Foundation. Archived from the original on September 7, 2013. Retrieved May 14, 2017.
  3. "Download — GNU Guix". Archived from the original on August 1, 2020. Retrieved November 3, 2019.
  4. Ludovic Courtès (December 19, 2022). "GNU Guix 1.4.0 released (English)" . Retrieved December 30, 2022.
  5. "About — GNU Guix". guix.gnu.org. Retrieved December 11, 2021.
  6. "Free GNU/Linux distributions".
  7. "What to call Guix?" (Mailing list). gnu-system-discuss. January 15, 2015. Archived from the original on August 7, 2020. Retrieved August 3, 2020.
  8. "List of Free GNU/Linux Distributions". Archived from the original on July 6, 2020. Retrieved February 3, 2015.
  9. "Guix: A New Package Manager & GNU Distribution". Phoronix. Archived from the original on February 2, 2015. Retrieved February 3, 2015.
  10. "Using the Configuration System". gnu.org. Archived from the original on April 29, 2019. Retrieved April 27, 2019.
  11. "Package Management". gnu.org. Archived from the original on May 21, 2019. Retrieved April 27, 2019.
  12. "Programming Interface (GNU Guix Reference Manual)". guix.gnu.org. Archived from the original on August 7, 2020. Retrieved August 3, 2020.
  13. "Guix: A New Package Manager & GNU Distribution - Phoronix". www.phoronix.com. Archived from the original on July 6, 2018. Retrieved August 3, 2020.
  14. "GNU Guix & GuixSD 0.12.0 released" (Mailing list). guix-devel. December 21, 2016. Archived from the original on August 1, 2020. Retrieved August 3, 2020.
  15. "FSF adds Guix System Distribution to list of endorsed distributions". Free Software Foundation. February 3, 2015. Archived from the original on February 3, 2015. Retrieved February 3, 2015.
  16. "GNU Guix Reference Manual - Acknowledgments".
  17. "Download". gnu.org. Archived from the original on October 6, 2021. Retrieved January 12, 2024.
  18. Mathieu Othacehe. "Porting GuixSD to ARMv7". Archived from the original on December 25, 2017. Retrieved February 17, 2018.
  19. Marusich, Chris; Le Bouter, Léo (April 12, 2021). "New Supported Platform: powerpc64le-linux". Archived from the original on May 16, 2021. Retrieved October 6, 2021.
  20. "guix.git". git.savannah.gnu.org. Archived from the original on May 11, 2019. Retrieved May 11, 2019.
  21. Wurmus, Ricardo. "Re: Help with preparing to move from Arch Linux to Guix" (Mailing list). Archived from the original on August 1, 2020. Retrieved May 11, 2019.
  22. "guix-devel mailing lists". Archived from the original on September 19, 2019. Retrieved November 5, 2016.
  23. 1 2 "GNU Guix Reference Manual: Service Composition". GNU Project. Archived from the original on January 1, 2019. Retrieved November 5, 2016.
  24. "systemd: Unit Dependencies and Order". Fedora Magazine. November 25, 2015. Archived from the original on August 1, 2020. Retrieved November 5, 2016.
  25. "The GNU Shepherd Manual: Jump Start". GNU Project. Archived from the original on August 1, 2020. Retrieved November 5, 2016.
  26. "GNU Guix Reference Manual: Shepherd Services". GNU Project. Archived from the original on January 1, 2019. Retrieved November 5, 2016.
  27. "The GNU Shepherd Manual". GNU Project. Archived from the original on August 1, 2020. Retrieved November 5, 2016.
  28. "GNU Guix Reference Manual: Services". GNU Project. Archived from the original on December 25, 2018. Retrieved November 5, 2016.
  29. "GNU Guix Reference Manual: Service Types and Services". GNU Project. Archived from the original on January 5, 2019. Retrieved November 5, 2016.
  30. "GNU Guix Reference Manual: Using the Configuration System". GNU Project. Archived from the original on April 29, 2019. Retrieved November 5, 2016.
  31. "GNU Shepherd". GNU project. Archived from the original on February 12, 2016. Retrieved February 12, 2016.
  32. Shah, Sarthak. "Parameterized Packages for GNU Guix". guix.gnu.org.
  33. "Re: We need an RFC procedure" (Mailing list). Archived from the original on August 1, 2020. Retrieved April 27, 2019.
  34. "Channels". gnu.org. Archived from the original on May 7, 2019. Retrieved April 27, 2019.
  35. "Invoking guix refresh". gnu.org. Archived from the original on December 26, 2018. Retrieved May 16, 2019.
  36. "GNU Guix - Summary: Project Memberlist". gnu.org. Archived from the original on August 1, 2020. Retrieved April 27, 2019.
  37. "Invoking guix system". gnu.org. Archived from the original on May 26, 2019. Retrieved April 27, 2019.
  38. Courtès, Ludovic (2013). "Functional Package Management with Guix". p. 2. arXiv: 1305.4584 [cs.PL].
  39. "Multi-dimensional transactions and rollbacks, oh my!". guix.gnu.org.
  40. Smith, Jesse. "Guix System Distribution 0.15.0 and ReactOS 0.4.9". distrowatch.com (778). Archived from the original on July 30, 2019. Retrieved August 30, 2018.
  41. "Videos". Archived from the original on August 1, 2020. Retrieved March 3, 2020.
  42. "Cookbook". Archived from the original on August 1, 2020. Retrieved March 3, 2020.
  43. "About — GuixSD". www.gnu.org. Archived from the original on December 27, 2015. Retrieved May 3, 2018.
  44. "NixBSD: This Project Mixes FreeBSD and NixOS in One!". It's FOSS News. March 5, 2024. Retrieved March 28, 2024.
  45. nixos-bsd/nixbsd, NixBSD, March 28, 2024, retrieved March 28, 2024