package: allow users to upgrade the whole system by not providing a regexp.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
58db733e 11@set YEARS 2012, 2013
568717fd 12
eeaf4427 13@dircategory Package management
568717fd
LC
14@direntry
15* guix: (guix). Guix, the functional package manager.
e49951eb 16* guix package: (guix)Invoking guix package
eeaf4427 17 Managing packages with Guix.
e49951eb 18* guix build: (guix)Invoking guix build
568717fd
LC
19 Building packages with Guix.
20@end direntry
568717fd
LC
21
22@titlepage
7730d112
LC
23@title GNU Guix Reference Manual
24@subtitle Using the GNU Guix Functional Package Manager
568717fd 25@author Ludovic Courtès
acc08466 26@author Nikita Karetnikov
568717fd
LC
27
28@page
29@vskip 0pt plus 1filll
30Edition @value{EDITION} @*
31@value{UPDATED} @*
32
58db733e 33Copyright @copyright{} @value{YEARS} Ludovic Court@`es
568717fd
LC
34
35@quotation
36Permission is granted to copy, distribute and/or modify this document
37under the terms of the GNU Free Documentation License, Version 1.3 or
38any later version published by the Free Software Foundation; with no
39Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
40copy of the license is included in the section entitled ``GNU Free
41Documentation License''.
42@end quotation
43@end titlepage
44
45@copying
f8348b91 46This manual documents GNU Guix version @value{VERSION}.
568717fd 47
58db733e 48Copyright @copyright{} @value{YEARS} Ludovic Courtès
568717fd
LC
49
50Permission is granted to copy, distribute and/or modify this document
51under the terms of the GNU Free Documentation License, Version 1.3 or
52any later version published by the Free Software Foundation; with no
53Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
54copy of the license is included in the section entitled ``GNU Free
55Documentation License.''
56@end copying
57
58@contents
59
60@c *********************************************************************
61@node Top
f8348b91 62@top GNU Guix
568717fd 63
f8348b91
LC
64This document describes GNU Guix version @value{VERSION}, a functional
65package management tool written for the GNU system.
568717fd 66
58db733e
LC
67@quotation
68Copyright @copyright{} @value{YEARS} Ludovic Courtès
69
70Permission is granted to copy, distribute and/or modify this document
71under the terms of the GNU Free Documentation License, Version 1.3 or
72any later version published by the Free Software Foundation; with no
73Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
74copy of the license is included in the section entitled ``GNU Free
75Documentation License.''
76@end quotation
77
568717fd
LC
78@menu
79* Introduction:: What is Guix about?
bd5e766b 80* Installation:: Installing Guix.
eeaf4427 81* Package Management:: Package installation, upgrade, etc.
568717fd
LC
82* Programming Interface:: Using Guix in Scheme.
83* Utilities:: Package management commands.
a1ba8475 84* GNU Distribution:: Software for your friendly GNU system.
568717fd
LC
85
86* Acknowledgments:: Thanks!
87* GNU Free Documentation License:: The license of this manual.
88* Concept Index:: Concepts.
89* Function Index:: Functions.
90@end menu
91
92@c *********************************************************************
93@node Introduction
94@chapter Introduction
95
c80e7e55
LC
96GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
97using the international phonetic alphabet (IPA).} is a functional
98package management tool for the GNU system. Package management consists
99in all the activities that relate to building packages from source,
100honoring the build-time and run-time dependencies on packages,
101installing packages in user environments, upgrading installed packages
102to new versions or rolling back to a previous set, removing unused
103software packages, etc.
568717fd
LC
104
105@cindex functional package management
106The term @dfn{functional} refers to a specific package management
107discipline. In Guix, the package build and installation process is seen
108as a function, in the mathematical sense: that function takes inputs,
109such as build scripts, a compiler, and libraries depended on, and
110returns the installed package. As a pure function, its result depends
111solely on its inputs---for instance, it cannot refer to software or
112scripts that were not explicitly passed as inputs. A build function
113always produces the same result when passed a given set of inputs. Last
114but not least, a build function cannot alter the system's environment in
115any way; for instance, it cannot create, modify, or delete files outside
116of its build and installation directories. This is achieved by running
117build processes in dedicated ``chroots'', where only their explicit
118inputs are visible.
119
e531ac2a 120@cindex store
568717fd 121The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
122system, in a special directory called @dfn{the store} (@pxref{The
123Store}). Each package is installed in a directory of its own, in the
568717fd
LC
124store---by default under @file{/nix/store}. The directory name contains
125a hash of all the inputs used to build that package; thus, changing an
126input yields a different directory name.
127
128This approach is the foundation of Guix's salient features: support for
129transactional package upgrades and rollback, per-user installation, and
eeaf4427 130garbage collection of packages (@pxref{Features}).
568717fd
LC
131
132Guix has a command-line interface allowing users to build, install,
133upgrade, and remove packages, as well as a Scheme programming interface.
134The remainder of this manual describes them.
135
a1ba8475
LC
136Last but not least, Guix is used to build a distribution of the GNU
137system, with many GNU and non-GNU free software packages. @xref{GNU
138Distribution}.
139
bd5e766b
LC
140@c *********************************************************************
141@node Installation
142@chapter Installation
143
144This section describes the software requirements of Guix, as well as how
145to install it and get ready to use it.
146
b22a12fd 147The build procedure for Guix is the same as for other GNU software, and
1da983b9 148is not covered here. Please see the files @file{README} and
b22a12fd
LC
149@file{INSTALL} in the Guix source tree for additional details.
150
bd5e766b
LC
151@menu
152* Requirements:: Software needed to build and run Guix.
153* Setting Up the Daemon:: Preparing the build daemon's environment.
154* Invoking guix-daemon:: Running the build daemon.
155@end menu
156
157@node Requirements
158@section Requirements
159
160GNU Guix depends on the following packages:
161
162@itemize
163@item @url{http://gnu.org/software/guile/, GNU Guile 2.0.x};
164@item @url{http://gnupg.org/, GNU libgcrypt}
165@end itemize
166
167Unless @code{--disable-daemon} was passed to @command{configure}, the
168following packages are also needed:
169
170@itemize
171@item @url{http://sqlite.org, SQLite 3}
172@item @url{http://www.bzip.org, libbz2}
173@item @url{http://gcc.gnu.org, GCC's g++}
174@end itemize
175
176When a working installation of the Nix package manager is available, you
177can instead configure Guix with @code{--disable-daemon}. In that case,
178@url{http://nixos.org/nix/, Nix} replaces the three dependencies above.
179
b22a12fd
LC
180Guix is compatible with Nix, so it is possible to share the same store
181between both. To do so, you must pass @command{configure} not only the
182same @code{--with-store-dir} value, but also the same
183@code{--localstatedir} value (the latter is essential because it
184specifies where the database that store meta-data about the store is
185located, among other things.) The default values are
186@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
187Note that @code{--disable-daemon} is orthogonal and is not required if
188your goal is to share the same store as Nix.
189
bd5e766b
LC
190@node Setting Up the Daemon
191@section Setting Up the Daemon
192
193@cindex daemon
194Operations such as building a package or running the garbage collector
195are all performed by a specialized process, the @dfn{Guix daemon}, on
196behalf of clients. Only the daemon may access the store and its
197associated database. Thus, any operation that manipulates the store
198goes through the daemon. For instance, command-line tools such as
e49951eb 199@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
200daemon (@i{via} remote procedure calls) to instruct it what to do.
201
202In a standard multi-user setup, Guix and its daemon---the
203@command{guix-daemon} program---are installed by the system
204administrator; @file{/nix/store} is owned by @code{root} and
205@command{guix-daemon} runs as @code{root}. Unprivileged users may use
206Guix tools to build packages or otherwise access the store, and the
207daemon will do it on their behalf, ensuring that the store is kept in a
208consistent state, and allowing built packages to be shared among users.
209
210@cindex build users
211When @command{guix-daemon} runs as @code{root}, you may not want package
212build processes themselves to run as @code{root} too, for obvious
213security reasons. To avoid that, a special pool of @dfn{build users}
214should be created for use by build processes started by the daemon.
215These build users need not have a shell and a home directory: they will
216just be used when the daemon drops @code{root} privileges in build
217processes. Having several such users allows the daemon to launch
218distinct build processes under separate UIDs, which guarantees that they
219do not interfere with each other---an essential feature since builds are
220regarded as pure functions (@pxref{Introduction}).
221
222On a GNU/Linux system, a build user pool may be created like this (using
223Bash syntax and the @code{shadow} commands):
224
091196b3
LC
225@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
226@c for why `-G' is needed.
bd5e766b
LC
227@example
228# groupadd guix-builder
229# for i in `seq 1 10`;
230 do
091196b3
LC
231 useradd -g guix-builder -G guix-builder \
232 -d /var/empty -s `which nologin` \
80ba8cc0 233 -c "Guix build user $i" guix-builder$i;
bd5e766b
LC
234 done
235@end example
236
237@noindent
238The @code{guix-daemon} program may then be run as @code{root} with:
239
240@example
241# guix-daemon --build-users-group=guix-builder
242@end example
243
244Guix may also be used in a single-user setup, with @command{guix-daemon}
1da983b9 245running as an unprivileged user. However, to maximize non-interference
bd5e766b
LC
246of build processes, the daemon still needs to perform certain operations
247that are restricted to @code{root} on GNU/Linux: it should be able to
248run build processes in a chroot, and to run them under different UIDs.
249To that end, the @command{nix-setuid-helper} program is provided; it is
250a small C program (less than 300 lines) that, if it is made setuid
251@code{root}, can be executed by the daemon to perform these operations
252on its behalf. The @code{root}-owned @file{/etc/nix-setuid.conf} file
253is read by @command{nix-setuid-helper}; it should contain exactly two
254words: the user name under which the authorized @command{guix-daemon}
255runs, and the name of the build users group.
256
257If you are installing Guix as an unprivileged user and do not have the
258ability to make @file{nix-setuid-helper} setuid-@code{root}, it is still
259possible to run @command{guix-daemon}. However, build processes will
260not be isolated from one another, and not from the rest of the system.
261Thus, build processes may interfere with each other, and may access
262programs, libraries, and other files available on the system---making it
263much harder to view them as @emph{pure} functions.
264
265@node Invoking guix-daemon
266@section Invoking @command{guix-daemon}
267
268The @command{guix-daemon} program implements all the functionality to
269access the store. This includes launching build processes, running the
270garbage collector, querying the availability of a build result, etc. It
271is normally run as @code{root} like this:
272
273@example
274# guix-daemon --build-users-group=guix-builder
275@end example
276
277@noindent
278For details on how to set it up, @ref{Setting Up the Daemon}.
279
280By default, @command{guix-daemon} launches build processes under
281different UIDs, taken from the build group specified with
282@code{--build-users-group}. In addition, each build process is run in a
283chroot environment that only contains the subset of the store that the
284build process depends on, as specified by its derivation
285(@pxref{Programming Interface, derivation}), plus a set of specific
286system directories. By default, the latter contains @file{/dev} and
287@file{/dev/pts}.
288
289The following command-line options are supported:
290
291@table @code
292@item --build-users-group=@var{group}
293Take users from @var{group} to run build processes (@pxref{Setting Up
294the Daemon, build users}).
295
296@item --cache-failures
297Cache build failures. By default, only successful builds are cached.
298
299@item --cores=@var{n}
300@itemx -c @var{n}
301Use @var{n} CPU cores to build each derivation; @code{0} means as many
302as available.
303
304The default value is @code{1}, but it may be overridden by clients, such
e49951eb
MW
305as the @code{--cores} option of @command{guix build} (@pxref{Invoking
306guix build}).
bd5e766b
LC
307
308The effect is to define the @code{NIX_BUILD_CORES} environment variable
309in the build process, which can then use it to exploit internal
310parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
311
312@item --max-jobs=@var{n}
313@itemx -M @var{n}
314Allow at most @var{n} build jobs in parallel. The default value is
315@code{1}.
316
317@item --debug
318Produce debugging output.
319
320This is useful to debug daemon start-up issues, but then it may be
321overridden by clients, for example the @code{--verbosity} option of
e49951eb 322@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
323
324@item --chroot-directory=@var{dir}
325Add @var{dir} to the build chroot.
326
327Doing this may change the result of build processes---for instance if
328they use optional dependencies found in @var{dir} when it is available,
329and not otherwise. For that reason, it is not recommended to do so.
330Instead, make sure that each derivation declares all the inputs that it
331needs.
332
333@item --disable-chroot
334Disable chroot builds.
335
336Using this option is not recommended since, again, it would allow build
337processes to gain access to undeclared dependencies.
338
339@item --disable-log-compression
340Disable compression of the build logs.
341
1da983b9
LC
342Unless @code{--lose-logs} is used, all the build logs are kept in the
343@var{localstatedir}. To save space, the daemon automatically compresses
344them with bzip2 by default. This option disables that.
345
bd5e766b
LC
346@item --disable-store-optimization
347Disable automatic file ``deduplication'' in the store.
348
1da983b9
LC
349By default, files added to the store are automatically ``deduplicated'':
350if a newly added file is identical as another one found in the store,
351the daemon makes the new file a hard link to the other file. This
352slightly increases the input/output load at the end of a build process.
353This option disables this.
354
bd5e766b
LC
355@item --impersonate-linux-2.6
356On Linux-based systems, impersonate Linux 2.6. This means that the
357kernel's @code{uname} system call will report 2.6 as the release number.
358
359This might be helpful to build programs that (usually wrongfully) depend
360on the kernel version number.
361
362@item --lose-logs
363Do not keep build logs. By default they are kept under
364@code{@var{localstatedir}/nix/log}.
365
366@item --system=@var{system}
367Assume @var{system} as the current system type. By default it is the
368architecture/kernel pair found at configure time, such as
369@code{x86_64-linux}.
b8d2aa26
LC
370
371@item --listen=@var{socket}
372Listen for connections on @var{socket}, the file name of a Unix-domain
373socket. The default socket is
374@file{@var{localstatedir}/daemon-socket/socket}. This option is only
375useful in exceptional circumstances, such as if you need to run several
376daemons on the same machine.
bd5e766b
LC
377@end table
378
379
eeaf4427
LC
380@c *********************************************************************
381@node Package Management
382@chapter Package Management
383
f8348b91 384The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
385remove software packages, without having to know about their build
386procedure or dependencies. Guix also goes beyond this obvious set of
387features.
388
389This chapter describes the main features of Guix, as well as the package
390management tools it provides.
391
392@menu
393* Features:: How Guix will make your life brighter.
e49951eb
MW
394* Invoking guix package:: Package installation, removal, etc.
395* Invoking guix gc:: Running the garbage collector.
f651b477 396* Invoking guix pull:: Fetching the latest Guix and distribution.
eeaf4427
LC
397@end menu
398
399@node Features
400@section Features
401
402When using Guix, each package ends up in the @dfn{package store}, in its
403own directory---something that resembles
404@file{/nix/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
405
406Instead of referring to these directories, users have their own
407@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
408use. These profiles are stored within each user's home directory, at
409@code{$HOME/.guix-profile}.
eeaf4427 410
821b0015 411For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 412@file{/home/alice/.guix-profile/bin/gcc} points to
821b0015
LC
413@file{/nix/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
414@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
415simply continues to point to
416@file{/nix/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
417coexist on the same system without any interference.
eeaf4427 418
e49951eb
MW
419The @command{guix package} command is the central tool to manage
420packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 421profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
422
423The command provides the obvious install, remove, and upgrade
424operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 425the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 426@command{guix package} process is terminated during the transaction,
eeaf4427
LC
427or if a power outage occurs during the transaction, then the user's
428profile remains in its previous state, and remains usable.
429
430In addition, any package transaction may be @emph{rolled back}. So, if,
431for example, an upgrade installs a new version of a package that turns
432out to have a serious bug, users may roll back to the previous instance
433of their profile, which was known to work well.
434
435All those packages in the package store may be @emph{garbage-collected}.
436Guix can determine which packages are still referenced by the user
fe8ff028 437profiles, and remove those that are provably no longer referenced
e49951eb 438(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
439generations of their profile so that the packages they refer to can be
440collected.
eeaf4427
LC
441
442Finally, Guix takes a @dfn{purely functional} approach to package
443management, as described in the introduction (@pxref{Introduction}).
444Each @file{/nix/store} package directory name contains a hash of all the
445inputs that were used to build that package---compiler, libraries, build
446scripts, etc. This direct correspondence allows users to make sure a
447given package installation matches the current state of their
a1ba8475 448distribution, and helps maximize @dfn{reproducibility}.
eeaf4427 449
75f1e8f7 450@c FIXME: Remove footnote when it's implemented.
eeaf4427 451This foundation allows Guix to support @dfn{transparent binary/source
75f1e8f7
LC
452deployment}@footnote{This feature is not implemented as of version
453@value{VERSION}. Please contact @email{bug-guix@@gnu.org} for more
454details.}. When a pre-built binary for a @file{/nix/store} path is
eeaf4427
LC
455available from an external source, Guix just downloads it; otherwise, it
456builds the package from source, locally.
457
e49951eb
MW
458@node Invoking guix package
459@section Invoking @command{guix package}
eeaf4427 460
e49951eb 461The @command{guix package} command is the tool that allows users to
eeaf4427
LC
462install, upgrade, and remove packages, as well as rolling back to
463previous configurations. It operates only on the user's own profile,
464and works with normal user privileges (@pxref{Features}). Its syntax
465is:
466
467@example
e49951eb 468guix package @var{options}
eeaf4427
LC
469@end example
470
ba55b1cb 471Primarily, @var{options} specifies the operations to be performed during
eeaf4427
LC
472the transaction. Upon completion, a new profile is created, but
473previous generations of the profile remain available, should the user
474want to roll back.
475
b9e5c0a9 476For each user, a symlink to the user's default profile is automatically
0ec1af59 477created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
478current generation of the user's default profile. Thus, users can add
479@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
480variable, and so on.
481
0ec1af59
LC
482In a multi-user setup, user profiles must be stored in a place
483registered as a @dfn{garbage-collector root}, which
e49951eb 484@file{$HOME/.guix-profile} points to (@pxref{Invoking guix gc}). That
0ec1af59
LC
485directory is normally
486@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
487@var{localstatedir} is the value passed to @code{configure} as
488@code{--localstatedir}, and @var{user} is the user name. It must be
489created by @code{root}, with @var{user} as the owner. When it does not
e49951eb 490exist, @command{guix package} emits an error about it.
0ec1af59
LC
491
492The @var{options} can be among the following:
493
eeaf4427
LC
494@table @code
495
496@item --install=@var{package}
51c8d790 497@itemx -i @var{package}
eeaf4427
LC
498Install @var{package}.
499
500@var{package} may specify either a simple package name, such as
501@code{guile}, or a package name followed by a hyphen and version number,
dc5669cd
MW
502such as @code{guile-1.8.8}. If no version number is specified, the
503newest available version will be selected. In addition, @var{package}
504may contain a colon, followed by the name of one of the outputs of the
505package, as in @code{gcc:doc} or @code{binutils-2.22:lib}.
eeaf4427 506
461572cc
LC
507@cindex propagated inputs
508Sometimes packages have @dfn{propagated inputs}: these are dependencies
509that automatically get installed along with the required package.
510
511An example is the GNU MPC library: its C header files refer to those of
512the GNU MPFR library, which in turn refer to those of the GMP library.
513Thus, when installing MPC, the MPFR and GMP libraries also get installed
514in the profile; removing MPC also removes MPFR and GMP---unless they had
515also been explicitly installed independently.
516
ef010c0f
LC
517@c XXX: keep me up-to-date
518Besides, when installing a GNU package, the tool reports the
519availability of a newer upstream version. In the future, it may provide
520the option of installing directly from the upstream version, even if
521that version is not yet in the distribution.
522
5d4b411f
LC
523@item --install-from-expression=@var{exp}
524@itemx -e @var{exp}
525Install the package @var{exp} evaluates to.
526
527@var{exp} must be a Scheme expression that evaluates to a
528@code{<package>} object. This option is notably useful to disambiguate
529between same-named variants of a package, with expressions such as
530@code{(@@ (gnu packages base) guile-final)}.
531
532Note that this option installs the first output of the specified
533package, which may be insufficient when needing a specific output of a
534multiple-output package.
535
eeaf4427
LC
536@item --remove=@var{package}
537@itemx -r @var{package}
538Remove @var{package}.
539
acb6ba25
CR
540@item --upgrade[=@var{regexp}]
541@itemx -u [@var{regexp}]
542Upgrade all the installed packages. When @var{regexp} is specified, upgrade
543only installed packages whose name matches @var{regexp}.
eeaf4427 544
f651b477
LC
545Note that this upgrades package to the latest version of packages found
546in the distribution currently installed. To update your distribution,
547you should regularly run @command{guix pull} (@pxref{Invoking guix
548pull}).
549
24e262f0
LC
550@item --roll-back
551Roll back to the previous @dfn{generation} of the profile---i.e., undo
552the last transaction.
553
554When combined with options such as @code{--install}, roll back occurs
555before any other actions.
556
d9307267
LC
557When rolling back from the first generation that actually contains
558installed packages, the profile is made to point to the @dfn{empty
559profile}, also known as @dfn{profile zero}---i.e., it contains no files
560apart from its own meta-data.
561
82fe08ed
LC
562Installing, removing, or upgrading packages from a generation that has
563been rolled back to overwrites previous future generations. Thus, the
564history of a profile's generations is always linear.
565
eeaf4427
LC
566@item --profile=@var{profile}
567@itemx -p @var{profile}
568Use @var{profile} instead of the user's default profile.
569
570@item --dry-run
571@itemx -n
572Show what would be done without actually doing it.
573
3b824605
LC
574@item --no-substitutes
575Build instead of resorting to pre-built substitutes.
576
70915c1a
LC
577@item --verbose
578Produce verbose output. In particular, emit the environment's build log
579on the standard error port.
580
eeaf4427
LC
581@item --bootstrap
582Use the bootstrap Guile to build the profile. This option is only
583useful to distribution developers.
584
585@end table
586
e49951eb 587In addition to these actions @command{guix package} supports the
733b4130
LC
588following options to query the current state of a profile, or the
589availability of packages:
eeaf4427 590
733b4130
LC
591@table @option
592
acc08466
NK
593@item --search=@var{regexp}
594@itemx -s @var{regexp}
595List the available packages whose synopsis or description matches
299112d3
LC
596@var{regexp}. Print all the meta-data of matching packages in
597@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
598GNU recutils manual}).
acc08466 599
299112d3
LC
600This allows specific fields to be extracted using the @command{recsel}
601command, for instance:
602
603@example
e49951eb 604$ guix package -s malloc | recsel -p name,version
299112d3
LC
605name: glibc
606version: 2.17
607
608name: libgc
609version: 7.2alpha6
610@end example
acc08466 611
733b4130
LC
612@item --list-installed[=@var{regexp}]
613@itemx -I [@var{regexp}]
614List currently installed packages in the specified profile. When
615@var{regexp} is specified, list only installed packages whose name
616matches @var{regexp}.
617
618For each installed package, print the following items, separated by
619tabs: the package name, its version string, the part of the package that
620is installed (for instance, @code{out} for the default output,
621@code{include} for its headers, etc.), and the path of this package in
622the store.
623
64fc89b6
LC
624@item --list-available[=@var{regexp}]
625@itemx -A [@var{regexp}]
a1ba8475
LC
626List packages currently available in the software distribution
627(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
628installed packages whose name matches @var{regexp}.
64fc89b6
LC
629
630For each package, print the following items separated by tabs: its name,
44b6be77
LC
631its version string, the parts of the package (@code{out} for the main
632files, @code{lib} for libraries and possibly headers, etc.), and the
633source location of its definition.
64fc89b6 634
733b4130 635@end table
eeaf4427
LC
636
637
e49951eb
MW
638@node Invoking guix gc
639@section Invoking @command{guix gc}
fe8ff028
LC
640
641@cindex garbage collector
642Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 643The @command{guix gc} command allows users to explicitly run the garbage
fe8ff028
LC
644collector to reclaim space from the @file{/nix/store} directory.
645
646The garbage collector has a set of known @dfn{roots}: any file under
647@file{/nix/store} reachable from a root is considered @dfn{live} and
648cannot be deleted; any other file is considered @dfn{dead} and may be
649deleted. The set of garbage collector roots includes default user
e49951eb
MW
650profiles, and may be augmented with @command{guix build --root}, for
651example (@pxref{Invoking guix build}).
fe8ff028 652
e49951eb 653The @command{guix gc} command has three modes of operation: it can be
fe8ff028
LC
654used to garbage-collect any dead files (the default), to delete specific
655files (the @code{--delete} option), or to print garbage-collector
656information. The available options are listed below:
657
658@table @code
659@item --collect-garbage[=@var{min}]
660@itemx -C [@var{min}]
661Collect garbage---i.e., unreachable @file{/nix/store} files and
662sub-directories. This is the default operation when no option is
663specified.
664
665When @var{min} is given, stop once @var{min} bytes have been collected.
666@var{min} may be a number of bytes, or it may include a unit as a
667suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes.
668
669When @var{min} is omitted, collect all the garbage.
670
671@item --delete
672@itemx -d
673Attempt to delete all the store files and directories specified as
674arguments. This fails if some of the files are not in the store, or if
675they are still live.
676
677@item --list-dead
678Show the list of dead files and directories still present in the
679store---i.e., files and directories no longer reachable from any root.
680
681@item --list-live
682Show the list of live store files and directories.
ba8b732d
LC
683
684@end table
685
686In addition, the references among existing store files can be queried:
687
688@table @code
689
690@item --references
691@itemx --referrers
692List the references (respectively, the referrers) of store files given
693as arguments.
694
fe8ff028
LC
695@end table
696
eeaf4427 697
f651b477
LC
698@node Invoking guix pull
699@section Invoking @command{guix pull}
700
701Packages are installed or upgraded to the latest version available in
702the distribution currently available on your local machine. To update
703that distribution, along with the Guix tools, you must run @command{guix
704pull}: the command downloads the latest Guix source code and package
705descriptions, and deploys it.
706
707On completion, @command{guix package} will use packages and package
708versions from this just-retrieved copy of Guix. Not only that, but all
709the Guix commands and Scheme modules will also be taken from that latest
710version. New @command{guix} sub-commands added by the update also
711become available.
712
713The @command{guix pull} command is usually invoked with no arguments,
714but it supports the following options:
715
716@table @code
717@item --verbose
718Produce verbose output, writing build logs to the standard error output.
719
720@item --bootstrap
721Use the bootstrap Guile to build the latest Guix. This option is only
722useful to Guix developers.
723@end table
724
568717fd
LC
725@c *********************************************************************
726@node Programming Interface
727@chapter Programming Interface
728
3dc1970d
LC
729GNU Guix provides several Scheme programming interfaces (APIs) to
730define, build, and query packages. The first interface allows users to
731write high-level package definitions. These definitions refer to
732familiar packaging concepts, such as the name and version of a package,
733its build system, and its dependencies. These definitions can then be
734turned into concrete build actions.
735
ba55b1cb 736Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d
LC
737standard setup, the daemon has write access to the store---the
738@file{/nix/store} directory---whereas users do not. The recommended
739setup also has the daemon perform builds in chroots, under a specific
740build users, to minimize interference with the rest of the system.
741
742@cindex derivation
743Lower-level APIs are available to interact with the daemon and the
744store. To instruct the daemon to perform a build action, users actually
745provide it with a @dfn{derivation}. A derivation is a low-level
746representation of the build actions to be taken, and the environment in
747which they should occur---derivations are to package definitions what
748assembly is to C programs.
749
750This chapter describes all these APIs in turn, starting from high-level
751package definitions.
752
568717fd
LC
753@menu
754* Defining Packages:: Defining new packages.
755* The Store:: Manipulating the package store.
756* Derivations:: Low-level interface to package derivations.
757@end menu
758
759@node Defining Packages
760@section Defining Packages
761
3dc1970d
LC
762The high-level interface to package definitions is implemented in the
763@code{(guix packages)} and @code{(guix build-system)} modules. As an
764example, the package definition, or @dfn{recipe}, for the GNU Hello
765package looks like this:
766
767@example
b22a12fd
LC
768(use-modules (guix packages)
769 (guix download)
770 (guix build-system gnu)
771 (guix licenses))
772
3dc1970d
LC
773(define hello
774 (package
775 (name "hello")
776 (version "2.8")
777 (source (origin
778 (method url-fetch)
779 (uri (string-append "mirror://gnu/hello/hello-" version
780 ".tar.gz"))
781 (sha256
782 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
783 (build-system gnu-build-system)
784 (inputs `(("gawk" ,gawk)))
785 (synopsis "GNU Hello")
786 (description "Yeah...")
787 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 788 (license gpl3+)))
3dc1970d
LC
789@end example
790
791@noindent
792Without being a Scheme expert, the reader may have guessed the meaning
793of the various fields here. This expression binds variable @var{hello}
794to a @code{<package>} object, which is essentially a record
795(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
796This package object can be inspected using procedures found in the
797@code{(guix packages)} module; for instance, @code{(package-name hello)}
798returns---surprise!---@code{"hello"}.
799
800There are a few points worth noting in the above package definition:
801
802@itemize
803@item
804The @code{source} field of the package is an @code{<origin>} object.
805Here, the @code{url-fetch} method from @code{(guix download)} is used,
806meaning that the source is a file to be downloaded over FTP or HTTP.
807
808The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
809the GNU mirrors defined in @code{(guix download)}.
810
811The @code{sha256} field specifies the expected SHA256 hash of the file
812being downloaded. It is mandatory, and allows Guix to check the
813integrity of the file. The @code{(base32 @dots{})} form introduces the
814base32 representation of the hash. A convenient way to obtain this
e49951eb 815information is with the @code{guix download} tool.
3dc1970d
LC
816
817@item
818@cindex GNU Build System
819The @code{build-system} field is set to @var{gnu-build-system}. The
820@var{gnu-build-system} variable is defined in the @code{(guix
821build-system gnu)} module, and is bound to a @code{<build-system>}
822object.
823
824Naturally, @var{gnu-build-system} represents the familiar GNU Build
825System, and variants thereof (@pxref{Configuration, configuration and
826makefile conventions,, standards, GNU Coding Standards}). In a
ba55b1cb 827nutshell, packages using the GNU Build System may be configured, built,
3dc1970d
LC
828and installed with the usual @code{./configure && make && make check &&
829make install} command sequence. This is what @var{gnu-build-system}
830does.
831
832In addition, @var{gnu-build-system} ensures that the ``standard''
833environment for GNU packages is available. This includes tools such as
834GCC, Coreutils, Bash, Make, Diffutils, and Patch.
835
836@item
837The @code{inputs} field specifies inputs to the build process---i.e.,
838build-time or run-time dependencies of the package. Here, we define an
839input called @code{"gawk"} whose value is that of the @var{gawk}
840variable; @var{gawk} is itself bound to a @code{<package>} object.
841
842Note that GCC, Coreutils, Bash, and other essential tools do not need to
843be specified as inputs here. Instead, @var{gnu-build-system} takes care
844of ensuring that they are present.
845
846However, any other dependencies need to be specified in the
847@code{inputs} field. Any dependency not specified here will simply be
848unavailable to the build process, possibly leading to a build failure.
849@end itemize
850
851There are other fields that package definitions may provide. Of
852particular interest is the @code{arguments} field. When specified, it
853must be bound to a list of additional arguments to be passed to the
854build system. For instance, the above definition could be augmented
855with the following field initializer:
856
857@example
858 (arguments `(#:tests? #f
859 #:configure-flags '("--enable-silent-rules")))
860@end example
861
862@noindent
863These are keyword arguments (@pxref{Optional Arguments, keyword
864arguments in Guile,, guile, GNU Guile Reference Manual}). They are
865passed to @var{gnu-build-system}, which interprets them as meaning ``do
866not run @code{make check}'', and ``run @file{configure} with the
874e6874
LC
867@code{--enable-silent-rules} flag''. The value of these keyword
868parameters is actually evaluated in the @dfn{build stratum}---i.e., by a
869Guile process launched by the daemon (@pxref{Derivations}).
3dc1970d
LC
870
871Once a package definition is in place@footnote{Simple package
872definitions like the one above may be automatically converted from the
e49951eb
MW
873Nixpkgs distribution using the @command{guix import} command.}, the
874package may actually be built using the @code{guix build} command-line
875tool (@pxref{Invoking guix build}).
3dc1970d
LC
876
877Behind the scenes, a derivation corresponding to the @code{<package>}
878object is first computed by the @code{package-derivation} procedure.
879That derivation is stored in a @code{.drv} file under @file{/nix/store}.
ba55b1cb 880The build actions it prescribes may then be realized by using the
3dc1970d
LC
881@code{build-derivations} procedure (@pxref{The Store}).
882
883@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
e509d152
LC
884Return the derivation path and corresponding @code{<derivation>} object
885of @var{package} for @var{system} (@pxref{Derivations}).
3dc1970d
LC
886
887@var{package} must be a valid @code{<package>} object, and @var{system}
888must be a string denoting the target system type---e.g.,
889@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
890must be a connection to the daemon, which operates on the store
891(@pxref{The Store}).
892@end deffn
568717fd
LC
893
894@node The Store
895@section The Store
896
e531ac2a
LC
897@cindex store
898@cindex store paths
899
900Conceptually, the @dfn{store} is where derivations that have been
901successfully built are stored---by default, under @file{/nix/store}.
902Sub-directories in the store are referred to as @dfn{store paths}. The
903store has an associated database that contains information such has the
904store paths referred to by each store path, and the list of @emph{valid}
905store paths---paths that result from a successful build.
906
907The store is always accessed by the daemon on behalf of its clients
908(@pxref{Invoking guix-daemon}). To manipulate the store, clients
909connect to the daemon over a Unix-domain socket, send it requests, and
910read the result---these are remote procedure calls, or RPCs.
911
912The @code{(guix store)} module provides procedures to connect to the
913daemon, and to perform RPCs. These are described below.
914
915@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
916Connect to the daemon over the Unix-domain socket at @var{file}. When
917@var{reserve-space?} is true, instruct it to reserve a little bit of
918extra space on the file system so that the garbage collector can still
919operate, should the disk become full. Return a server object.
920
921@var{file} defaults to @var{%default-socket-path}, which is the normal
922location given the options that were passed to @command{configure}.
923@end deffn
924
925@deffn {Scheme Procedure} close-connection @var{server}
926Close the connection to @var{server}.
927@end deffn
928
929@defvr {Scheme Variable} current-build-output-port
930This variable is bound to a SRFI-39 parameter, which refers to the port
931where build and error logs sent by the daemon should be written.
932@end defvr
933
934Procedures that make RPCs all take a server object as their first
935argument.
936
937@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
938Return @code{#t} when @var{path} is a valid store path.
939@end deffn
940
941@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} @var{references}
942Add @var{text} under file @var{name} in the store, and return its store
943path. @var{references} is the list of store paths referred to by the
944resulting store path.
945@end deffn
946
874e6874
LC
947@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
948Build @var{derivations} (a list of derivation paths), and return when
949the worker is done building them. Return @code{#t} on success.
950@end deffn
951
e531ac2a
LC
952@c FIXME
953@i{This section is currently incomplete.}
568717fd
LC
954
955@node Derivations
956@section Derivations
957
874e6874
LC
958@cindex derivations
959Low-level build actions and the environment in which they are performed
960are represented by @dfn{derivations}. A derivation contain the
961following pieces of information:
962
963@itemize
964@item
965The outputs of the derivation---derivations produce at least one file or
966directory in the store, but may produce more.
967
968@item
969The inputs of the derivations, which may be other derivations or plain
970files in the store (patches, build scripts, etc.)
971
972@item
973The system type targeted by the derivation---e.g., @code{x86_64-linux}.
974
975@item
976The file name of a build script in the store, along with the arguments
977to be passed.
978
979@item
980A list of environment variables to be defined.
981
982@end itemize
983
984@cindex derivation path
985Derivations allow clients of the daemon to communicate build actions to
986the store. They exist in two forms: as an in-memory representation,
987both on the client- and daemon-side, and as files in the store whose
988name end in @code{.drv}---these files are referred to as @dfn{derivation
989paths}. Derivations paths can be passed to the @code{build-derivations}
990procedure to perform the build actions they prescribe (@pxref{The
991Store}).
992
993The @code{(guix derivations)} module provides a representation of
994derivations as Scheme objects, along with procedures to create and
995otherwise manipulate derivations. The lowest-level primitive to create
996a derivation is the @code{derivation} procedure:
997
998@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{system} @var{builder} @var{args} @var{env-vars} @var{inputs} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:hash-mode #f]
999Build a derivation with the given arguments. Return the resulting store
1000path and @code{<derivation>} object.
1001
1002When @var{hash}, @var{hash-algo}, and @var{hash-mode} are given, a
1003@dfn{fixed-output derivation} is created---i.e., one whose result is
1004known in advance, such as a file download.
1005@end deffn
1006
1007@noindent
1008Here's an example with a shell script as its builder, assuming
1009@var{store} is an open connection to the daemon, and @var{bash} points
1010to a Bash executable in the store:
1011
1012@lisp
1013(use-modules (guix utils)
1014 (guix store)
1015 (guix derivations))
1016
1017(call-with-values
1018 (lambda ()
1019 (let ((builder ; add the Bash script to the store
1020 (add-text-to-store store "my-builder.sh"
1021 "echo hello world > $out\n" '())))
1022 (derivation store "foo" (%current-system)
1023 bash `("-e" ,builder)
1024 '(("HOME" . "/homeless")) '())))
1025 list)
1026@result{} ("/nix/store/@dots{}-foo.drv" #<<derivation> @dots{}>)
1027@end lisp
1028
1029As can be guessed, this primitive is cumbersome to use directly. An
1030improved variant is @code{build-expression->derivation}, which allows
1031the caller to directly pass a Guile expression as the build script:
1032
1033@deffn {Scheme Procedure} build-expression->derivation @var{store} @var{name} @var{system} @var{exp} @var{inputs} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:env-vars '()] [#:modules '()] [#:guile-for-build #f]
1034Return a derivation that executes Scheme expression @var{exp} as a
1035builder for derivation @var{name}. @var{inputs} must be a list of
1036@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
1037@code{"out"} is assumed. @var{modules} is a list of names of Guile
1038modules from the current search path to be copied in the store,
1039compiled, and made available in the load path during the execution of
1040@var{exp}---e.g., @code{((guix build utils) (guix build
1041gnu-build-system))}.
1042
1043@var{exp} is evaluated in an environment where @code{%outputs} is bound
1044to a list of output/path pairs, and where @code{%build-inputs} is bound
1045to a list of string/output-path pairs made from @var{inputs}.
1046Optionally, @var{env-vars} is a list of string pairs specifying the name
1047and value of environment variables visible to the builder. The builder
1048terminates by passing the result of @var{exp} to @code{exit}; thus, when
1049@var{exp} returns @code{#f}, the build is considered to have failed.
1050
1051@var{exp} is built using @var{guile-for-build} (a derivation). When
1052@var{guile-for-build} is omitted or is @code{#f}, the value of the
1053@code{%guile-for-build} fluid is used instead.
1054@end deffn
1055
1056@noindent
1057Here's an example of a single-output derivation that creates a directory
1058containing one file:
1059
1060@lisp
1061(let ((builder '(let ((out (assoc-ref %outputs "out")))
1062 (mkdir out) ; create /nix/store/@dots{}-goo
1063 (call-with-output-file (string-append out "/test")
1064 (lambda (p)
1065 (display '(hello guix) p))))))
1066 (build-expression->derivation store "goo" (%current-system)
1067 builder '()))
1068
1069@result{} "/nix/store/@dots{}-goo.drv"
1070@result{} #<<derivation> @dots{}>
1071@end lisp
1072
1073@cindex strata of code
1074Remember that the build expression passed to
1075@code{build-expression->derivation} is run by a separate Guile process
1076than the one that calls @code{build-expression->derivation}: it is run
1077by a Guile process launched by the daemon, typically in a chroot. So,
1078while there is a single language for both the @dfn{host} and the build
1079side, there are really two @dfn{strata} of code: the host-side, and the
1080build-side code@footnote{The term @dfn{stratum} in this context was
1081coined by Manuel Serrano et al. in the context of their work on Hop.}.
1082This distinction is important to keep in mind, notably when using
1083higher-level constructs such as @var{gnu-build-system} (@pxref{Defining
1084Packages}). For this reason, Guix modules that are meant to be used in
1085the build stratum are kept in the @code{(guix build @dots{})} name
1086space.
568717fd
LC
1087
1088@c *********************************************************************
1089@node Utilities
1090@chapter Utilities
1091
1092@menu
e49951eb 1093* Invoking guix build:: Building packages from the command line.
568717fd
LC
1094@end menu
1095
e49951eb
MW
1096@node Invoking guix build
1097@section Invoking @command{guix build}
568717fd 1098
e49951eb 1099The @command{guix build} command builds packages or derivations and
6798a8e4
LC
1100their dependencies, and prints the resulting store paths. Note that it
1101does not modify the user's profile---this is the job of the
e49951eb 1102@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
1103it is mainly useful for distribution developers.
1104
1105The general syntax is:
c78bd12b
LC
1106
1107@example
e49951eb 1108guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
1109@end example
1110
1111@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
1112the software distribution such as @code{coreutils} or
1113@code{coreutils-8.20}, or a derivation such as
1114@file{/nix/store/@dots{}-coreutils-8.19.drv}. Alternatively, the
c78bd12b
LC
1115@code{--expression} option may be used to specify a Scheme expression
1116that evaluates to a package; this is useful when disambiguation among
1117several same-named packages or package variants is needed.
1118
1119The @var{options} may be zero or more of the following:
1120
1121@table @code
1122
1123@item --expression=@var{expr}
1124@itemx -e @var{expr}
1125Build the package @var{expr} evaluates to.
1126
5401dd75 1127For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
1128guile-1.8)}, which unambiguously designates this specific variant of
1129version 1.8 of Guile.
1130
1131@item --source
1132@itemx -S
1133Build the packages' source derivations, rather than the packages
1134themselves.
1135
e49951eb 1136For instance, @code{guix build -S gcc} returns something like
6798a8e4 1137@file{/nix/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b
LC
1138
1139@item --system=@var{system}
1140@itemx -s @var{system}
1141Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
1142the host's system type.
1143
1144An example use of this is on Linux-based systems, which can emulate
1145different personalities. For instance, passing
1146@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
1147to build packages in a complete 32-bit environment.
1148
1149@item --derivations
1150@itemx -d
1151Return the derivation paths, not the output paths, of the given
1152packages.
1153
1154@item --keep-failed
1155@itemx -K
1156Keep the build tree of failed builds. Thus, if a build fail, its build
1157tree is kept under @file{/tmp}, in a directory whose name is shown at
1158the end of the build log. This is useful when debugging build issues.
1159
1160@item --dry-run
1161@itemx -n
1162Do not build the derivations.
1163
1164@item --no-substitutes
1165Build instead of resorting to pre-built substitutes.
1166
1167@item --cores=@var{n}
1168@itemx -c @var{n}
1169Allow the use of up to @var{n} CPU cores for the build. The special
1170value @code{0} means to use as many CPU cores as available.
1171
1172@item --root=@var{file}
1173@itemx -r @var{file}
1174Make @var{file} a symlink to the result, and register it as a garbage
1175collector root.
07ab4bf1
LC
1176
1177@item --verbosity=@var{level}
1178Use the given verbosity level. @var{level} must be an integer between 0
1179and 5; higher means more verbose output. Setting a level of 4 or more
1180may be helpful when debugging setup issues with the build daemon.
1181
c78bd12b
LC
1182@end table
1183
e49951eb 1184Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
1185the @code{package-derivation} procedure of the @code{(guix packages)}
1186module, and to the @code{build-derivations} procedure of the @code{(guix
1187store)} module.
1188
a1ba8475
LC
1189@c *********************************************************************
1190@node GNU Distribution
1191@chapter GNU Distribution
1192
1193Guix comes with a distribution of free software@footnote{The term
1194``free'' here refers to the
1195@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
1196users of that software}.} that form the basis of the GNU system. This
1197includes core GNU packages such as GNU libc, GCC, and Binutils, as well
1198as many GNU and non-GNU applications. The complete list of available
e49951eb
MW
1199packages can be seen by running @command{guix package} (@pxref{Invoking
1200guix package}):
a1ba8475
LC
1201
1202@example
e49951eb 1203guix package --list-available
a1ba8475
LC
1204@end example
1205
1206The package definitions of the distribution may are provided by Guile
1207modules in the @code{(gnu packages ...)} name space---for instance, the
1208@code{(gnu packages emacs)} module exports a variable named
1209@code{emacs}, which is bound to a @code{<package>} object
1210(@pxref{Defining Packages}). The @code{(gnu packages)} module provides
1211facilities for searching for packages.
1212
1213The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
1214each package is built based solely on other packages in the
1215distribution. The root of this dependency graph is a small set of
1216@dfn{bootstrap binaries}, provided by the @code{(gnu packages
1217bootstrap)} module. These are statically-linked binaries of the core
1218tools without which building anything at all would be impossible.
1219
1220
1221Our goal is to build a practical 100% free software distribution of
1222Linux-based and other variants of GNU, with a focus on the promotion and
1223tight integration of GNU components, and an emphasis on programs and
1224tools that help users exert that freedom.
1225
1226Building this distribution is a cooperative effort, and you are invited
1227to join! Please get in touch with us on @email{bug-guix@@gnu.org}. We
1228welcome ideas, bug reports, patches, and anything that may be helpful to
1229the project.
1230
c78bd12b 1231
568717fd
LC
1232@c *********************************************************************
1233@node Acknowledgments
1234@chapter Acknowledgments
1235
1236Guix is based on the Nix package manager, which was designed and
1237implemented by Eelco Dolstra. Nix pioneered functional package
1238management, and promoted unprecedented features, such as transactional
1239package upgrades and rollbacks, per-user profiles, and referentially
1240transparent build processes. Without this work, Guix would not exist.
1241
1242The Nix-based software distributions, Nixpkgs and NixOS, have also been
1243an inspiration for Guix.
1244
1245@c *********************************************************************
1246@node GNU Free Documentation License
1247@appendix GNU Free Documentation License
1248
1249@include fdl-1.3.texi
1250
1251@c *********************************************************************
1252@node Concept Index
1253@unnumbered Concept Index
1254@printindex cp
1255
1256@node Function Index
1257@unnumbered Function Index
1258@printindex fn
1259
1260@bye
1261
1262@c Local Variables:
1263@c ispell-local-dictionary: "american";
1264@c End: