GNU Guix: Difference between revisions

Content deleted Content added
Reproducible Scientific Workflows: Added a piece of text about Guix in reproducible scientific workflows
 
(18 intermediate revisions by 8 users not shown)
Line 1:
{{Short description|Purely functional package manager for the GNU system}}
{{Tone|date=December 2024}}
{{Infobox software
| name = GNU Guix
| title = GNU Guix
| logo = File:Guix logo.svg
| logo caption =
| logo size = 200px
| logo alt =
| screenshot = <!-- Image name is enough -->
| caption =
| screenshot size =
| screenshot alt =
| collapsible =
| author =
| developer =
| released = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| discontinued =
| latest release version = {{wikidata|property|preferred|references|edit|Q18968627|P348|P548=Q2804309}}
| latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|Q18968627|P348|P548=Q2804309|P577}}}}
Line 22 ⟶ 23:
<!--
Infobox not having this parameter.
| status =
-->| programming language = [[GNU Guile|Guile Scheme]], [[C++]] ([[Nix package manager|Nix]] core)
| operating system =
| platform =
| size =
| language =
| language count = <!-- Number only -->
| language footnote =
| genre =
| license = [[GNU General Public License|GPLv3+]]
| alexa =
| website = {{URL|https://guix.gnu.org/en/}}
| standard =
| AsOf =
}}
'''GNU Guix''' ({{IPAc-en|ɡ|iː|k|s}}<ref>{{cite web|url=https://www.gnu.org/software/guix/manual/guix.html#FOOT1|title=GNU Guix Reference Manual|website=www.gnu.org|access-date=23 April 2018}}</ref>) is a [[Functional programming|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 [[GNU Guile|Guile Scheme]]. GNU Guix is the default package manager of the [[GNU Guix System]] [[GNU variants|distribution]].<ref>{{cite book |url=https://en.wikisource.org/wiki/Functional_Package_Management_with_Guix |title=Functional Package Management with Guix |author=Ludovic Courtès |date=2013 |location=[[Madrid]], [[Spain]] |publisher=European Lisp Symposium }}</ref>
Line 90 ⟶ 91:
 
== The store ==
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 (computing)|daemon]] has write-access. This is achieved via specialised [[Mount (Unix)#Bind mounting|bind mounts]], where the Store as a file system is mounted [[File system permissions|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 ===
Line 98 ⟶ 99:
This is an example of a package definition for the hello-package:
<syntaxhighlight lang="Scheme">
(use-modules
(guix packages)
(guix download)
(guix build-system gnu)
(guix licenses))
 
(define-public hello
(package
Line 153 ⟶ 160:
 
== Pack ==
Guix pack enables the user to bundle together store items and output them as either a docker binary image, a relocatable [[Tar (computing)|tarball]], a [[Deb (file format)|debianDebian package file]], a [[RPM Package Manager|RPM package file]], an [[AppImage]] or a [[squashfs]] binary.<ref>{{cite web |title=Invoking guix pack |url=https://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-pack.html#Invoking-guix-pack |website=gnu.org |access-date=3 September 2024}}</ref><ref>{{cite web | title=news: Add entry for guix pack's AppImage format | website=Savannah Git Server | date=2024-11-07 | url=https://git.savannah.gnu.org/cgit/guix.git/commit/etc/news.scm?id=8d6389b866d91a72569ecf50ddf313c17430d34b | access-date=2024-11-30}}</ref><ref>{{cite web | title=news: Add entry for the new 'rpm' guix pack format. | website=Savannah Git Server | date=2023-02-17 | url=https://git.savannah.gnu.org/cgit/guix.git/commit/etc/news.scm?id=cc0cdf51f71c5455d781cd25842587731a83e414 | access-date=2024-11-30}}</ref>
 
== Graph ==
Guix graph enables the user to view different graphs of the packages and their dependencies.<ref>{{cite web |title=Invoking guix graph |url=https://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-graph.html#Invoking-guix-graph |website=gnu.org |access-date=16 May 2019}}</ref>
 
== Third-party channels ==
Guix allows you to specify additional channels for package definitions.<ref>{{cite web | title=Specifying Additional Channels (GNU Guix Reference Manual) | website=GNU Guix | url=https://guix.gnu.org/manual/en/html_node/Specifying-Additional-Channels.html | access-date=2024-11-23}}</ref>
 
This feature can also used to install [[Proprietary software|non-free software]] and firmware that cannot be packaged in the main project.<ref>{{cite web | title=Nonguix / nonguix · GitLab | website=GitLab | date=2024-11-23 | url=https://gitlab.com/nonguix/nonguix | access-date=2024-11-23}}</ref><ref>{{cite web | title=Software Freedom (GNU Guix Reference Manual) | website=GNU Guix | url=https://guix.gnu.org/manual/en/html_node/Software-Freedom.html | access-date=2024-11-23}}</ref>
 
== Guix System (operating system) ==
Line 162 ⟶ 174:
| name = Guix System
| logo = Guix logo.svg
| logo caption =
| logo size = 100px
| logo alt =
| screenshot = Guixsd-xfce-icecat-emacs.png
| caption = Guix System running [[Xfce]], [[GNU IceCat]] and [[GNU Emacs]]
| screenshot_size =
| screenshot_alt =
| collapsible =
| version of = <!-- For articles about releases of operating systems ONLY -->
| developer = [[GNU Project]]<ref>{{cite web|url=https://www.gnu.org/software/guix/about|title=About — GuixSD|work=gnu.org|access-date=March 16, 2017|archive-date=April 12, 2017|archive-url=https://web.archive.org/web/20170412151807/https://www.gnu.org/software/guix/about/|url-status=live}}</ref><ref>{{cite web | url=https://www.gnu.org/gnu/gnu-linux-faq.html | title=GNU/Linux FAQ - GNU Project - Free Software Foundation | publisher=[[Free Software Foundation]] | access-date=2017-05-14 | archive-date=September 7, 2013 | archive-url=https://web.archive.org/web/20130907132420/http://www.gnu.org/gnu/gnu-linux-faq.html | url-status=live }}</ref>
Line 184 ⟶ 196:
| latest preview date = {{Start date and age|{{wikidata|qualifier|preferred|single|Q19597382|P348|P548=Q51930650|P577}}}}
| marketing target = Desktop
| programmed in =
| language = <!-- Supported human languages (English, French, Italian, Arabic, ...) -->
| update model = <!-- APT, Windows Update, etc. -->
Line 192 ⟶ 204:
Microkernel: [[GNU Hurd]] (under development)
| userland = [[GNU]]
| ui =
| license = [[GPL]]
| preceded by =
| succeeded by =
| website = {{URL|https://guix.gnu.org/}}
| support status = <!-- For articles about releases of operating systems ONLY -->
| other articles =
}}
 
Line 214 ⟶ 226:
 
=== System services ===
System services, which are defined in the Guile Scheme,<ref>{{cite web |title=guix.git |url=http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services |website=git.savannah.gnu.org |access-date=11 May 2019 |archive-date=May 11, 2019 |archive-url=https://web.archive.org/web/20190511160745/http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services |url-status=live }}</ref> enable the user to declaratively compose the configuration of [[Daemon (computing)|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 (network)|Tor]] [[Proxy server|proxy]], an [[Secure Shell|ssh]] server, and a webserver serving guix-web via [[nginx]] on a specific port at bootup). They can:<ref name="lists.gnu.org">{{cite mailing list |last1=Wurmus |first1=Ricardo |title=Re: Help with preparing to move from Arch Linux to Guix |url=https://lists.gnu.org/archive/html/help-guix/2019-05/msg00262.html |website=help-guix |access-date=11 May 2019 |archive-date=August 1, 2020 |archive-url=https://web.archive.org/web/20200801074755/https://lists.gnu.org/archive/html/help-guix/2019-05/msg00262.html |url-status=live }}</ref>
* generate files in the filesystem (needed by some applications e.g. files in ''/etc'')
* run any code for setting up daemons
Line 237 ⟶ 249:
== Reproducible Scientific Workflows ==
 
One particular area where Guix can offer to the user improvements over traditional package managers is in the field of reproducible scientific workflows, mainly in [[High-performance computing|High Performance Computing]].<ref>{{Cite web |title=Guix-HPC — Reproducible software deployment for high-performance computing — Blog |url=https://hpc.guix.info/blog/ |access-date=2024-11-05 |website=hpc.guix.info |language=en}}</ref>. In this way, Guix would offer a way to share a reproducible computational environment, i.e. Guix using a recipe for the particular scientific software/environment would provide all the information needed to uniquely describe the dependency tree to build and run that software.<ref>{{Cite journal |last1=Vallet |first1=Nicolas |last2=Michonneau |first2=David |last3=Tournier |first3=Simon |date=2022-10-04 |title=Toward practical transparent verifiable and long-term reproducible research using Guix |journal=Scientific Data |language=en |volume=9 |issue=1 |pages=597 |doi=10.1038/s41597-022-01720-9 |pmid=36195618 |issn=2052-4463|pmc=9532446 |bibcode=2022NatSD...9..597V }}</ref> This would not be easy to achieve, for example, in other mixed systems with several package managers for each programming language. All in allHowever, this only provides a necessary but not sufficient condition for reproducible scientific workflows to be reproducible, as it is necessary to incorporate data collection and handlingprocessing into the workflow, if this is added as part of the Guix recipe, if it cancould satisfy the strict reproducibility requirements.
 
== History ==
Line 249 ⟶ 261:
The project has no fixed release schedule and has until now released approximately every 6 months.
 
There are plans for an upcoming 1.5.0 release since there has been a 20 month gap since the 1.4.0 release.<ref>{{cite web | url=https://lists.gnu.org/archive/html/guix-devel/2024-09/msg00018.html | title=1.5.0 release? }}</ref>
 
{| class="sortable wikitable" style="text-align: right;"
Line 394 ⟶ 406:
[[Category:GNU Project software]]
[[Category:Linux package management-related software]]
[[Category:SoftwareLinux usingdistributions thewithout GPL licensesystemd]]
[[Category:Software using the GNU General Public License]]