GNU Guix System explained

Guix System
Logo Size:100px
Developer:GNU Project[1] [2]
Family:Linux (Unix-like)
Working State:Current[3]
Source Model:Free software, FSDG
Marketing Target:Desktop
Package Manager:GNU Guix
Supported Platforms:x86_64, i686, aarch64, armv7, powerpc64le
Kernel Type:Monolithic: Linux-libre (operational)Microkernel: GNU Hurd (under development)
Userland:GNU
License:GPL

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

Architecture support

The following CPU architectures are supported:[16]

Features

System services

System services, which are defined in the Guile Scheme,[19] 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:[20]

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.[21] 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.[22] This expresses the instantiation-based dependency relationships found in many modern init systems,[23] 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.[24] 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.[22] [25]

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.[26] 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,[27] 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.[28] [29]

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

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.[31]

Release and stability

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

Updates

Packages in Guix are generally very up-to-date 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.[34]

Changes to the git repository are peer-reviewed by community members and committed by one of the 45 people with commit access.[35] In practice these builds sometimes 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.

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[36]
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,[37] 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,[38] 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.[39] The documentation has since then been expanded and improved with videos[40] and a cookbook[41] in six languages with tutorials, how-to guides and examples.

See also

External links

Notes and References

  1. Web site: About — GuixSD. gnu.org. March 16, 2017. April 12, 2017. https://web.archive.org/web/20170412151807/https://www.gnu.org/software/guix/about/. live.
  2. Web site: GNU/Linux FAQ - GNU Project - Free Software Foundation . . 2017-05-14 . September 7, 2013 . https://web.archive.org/web/20130907132420/http://www.gnu.org/gnu/gnu-linux-faq.html . live .
  3. Web site: Download — GNU Guix . 2019-11-03 . August 1, 2020 . https://web.archive.org/web/20200801030945/http://guix.gnu.org/download/ . live .
  4. Web site: About — GNU Guix. 2021-12-11. guix.gnu.org.
  5. Web site: Free GNU/Linux distributions . www.gnu.org.
  6. What to call Guix? . gnu-system-discuss . 2015-01-15 . August 3, 2020 . August 7, 2020 . https://web.archive.org/web/20200807015108/https://lists.gnu.org/archive/html/gnu-system-discuss/2015-01/threads.html . dead .
  7. Web site: List of Free GNU/Linux Distributions . live . https://web.archive.org/web/20200706001125/http://www.gnu.org/distros/free-distros.html . July 6, 2020 . February 3, 2015 . www.gnu.org.
  8. Web site: Guix: A New Package Manager & GNU Distribution . . February 3, 2015 . February 2, 2015 . https://web.archive.org/web/20150202160820/http://www.phoronix.com/scan.php?page=news_item&px=MTIzNjY . live .
  9. Web site: Using the Configuration System . live . https://web.archive.org/web/20190429053100/http://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html . April 29, 2019 . 27 April 2019 . www.gnu.org.
  10. Web site: Package Management . live . https://web.archive.org/web/20190521083050/http://www.gnu.org/software/guix/manual/html_node/Package-Management.html . May 21, 2019 . 27 April 2019 . www.gnu.org.
  11. Web site: Programming Interface (GNU Guix Reference Manual). 2020-08-03. guix.gnu.org. August 7, 2020. https://web.archive.org/web/20200807063705/https://guix.gnu.org/manual/en/html_node/Programming-Interface.html. live.
  12. Web site: Guix: A New Package Manager & GNU Distribution - Phoronix. 2020-08-03. www.phoronix.com. July 6, 2018. https://web.archive.org/web/20180706190833/https://www.phoronix.com/scan.php?page=news_item&px=MTIzNjY. live.
  13. GNU Guix & GuixSD 0.12.0 released . guix-devel . 2016-12-21 . August 3, 2020 . August 1, 2020 . https://web.archive.org/web/20200801040538/https://lists.gnu.org/archive/html/guix-devel/2016-12/msg00857.html . dead .
  14. Web site: FSF adds Guix System Distribution to list of endorsed distributions . Free Software Foundation . 3 February 2015 . February 3, 2015 . February 3, 2015 . https://web.archive.org/web/20150203220723/http://www.fsf.org/news/fsf-adds-guix-system-distribution-to-list-of-endorsed-distributions . dead .
  15. Web site: GNU Guix Reference Manual - Acknowledgments.
  16. Web site: Download . gnu.org . 12 January 2024 . October 6, 2021 . https://web.archive.org/web/20211006202843/https://guix.gnu.org/download/ . live .
  17. Web site: Porting GuixSD to ARMv7. Mathieu Othacehe. February 17, 2018. December 25, 2017. https://web.archive.org/web/20171225124534/https://www.gnu.org/software/guix/blog/2017/porting-guixsd-to-armv7/. live.
  18. Web site: New Supported Platform: powerpc64le-linux . April 12, 2021 . Marusich . Chris . Le Bouter . Léo . October 6, 2021 . May 16, 2021 . https://web.archive.org/web/20210516202248/https://guix.gnu.org/en/blog/2021/new-supported-platform-powerpc64le-linux/ . live .
  19. Web site: guix.git . git.savannah.gnu.org . 11 May 2019 . May 11, 2019 . https://web.archive.org/web/20190511160745/http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services . live .
  20. Wurmus . Ricardo . Re: Help with preparing to move from Arch Linux to Guix . help-guix . 11 May 2019 . August 1, 2020 . https://web.archive.org/web/20200801074755/https://lists.gnu.org/archive/html/help-guix/2019-05/msg00262.html . live .
  21. Web site: guix-devel mailing lists . 2016-11-05 . September 19, 2019 . https://web.archive.org/web/20190919005906/https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00274.html . live .
  22. Web site: GNU Guix Reference Manual: Service Composition . GNU Project . 2016-11-05 . January 1, 2019 . https://web.archive.org/web/20190101055440/https://www.gnu.org/software/guix/manual/html_node/Service-Composition.html#Service-Composition . live .
  23. Web site: systemd: Unit Dependencies and Order . November 25, 2015 . Fedora Magazine . 2016-11-05 . August 1, 2020 . https://web.archive.org/web/20200801020502/https://fedoramagazine.org/systemd-unit-dependencies-and-order/ . live .
  24. Web site: The GNU Shepherd Manual: Jump Start . GNU Project . 2016-11-05 . August 1, 2020 . https://web.archive.org/web/20200801025359/https://www.gnu.org/software/shepherd/manual/html_node/Jump-Start.html#Jump-Start . live .
  25. Web site: GNU Guix Reference Manual: Shepherd Services . GNU Project . 2016-11-05 . January 1, 2019 . https://web.archive.org/web/20190101055405/https://www.gnu.org/software/guix/manual/html_node/Shepherd-Services.html#Shepherd-Services . live .
  26. Web site: The GNU Shepherd Manual . GNU Project . 2016-11-05 . August 1, 2020 . https://web.archive.org/web/20200801034906/https://www.gnu.org/software/shepherd/manual/html_node/Introduction.html#Introduction . live .
  27. Web site: GNU Guix Reference Manual: Services . GNU Project . 2016-11-05 . December 25, 2018 . https://web.archive.org/web/20181225093221/https://www.gnu.org/software/guix/manual/html_node/Services.html#Services . live .
  28. Web site: GNU Guix Reference Manual: Service Types and Services . GNU Project . 2016-11-05 . January 5, 2019 . https://web.archive.org/web/20190105220243/https://www.gnu.org/software/guix/manual/html_node/Service-Types-and-Services.html#Service-Types-and-Services . live .
  29. Web site: GNU Guix Reference Manual: Using the Configuration System . GNU Project . 2016-11-05 . April 29, 2019 . https://web.archive.org/web/20190429053100/http://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html#Using-the-Configuration-System . live .
  30. Web site: GNU Shepherd . GNU project . 2016-02-12 . February 12, 2016 . https://web.archive.org/web/20160212224150/https://www.gnu.org/software/shepherd/ . live .
  31. Web site: Shah . Sarthak . Parameterized Packages for GNU Guix . guix.gnu.org.
  32. Re: We need an RFC procedure . gnu.org . 27 April 2019 . August 1, 2020 . https://web.archive.org/web/20200801031148/https://lists.gnu.org/archive/html/guix-devel/2017-04/msg00531.html . live .
  33. Web site: Channels . live . https://web.archive.org/web/20190507033625/https://www.gnu.org/software/guix/manual/en/html_node/Channels.html . May 7, 2019 . 27 April 2019 . www.gnu.org.
  34. Web site: Invoking guix refresh . live . https://web.archive.org/web/20181226062252/http://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-refresh.html#Invoking-guix-refresh . December 26, 2018 . 16 May 2019 . www.gnu.org.
  35. Web site: GNU Guix - Summary: Project Memberlist . live . https://web.archive.org/web/20200801021906/https://savannah.gnu.org/project/memberlist.php?group=guix . August 1, 2020 . 27 April 2019 . savannah.gnu.org.
  36. Web site: Invoking guix system . live . https://web.archive.org/web/20190526043643/http://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-system.html . May 26, 2019 . 27 April 2019 . www.gnu.org.
  37. Courtès . Ludovic . Functional Package Management with Guix . 2013 . 2 . cs.PL . 1305.4584 .
  38. Web site: Multi-dimensional transactions and rollbacks, oh my! . guix.gnu.org.
  39. Guix System Distribution 0.15.0 and ReactOS 0.4.9. Smith. Jesse. 778. distrowatch.com. 2018-08-30. July 30, 2019. https://web.archive.org/web/20190730123927/https://distrowatch.com/weekly.php?issue=20180827#guixsd. live.
  40. Web site: Videos. 2020-03-03. August 1, 2020. https://web.archive.org/web/20200801025330/http://guix.gnu.org/videos/. live.
  41. Web site: Cookbook. 2020-03-03. August 1, 2020. https://web.archive.org/web/20200801021809/http://guix.gnu.org/cookbook/. live.
  42. Web site: About — GuixSD. www.gnu.org. en. 2018-05-03. December 27, 2015. https://web.archive.org/web/20151227172955/http://www.gnu.org/software/guix/about/. live.
  43. Web site: 2024-03-05 . NixBSD: This Project Mixes FreeBSD and NixOS in One! . 2024-03-28 . It's FOSS News . en.