Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 General features  





2 The store  



2.1  Garbage collection  







3 Package definitions  





4 Transactional upgrades  





5 Profiles  



5.1  Multiple user profiles  







6 Roll-back  





7 Shell environment  



7.1  Persistent development environment  







8 Pack  





9 Graph  





10 Guix System (operating system)  





11 History  





12 Releases  





13 See also  





14 References  





15 External links  














GNU Guix






العربية
Català
Čeština
Deutsch
Español
فارسی
Français

Português
Русский
Türkçe
Українська

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikimedia Commons
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


GNU Guix

Stable release

1.4.0[1] Edit this on Wikidata / 19 December 2022; 18 months ago (19 December 2022)

Repository

Written in

Guile Scheme, C++ (Nix core)

License

GPLv3+

Website

guix.gnu.org/en/

GNU Guix (/ɡks/[2]) 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.[3]

Differing from traditional package managers, Guix (like Nix) utilizes a purely functional deployment model where software is installed into unique directories generated through cryptographic hashes. All dependencies for each software are included within each hash.[4][5] This solves the problem of dependency hell,[6] allows multiple versions of the same software to coexist and makes packages portable and reproducible. Performing scientific computations in a Guix setup has been proposed as a promising response to the replication crisis.[7][8]

The development of GNU Guix is intertwined with the GNU Guix System,[9] an installable operating system distribution using the Linux-libre kernel and GNU Shepherd init system.[10][11][12]

General features[edit]

Guix packages are defined through functional Guile Scheme APIs specifically designed for package management. Dependencies are tracked directly in this language through special values called "derivations" which are evaluated by the Guix daemon lazily. Guix keeps track of these references automatically so that installed packages can be garbage collected when no other package depends on them - at the cost of greater storage requirements, all upgrades in Guix are guaranteed to be both atomic and can be rolled back.

The roll-back feature of Guix is inherited from the design of Nix and is rarely found in other operating systems, since it requires an unorthodox approach to how the system should function (see MicroOS). The Guix package manager, like Nix, can however be used on many distributions like Debian and Parabola.[13][14] This also enables multiple users to safely install software on the same system without administrator privileges.

Compared to traditional package managers, Guix package stores can grow considerably bigger and therefore require more bandwidth; although compared to container solutions (like Docker) that are also commonly employed to solve dependency hell, Guix is leaner and conforms to practices like Don't repeat yourself and Single source of truth. If the user chooses to build everything from source even larger storage space and bandwidth is required.

The store[edit]

Inherited from the design of Nix, most of the content of the package manager is kept in a directory /gnu/store where only the Guix daemon has write-access. This is achieved via specialised bind mounts, where the Store as a file system is mounted read only, prohibiting interference even from the root user, while the Guix daemon remounts the Store as read/writable in its own private namespace. Guix talks with this daemon to build things or fetch substitutes which are all kept in the store. Users are discouraged from ever manually touching the store by re-mounting it as writable since this defeats the whole purpose of the store.

Garbage collection[edit]

Guix - like Nix - has built-in garbage collection facilities to help prune dead store items and keep the live ones.[15]

Package definitions[edit]

This is an example of a package definition for the hello-package:

(define-public hello
  (package
   (name "hello")
   (version "2.10")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/hello/hello-" version
                                ".tar.gz"))
            (sha256
             (base32
              "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
   (build-system gnu-build-system)
   (synopsis "Hello, GNU world: An example GNU package")
   (description
    "GNU Hello prints the message \"Hello, world!\" and then exits.  It
 serves as an example of standard GNU coding practices.  As such, it supports
 command-line arguments, multiple languages, and so on.")
   (home-page "https://www.gnu.org/software/hello/")
   (license gpl3+)))

It is written using Guile. The package recipes can easily be inspected (running e.g. guix edit hello) and changed in Guix, making the system transparent and very easy to modify.

Transactional upgrades[edit]

Inherited from the design of Nix, all manipulation of store items is independent of each other, and the directories of the store begin with a base32-encoded hash of the source code of the derivation along with its inputs.

Profiles[edit]

Guix package uses profiles generations, which are a collection of symlinks to specific store items together comprising what the user has installed into the profile. Every time a package is installed or removed, a new generation will be built.

E.g. the profile of a user who only installed GNU Hello contains links to the store item which holds the version of hello installed with the currently used guix.

E.g. on version c087a90e06d7b9451f802323e24deb1862a21e0f of guix, this corresponds to the following item: /gnu/store/md2plii4g5sk66wg9cgwc964l3xwhrm9-hello-2.10 (built from the recipe above).

In addition to symlinks, each profile guix builds also contains a union of all the info-manuals, man-pages, icons, fonts, etc. so that the user can browse documentation and have access to all the icons and fonts installed.

The default symlinks to profile generations are stored under /var/guix in the filesystem.

Multiple user profiles[edit]

The user can create any number of profiles by invoking guix package -p PROFILE-NAME COMMAND. A new directory with the profile-name as well as profile-generation-symlinks will then be created in the current directory.

Roll-back[edit]

Guix package enables instantaneous roll-back to a previous profile generation via changing the symlink to an earlier profile generation.[16] Profiles are also stored in the store e.g. this item is a profile containing hello above: /gnu/store/b4wipjlsapvnijmbawl7sh76087vpl4n-profile (built and activated when running guix install hello).

Shell environment[edit]

Guix shell enables the user to easily enter an environment where all the necessary packages for development of software are present without clogging up the users default profile with dependencies for multiple projects.[17]

E.g. running guix shell --development hello enters a throw-away environment where everything needed to compile hello on guix is present (gcc, guile, etc.).

Without the --development flag, only the package hello would be installed and not its build-dependencies. This supplants the guix environment command, which installs the dependencies of a package by default, as it was considered more intuitive for the command to install the specified packages by default and only install development dependencies with a flag.[18]

Persistent development environment[edit]

If you want a persistent gc-rooted environment that is not garbage collected on the next run of guix gc you can create a root:

E.g. running guix shell --root=hello-root --development hello enters an environment where everything needed to compile guix is present (gcc, guile, etc.) and registered as a root in the current directory (by symlinking to the items in the store).

Pack[edit]

Guix pack enables the user to bundle together store items and output them as either a docker binary image, a relocatable tarball or a squashfs binary.[19]

Graph[edit]

Guix graph enables the user to view different graphs of the packages and their dependencies.[20]

Guix System (operating system)[edit]

GNU Guix System uses Guix as its package manager and configuration system, similar to how NixOS uses Nix.

History[edit]

The project was started in June 2012 by Ludovic Courtès, one of the GNU Guile hackers.[21]

The GNU Project announced in November 2012 the first release of GNU Guix, a functional package manager based on Nix that provides, among other things, Guile Scheme APIs.[22]

On August 20, 2015, it was announced that Guix had been ported to GNU Hurd.[23]

Releases[edit]

The project has no fixed release schedule and has until now released approximately every 6 months.

Version

Announcement

Supported architectures

Packages

0.1 (alpha)

Courtès, Ludovic (18 January 2013). "GNU Guix 0.1 released (alpha)".

i686, x86_64

~150

0.2 (alpha)

Courtès, Ludovic (12 May 2013). "GNU Guix 0.2 released (alpha)".

~400

0.3

Courtès, Ludovic (17 Jul 2013). "GNU Guix 0.3 released".

~430

0.4

Courtès, Ludovic (27 Sep 2013). "GNU Guix 0.4 released".

~490

0.5

Courtès, Ludovic (11 Dec 2013). "GNU Guix 0.5 released".

~600

0.6

Courtès, Ludovic (9 Apr 2014). "GNU Guix 0.6 released".

~691

0.7

Courtès, Ludovic (25 Jul 2014). "GNU Guix 0.7 released".

~825

0.8

Courtès, Ludovic (18 Nov 2014). "GNU Guix 0.8 released".

i686, x86_64, mips64el

~987

0.8.1

Courtès, Ludovic (29 Jan 2015). "GNU Guix 0.8.1 released".

i686, x86_64, mips64el, armv7

~1151

0.8.2

Courtès, Ludovic (14 May 2015). "GNU Guix 0.8.2 released".

~1869

0.8.3

Courtès, Ludovic (22 Jul 2015). "GNU Guix 0.8.3 released".

~2048

0.9.0

Courtès, Ludovic (5 Nov 2015). "GNU Guix 0.9.0 released".

~2591

0.10.0

Courtès, Ludovic (29 Mar 2016). "GNU Guix & GuixSD 0.10.0 released".

~3230

0.11.0

Courtès, Ludovic (3 Aug 2016). "GNU Guix & GuixSD 0.11.0 released".

~3714

0.12.0

Wurmus, Ricardo (21 Dec 2016). "GNU Guix & GuixSD 0.12.0 released".

~4567

0.13.0

Courtès, Ludovic (22 May 2017). "GNU Guix & GuixSD 0.13.0 released".

i686, x86_64, mips64el, armv7, aarch64

~5407

0.14.0

Courtès, Ludovic (7 Dec 2017). "GNU Guix & GuixSD 0.14.0 released".

~6618

0.15.0

Courtès, Ludovic (6 Jul 2018). "GNU Guix & GuixSD 0.15.0 released".

~7857

0.16.0

Courtès, Ludovic (6 Dec 2018). "GNU Guix & GuixSD 0.16.0 released".

~8715

1.0.0

Courtès, Ludovic (2 May 2019). "GNU Guix 1.0.0 released".

~9712

1.0.1

Courtès, Ludovic (19 May 2019). "GNU Guix 1.0.1 released".

~9771

1.1.0

Courtès, Ludovic (15 April 2020). "GNU Guix 1.1.0 released".

i686, x86_64, armv7, aarch64

~13161

1.2.0

Courtès, Ludovic (23 November 2020). "GNU Guix 1.2.0 released".

~15333

1.3.0

Courtès, Ludovic (11 May 2021). "GNU Guix 1.3.0 released".

i686, x86_64, powerpc64le, armv7, aarch64

~17262

1.4.0

Courtès, Ludovic (19 December 2022). "GNU Guix 1.4.0 released".

i686, x86_64, powerpc64le, armv7, aarch64

~22000

See also[edit]

References[edit]

  1. ^ Ludovic Courtès (19 December 2022). "GNU Guix 1.4.0 released". Retrieved 21 December 2022.
  • ^ "GNU Guix Reference Manual". www.gnu.org. Retrieved 23 April 2018.
  • ^ Ludovic Courtès (2013). Functional Package Management with Guix. Madrid, Spain: European Lisp Symposium.
  • ^ Dolstra, E., de Jonge, M. and Visser, E. "Nix: A Safe and Policy-Free System for Software Deployment." In Damon, L. (Ed.), 18th Large Installation System Administration Conference (LISA '04), pages 79–92, Atlanta, Georgia, USA. USENIX, November 2004.
  • ^ Dolstra, E. The Purely Functional Software Deployment Model. PhD thesis, Faculty of Science, Utrecht, The Netherlands. January 2006. ISBN 90-393-4130-3.
  • ^ Prins, P., Suresh, J. and Dolstra, E., "Nix fixes dependency hell on all Linux distributions," Archived December 26, 2008, at the Wayback Machine linux.com, December 22, 2008
  • ^ Hinsen, Konrad (July 2020). "Staged computation: the technique you did not know you were using". Computing in Science and Engineering. 22 (4): 99–103. Bibcode:2020CSE....22d..99H. doi:10.1109/MCSE.2020.2985508. ISSN 1558-366X. S2CID 219990590. Retrieved 2022-11-04. Open access icon
  • ^ Vallet, Nicolas; Michonneau, David; Tournier, Simon (4 October 2022). "Toward practical transparent verifiable and long-term reproducible research using Guix" (PDF). Scientific Data. 9 (1): 597. Bibcode:2022NatSD...9..597V. doi:10.1038/s41597-022-01720-9. ISSN 2052-4463. PMC 9532446. PMID 36195618. Retrieved 2022-11-04. Open access icon
  • ^ "What to call Guix?" (Mailing list). gnu-system-discuss. 2015-01-15.
  • ^ Programming Interface (GNU Guix Reference Manual)
  • ^ Guix: A New Package Manager & GNU Distribution - Phoronix
  • ^ "guix-europe". git.savannah.gnu.org. Archived from the original on 24 January 2021. Retrieved 16 May 2019.
  • ^ "Guix - Debian Package Tracker".
  • ^ "Parabola GNU/Linux-libre - Package Search". www.parabola.nu. Retrieved 2021-09-14.
  • ^ "Invoking guix gc". gnu.org. Retrieved 16 May 2019.
  • ^ "Invoking guix package". gnu.org. Retrieved 16 May 2019.
  • ^ "Invoking guix shell". gnu.org. Retrieved 22 Nov 2023.
  • ^ "From 'guix environment' to 'guix shell'". gnu.org. Retrieved 22 Nov 2023.
  • ^ "Invoking guix pack". gnu.org. Retrieved 16 May 2019.
  • ^ "Invoking guix graph". gnu.org. Retrieved 16 May 2019.
  • ^ Stallman, Richard (2012-06-05). "A GNU Distribution" (Mailing list). gnu-system-discuss.
  • ^ Courtès, Ludovic (2012-11-23). "Introducing GNU Guix" (Mailing list). gnu-system-discuss.
  • ^ Ragkousis, Manolis (August 20, 2015). "[GSoC update] Porting Guix to GNU/Hurd" (Mailing list). guix-devel. Retrieved August 20, 2015.
  • ^ "About — GuixSD". www.gnu.org. Retrieved 2018-05-03.
  • External links[edit]

  • Data from Wikidata
  • History

  • Free Software Foundation
  • History of free software
  • Licenses

  • font exception
  • GNU Lesser General Public License
  • GNU Affero General Public License
  • GNU Free Documentation License
  • Software

  • Hurd
  • Linux-libre
  • glibc
  • Bash
  • coreutils
  • findutils
  • Build system
  • GCC
  • binutils
  • GDB
  • GRUB
  • GNUstep
  • GIMP
  • Jami
  • GNU Emacs
  • GNU TeXmacs
  • GNU Octave
  • GNU Taler
  • GNU R
  • GSL
  • GMP
  • GNU Electric
  • GNU Archimedes
  • GNUnet
  • GNU Privacy Guard
  • Gnuzilla (IceCat)
  • GNU Health
  • GNUmed
  • GNU LilyPond
  • GNU Go
  • GNU Chess
  • Gnash
  • Guix
  • more...
  • Contributors

  • Benjamin Mako Hill
  • Bradley M. Kuhn
  • Brian Fox
  • Federico Heinz
  • Georg C. F. Greve
  • John Sullivan
  • Nagarjuna G.
  • Richard M. Stallman
  • Other topics

  • Revolution OS
  • Free Software Foundation anti-Windows campaigns
  • Defective by Design
  • opkg
  • Gaming console

  • Nintendo eShop
  • PlayStation Store
  • Wii Shop Channel
  • Xbox Games Store
  • Linux
    Unix-like

    dpkg

  • aptitude
  • dselect
  • Synaptic
  • Ubuntu Software Center
  • Purely functional

  • Guix
  • RPM

  • DNF
  • APT-RPM
  • up2date
  • urpmi
  • ZYpp
  • tarball

  • slackpkg
  • netpkg
  • swaret
  • Other

  • Autopackage
  • Flatpak
  • Homebrew
  • Horizon Store
  • PackageKit
  • pacman
  • PBI
  • PETget
  • PISI
  • Portage
  • Snap
  • Upkg
  • pkgsrc
  • Helm
  • macOS

  • Homebrew
  • pkgsrc
  • Munki
  • z/OS

    Mobile OS

  • App Store
  • Aptoide
  • Cafe Bazaar
  • Cydia
  • F-Droid
  • GetJar
  • Google Play
  • Huawei AppGallery
  • Microsoft Store
  • RPM
  • SlideME
  • Windows Phone Store
  • Multi-platform

  • pkgsrc
  • Solarisillumos

  • OpenCSW
  • pkgsrc
  • Web browsers

  • Mozilla Add-ons
  • Windows

  • Cygwin
  • Microsoft Store
  • Npackd
  • NSIS
  • NuGet
  • Chocolatey
  • ProGet
  • Scoop
  • Windows Package Manager
  • wpkg
  • FreeBSD Ports
  • pkgsrc
  • C++

  • vcpkg
  • Java

  • Ivy
  • Gradle
  • JavaScript

    Kubernetes

    Linux

  • apt-build
  • Compile
  • Portage
  • Sorcery
  • BitBake
  • pkgsrc
  • macOS

  • MacPorts
  • pkgsrc
  • .NET

    Perl

    PHP

  • Composer
  • Python

  • pip
  • PyPM
  • Anaconda
  • Enthought Canopy
  • Ruby

    Rust

    Scala

  • Category
  • Commons
  • Android

  • Android-x86
  • CalyxOS
  • Celadon
  • ColorOS
  • DivestOS
  • EMUI
  • Fire OS
  • GrapheneOS
  • LineageOS
  • MIUI
  • One UI
  • Paranoid Android
  • PixelExperience
  • Replicant
  • Resurrection Remix OS
  • OmniROM
  • Arch

  • ArchLabs
  • Artix
  • BlackArch
  • EndeavourOS
  • Frugalware
  • Garuda
  • Hyperbola GNU
  • LinHES
  • Manjaro
  • Parabola GNU
  • SteamOS (3.0 onwards)
  • SystemRescue
  • Debian

    Ubuntu

  • Kubuntu
  • Lubuntu
  • Ubuntu Budgie
  • Ubuntu Cinnamon
  • Ubuntu Kylin
  • Ubuntu MATE
  • Ubuntu Studio
  • Ubuntu Unity
  • Xubuntu
  • Other

  • Astra
  • Bharat Operating System Solutions
  • BlankOn Linux
  • Damn Small Linux
  • deepin
  • Devuan
  • Elive
  • Endless OS
  • FreedomBox
  • Kaisen
  • Kali
  • Kanotix
  • Knoppix
  • MX Linux
  • Parrot OS
  • PureOS
  • Raspberry Pi OS
  • Q4OS
  • Slax
  • SparkyLinux
  • SolydXK
  • SteamOS (1.0–2.0)
  • Tails
  • UOS
  • Whonix
  • Fedora

  • Asahi
  • CentOS Stream
  • ClearOS
  • EulerOS
  • Linpus Linux
  • MIRACLE LINUX
  • Oracle Linux
  • Qubes OS
  • Red Hat Enterprise Linux
  • Red Star OS
  • Rocks Cluster Distribution
  • Rocky Linux
  • Sailfish OS
  • Tizen
  • Gentoo

  • ChromiumOS
  • Pentoo
  • Mandriva

  • Mageia
  • OpenMandriva Lx
  • PCLinuxOS
  • ROSA Linux
  • Slackware

  • Porteus
  • Salix OS
  • Slax
  • Zenwalk
  • SUSE

  • GeckoLinux
  • Other

  • Alpine
  • CHAOS
  • Chimera Linux
  • Clear Linux OS
  • CRUX
  • GoboLinux
  • Guix SD
  • KaiOS
  • KaOS
  • NixOS
  • Puppy
  • Source Mage
  • Solus
  • T2 SDE
  • Tiny Core Linux
  • Void
  • Discontinued

    Debian

  • Black Lab Linux
  • Cub Linux
  • Gobuntu
  • gOS
  • Linux Caixa Mágica
  • LinuxTLE
  • Pinguy OS
  • Sabily
  • Ubuntu GNOME
  • Gentoo

  • Sabayon Linux
  • xB Machine
  • Red Hat/Fedora

  • CentOS
  • Korora
  • Linux for PlayStation 2
  • Scientific Linux
  • Think Blue Linux
  • Turbolinux
  • Vine Linux
  • Yellow Dog Linux
  • Slackware

  • Damn Vulnerable Linux
  • KateOS
  • Kongoni
  • NimbleX
  • Platypux
  • TopologiLinux
  • VectorLinux
  • SUSE

    Other

  • Caldera OpenLinux
  • Chakra
  • CyanogenMod
  • DemoLinux
  • Familiar Linux
  • Firefox OS
  • Floppyfw
  • Foresight Linux
  • Immunix
  • Jurix
  • Linux Router Project
  • MCC Interim Linux
  • MeeGo
  • Mobilinux
  • Nitix
  • OpenELEC
  • Red Hat Linux
  • Remix OS
  • Softlanding Linux System
  • Splashtop OS
  • Turkix
  • icon Linux portal
  • Comparison
  • Category

  • Retrieved from "https://en.wikipedia.org/w/index.php?title=GNU_Guix&oldid=1234804573"

    Categories: 
    2013 software
    Free package management systems
    Free software programmed in Lisp
    Functional programming
    GNU Project software
    Linux package management-related software
    Software using the GPL license
    Hidden categories: 
    Webarchive template wayback links
    Articles with short description
    Short description is different from Wikidata
    Pages using Sister project links with hidden wikidata
     



    This page was last edited on 16 July 2024, at 06:51 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki