Jump to content

Guix System Distribution

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Mayhair (talk | contribs) at 11:36, 8 May 2019. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Guix System Distribution
GuixSD running Xfce, GNU IceCat and GNU Emacs
DeveloperGNU Project[1][2]
OS familyUnix-like
Working stateRTM (Release to manufacturing)
Source modelOpen source
Latest release1.0.0[3] / 2 May 2019; 6 years ago (2019-05-02)
Marketing targetDesktop
Package managerGNU Guix
Platformsx86_64, i686, arm[4]
Kernel typeMonolithic: Linux-libre (operational) Microkernel: GNU Hurd (under development)
UserlandGNU
LicenseGPL
Official websitegnu.org/software/guix

Guix System Distribution (abbreviated GuixSD[5]) is a Linux distribution built around the GNU Guix package manager.[6][7] It enables a declarative operating system configuration[8] and allows reliable system upgrades that can easily be rolled back[9]. It uses the Linux-libre kernel, with support for the GNU Hurd kernel under development.[10] On February 3, 2015, the distribution was added to the Free Software Foundation's list of free Linux distributions.[11]

Architecture support

The following CPU architectures are supported: IA-32, x64, AArch32, AArch64[12] and in April 2019 work was in progress for POWER9 support.[13]

Features

GNU Guix

GuixSD is based on GNU Guix, a purely functional package and system configuration manager derived from Nix, using the GNU Guile implementation of the Scheme programming language. All package recipes, as well as the whole system configuration, are written in declarative embedded domain-specific languages in Guile Scheme.[14]

GNU Shepherd

GuixSD uses the GNU Daemon Shepherd as its init system, which is developed in tandem with Guix and is written in Guile as well. It was previously known as "dmd", which stood for "Daemon managing Daemons" or "Daemons-managing Daemon", but changed names to avoid collision with the Digital Mars D compiler.[15]

Shepherd supplies user-space functionality asynchronously as services, which under Shepherd are generic functions and object data types that are exported for use by the Shepherd to extend the base operating system in some defined way. In contrast to systemd, a userspace shepherd process runs as that user. Core to the Shepherd model of user space initialisation is the concept of the extension, a form of composability where services are designed to be layered onto other services, augmenting them with more elaborate or specialised behaviours as desired.[16] This expresses the instantiation-based dependency relationships found in many modern init systems,[17] making the system modular, but also allows services to interact variadically with other services in arbitrary ways.

Shepherd also provides so-called 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.[18] A system governed via the Shepherd daemon can represent its user space as a directed acyclic graph, with the "system-service" − responsible for early phases of boot and init − as its root, and all subsequently initialised services as extensions to system-service's functionality, either directly or over other services.[16][19]

Being both written and configured in Guile Scheme, GNU Shepherd is intended to be highly programmable by the system administrator, but it can also be used to manage per-user profiles of unprivileged daemons and services.[20] 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 Distribution,[21] 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.[22][23]

GNU Shepherd was originally designed to work with GNU Hurd, and was later adopted by GuixSD.[24]

Release and stability

GuixSD to date has only an unstable development git repository[25] shared with Guix but enables users or organizations to set up stable release channels themselves via the channel-feature[26].

Updates

Packages in Guix are generally very up-to-date thanks to the lack of package maintainers. In the Guix community everyone can contribute to update the software. Tools such as guix refresh help automate the process.

Changes to the git repository are peer-reviewed by community members and committed by one of the 45 people with commit access.[27] In practice sometimes these builds 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 should leave users with a broken system, users can easily roll back individual packages as well as the whole system state[28]. This means that a stable channel which 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.

Reception

Jesse Smith from DistroWatch Weekly reviewed GuixSD 0.15.0, and said, "GuixSD has a package manager that I like", but criticized the limited hardware support and its limited documentation.[29]

See also

References

  1. ^ GuixSD Contributors. "About — GuixSD". gnu.org. Retrieved March 16, 2017. {{cite web}}: |author= has generic name (help)
  2. ^ "GNU/Linux FAQ - GNU Project - Free Software Foundation". Free Software Foundation. Retrieved May 14, 2017.
  3. ^ GNU Guix released — 2019 — Distrowatch — GuixSD
  4. ^ Mathieu Othacehe. "Porting GuixSD to ARMv7". Retrieved February 17, 2018.
  5. ^ "What to call Guix?" (Mailing list). gnu-system-discuss. January 15, 2015.
  6. ^ "List of Free GNU/Linux Distributions". Retrieved February 3, 2015.
  7. ^ "Guix: A New Package Manager & GNU Distribution". Phoronix. Retrieved February 3, 2015.
  8. ^ "Using the Configuration System". gnu.org. Retrieved April 27, 2019.
  9. ^ "Package Management". gnu.org. Retrieved April 27, 2019.
  10. ^ "GNU Guix & GuixSD 0.12.0 released" (Mailing list). guix-devel. December 21, 2016.
  11. ^ "FSF adds Guix System Distribution to list of endorsed distributions". Free Software Foundation. February 3, 2015. Retrieved February 3, 2015.
  12. ^ "Download". gnu.org. Retrieved April 27, 2019.
  13. ^ "Patch adding POWER9 cross compile support" (Mailing list). Retrieved April 27, 2019.
  14. ^ "Programming Interface".
  15. ^ "guix-devel mailing lists". Retrieved November 5, 2016.
  16. ^ a b "GNU Guix Reference Manual: Service Composition". GNU Project. Retrieved November 5, 2016.
  17. ^ "systemd: Unit Dependencies and Order". Fedora Magazine. Retrieved November 5, 2016.
  18. ^ "The GNU Shepherd Manual: Jump Start". GNU Project. Retrieved November 5, 2016.
  19. ^ "GNU Guix Reference Manual: Shepherd Services". GNU Project. Retrieved November 5, 2016.
  20. ^ "The GNU Shepherd Manual". GNU Project. Retrieved November 5, 2016.
  21. ^ "GNU Guix Reference Manual: Services". GNU Project. Retrieved November 5, 2016.
  22. ^ "GNU Guix Reference Manual: Service Types and Services". GNU Project. Retrieved November 5, 2016.
  23. ^ "GNU Guix Reference Manual: Using the Configuration System". GNU Project. Retrieved November 5, 2016.
  24. ^ "GNU Shepherd". GNU project. Retrieved February 12, 2016.
  25. ^ "Re: We need an RFC procedure" (Mailing list). Retrieved April 27, 2019.
  26. ^ "Channels". gnu.org. Retrieved April 27, 2019.
  27. ^ "GNU Guix - Summary: Project Memberlist". gnu.org. Retrieved April 27, 2019.
  28. ^ "Invoking guix system". gnu.org. Retrieved April 27, 2019.
  29. ^ Smith, Jesse. "Guix System Distribution 0.15.0 and ReactOS 0.4.9". distrowatch.com (778). Retrieved August 30, 2018.