doc: Improve build instructions in README and HACKING.
[jackhill/guix/guix.git] / README
CommitLineData
4255d4e3
LC
1-*- mode: org -*-
2
c80e7e55
LC
3[[http://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
4associated free software distribution, for the [[http://www.gnu.org/gnu/gnu.html][GNU system]]. In addition
5to standard package management features, Guix supports transactional
6upgrades and roll-backs, unprivileged package management, per-user
7profiles, and garbage collection.
b7a7f598 8
a65e3306
LC
9It provides [[http://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded
10domain-specific languages (EDSLs) to describe how packages are to be
11built and composed.
b7a7f598 12
a65e3306
LC
13A user-land free software distribution for GNU/Linux comes as part of
14Guix.
15
16Guix is based on the [[http://nixos.org/nix/][Nix]] package manager.
4255d4e3
LC
17
18
e9f6d6dd 19* Requirements
4255d4e3 20
a65e3306 21GNU Guix currently depends on the following packages:
4255d4e3 22
4a328f73 23 - [[http://gnu.org/software/guile/][GNU Guile 2.0.x]], version 2.0.5 or later
d388c2c4 24 - [[http://gnupg.org/][GNU libgcrypt]]
4255d4e3 25
e9f6d6dd
LC
26Unless `--disable-daemon' was passed, the following packages are needed:
27
28 - [[http://sqlite.org/][SQLite 3]]
29 - [[http://www.bzip.org][libbz2]]
30 - [[http://gcc.gnu.org][GCC's g++]]
31
32When `--disable-daemon' was passed, you instead need the following:
33
34 - [[http://nixos.org/nix/][Nix]]
35
8b2d9e5d 36* Installation
4255d4e3 37
8b2d9e5d 38See the manual for the installation instructions, either by running
4255d4e3 39
8b2d9e5d 40 info -f doc/guix.info "(guix) Installation"
7da7ae93 41
8b2d9e5d 42or by checking the [[http://www.gnu.org/software/guix/manual/guix.html#Installation][web copy of the manual]].
7da7ae93 43
8b2d9e5d
LC
44For information on installation from a Git checkout, please see the ‘HACKING’
45file.
7da7ae93 46
43d8f490
LC
47* Installing Guix from Guix
48
49You can re-build and re-install Guix using a system that already runs Guix.
50To do so:
51
d4c74860
KH
52 - Install the dependencies (see 'Requirements' above) and build tools using
53 Guix. You should have the following packages installed in your user
54 profile:
55
56 - autoconf
57 - automake
58 - bzip2
59 - gcc
60 - gettext
61 - glibc
62 - guile
63 - ld-wrapper
64 - libgcrypt
65 - pkg-config
66 - sqlite
67
68 - set the environment variables that Guix recommends you to set during the
69 package installation process:
70 ACLOCAL, CPATH, LIBRARY_PATH, PATH, PKG_CONFIG_PATH
71 In addition, set
72 GUIX_LD_WRAPPER_ALLOW_IMPURITIES=yes
73
43d8f490
LC
74 - re-run the configure script passing it the option
75 `--with-libgcrypt-prefix=$HOME/.guix-profile/'
d4c74860 76
43d8f490
LC
77 - run "make" and "make install"
78
4255d4e3
LC
79* How It Works
80
81Guix does the high-level preparation of a /derivation/. A derivation is
82the promise of a build; it is stored as a text file under
83=/nix/store/xxx.drv=. The (guix derivations) module provides the
84`derivation' primitive, as well as higher-level wrappers such as
85`build-expression->derivation'.
86
e1b7096a
LC
87Guix does remote procedure calls (RPCs) to the Guix or Nix daemon (the
88=guix-daemon= or =nix-daemon= command), which in turn performs builds
89and accesses to the Nix store on its behalf. The RPCs are implemented
90in the (guix store) module.
91
92* Installing Guix as non-root
93
94The Guix daemon allows software builds to be performed under alternate
95user accounts, which are normally created specifically for this
96purpose. For instance, you may have a pool of accounts in the
97=guixbuild= group, and then you can instruct =guix-daemon= to use them
98like this:
99
100 $ guix-daemon --build-users-group=guixbuild
101
102However, unless it is run as root, =guix-daemon= cannot switch users.
103In that case, it falls back to using a setuid-root helper program call
104=nix-setuid-helper=. That program is not setuid-root by default when
105you install it; instead you should run a command along these lines
106(assuming Guix is installed under /usr/local):
107
108 # chown root.root /usr/local/libexec/nix-setuid-helper
109 # chmod 4755 /usr/local/libexec/nix-setuid-helper
4255d4e3
LC
110
111* Contact
112
a65e3306
LC
113GNU Guix is hosted at https://savannah.gnu.org/projects/guix/.
114
115Please email <bug-guix@gnu.org> for bug reports or questions regarding
116Guix and its distribution; email <gnu-system-discuss@gnu.org> for
117general issues regarding the GNU system.
118
119Join #guix on irc.freenode.net.
120
121* Guix & Nix
122
123GNU Guix is based on [[http://nixos.org/nix/][the Nix package manager]]. It implements the same
124package deployment paradigm, and in fact it reuses some of its code.
125Yet, different engineering decisions were made for Guix, as described
126below.
127
128Nix is really two things: a package build tool, implemented by a library
129and daemon, and a special-purpose programming language. GNU Guix relies
130on the former, but uses Scheme as a replacement for the latter.
131
132Using Scheme instead of a specific language allows us to get all the
133features and tooling that come with Guile (compiler, debugger, REPL,
134Unicode, libraries, etc.) And it means that we have a general-purpose
135language, on top of which we can have embedded domain-specific languages
136(EDSLs), such as the one used to define packages. This broadens what
137can be done in package recipes themselves, and what can be done around them.
138
139Technically, Guix makes remote procedure calls to the ‘nix-worker’
140daemon to perform operations on the store. At the lowest level, Nix
141“derivations” represent promises of a build, stored in ‘.drv’ files in
142the store. Guix produces such derivations, which are then interpreted
143by the daemon to perform the build. Thus, Guix derivations can use
144derivations produced by Nix (and vice versa).
145
146With Nix and the [[http://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at
147the Nix language level, but builders are usually written in Bash.
148Conversely, Guix encourages the use of Scheme for both package
149composition and builders. Likewise, the core functionality of Nix is
150written in C++ and Perl; Guix relies on some of the original C++ code,
151but exposes all the API as Scheme.
d38487e9
LC
152
153* Related software
154
155 - [[http://nixos.org][Nix, Nixpkgs, and NixOS]], functional package manager and associated
156 software distribution, are the inspiration of Guix
157 - [[http://www.gnu.org/software/stow/][GNU Stow]] builds around the idea of one directory per prefix, and a
158 symlink tree to create user environments
159 - [[http://www.pvv.ntnu.no/~arnej/store/storedoc_6.html][STORE]] shares the same idea
160 - [[https://live.gnome.org/OSTree/][GNOME's OSTree]] allows bootable system images to be built from a
161 specified set of packages
162 - The [[http://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
163 distribution; unlike Guix, it relies on core tools available on the
164 host system