Your distro is a Scheme library Hacking your way through the GNU Guix API
Ludovic Courtes`
FOSDEM 2016 The Emacs of distros When large numbers of nontechnical workers are using a programmable editor, they will be tempted constantly to begin programming in the course of their day-to-day lives. This should contribute greatly to computer literacy [...]
– Stallman, 1981 user freedom = access + empowerment $ guix package -i emacs guile
? #1. Packages & package lookup. #2. The store. build processes chroot, separate UIDs Guile Scheme
(guix packages)
(guix store) Guile , make, etc. Guile , make, etc. Guile , make, etc.
build daemon build processes chroot, separate UIDs Guile Scheme
(guix packages)
(guix store) Guile , make, etc. Guile , make, etc. Guile , make, etc.
build daemon RPCs build processes chroot, separate UIDs Guile Scheme
(guix packages)
, make, etc. , make, etc. , make, etc. (guix store) Guile Guile Guile
build daemon RPCs #3. From packages to derivations. coreutils-8.24
libcap-2.24 acl-2.2.52 gmp-6.1.0
attr-2.4.47 m4-1.4.17
perl-5.22.1 gettext-0.19.7
expat-2.1.0
9 nodes guix graph --type=package coreutils coreutils-8.24
libcap-2.24 acl-2.2.52 gmp-6.1.0
Whereattr-2.4.47 are GCC, libc, etc.?m4-1.4.17
perl-5.22.1 gettext-0.19.7
expat-2.1.0
9 nodes guix graph --type=package coreutils coreutils-8.24
acl-2.2.52 libcap-2.24
attr-2.4.47
gettext-0.19.7 gmp-6.1.0
expat-2.1.0 perl-5.22.1 m4-1.4.17
tar-1.28 patch-2.7.5 sed-4.2.2 bzip2-1.0.6 diffutils-3.3 findutils-4.6.0 gzip-1.6 xz-5.2.2 gcc-4.9.3 coreutils-8.24 file-5.25 glibc-2.22 grep-2.22 glibc-utf8-locales-2.22 make-4.1 bash-4.3.42 ld-wrapper-0 binutils-2.25.1 gawk-4.1.3
28 nodes guix graph --type=bag-emerged coreutils coreutils-8.24
acl-2.2.52 libcap-2.24
attr-2.4.47 What about the compiler’s compiler, etc.?
gettext-0.19.7 gmp-6.1.0
expat-2.1.0 perl-5.22.1 m4-1.4.17
tar-1.28 patch-2.7.5 sed-4.2.2 bzip2-1.0.6 diffutils-3.3 findutils-4.6.0 gzip-1.6 xz-5.2.2 gcc-4.9.3 coreutils-8.24 file-5.25 glibc-2.22 grep-2.22 glibc-utf8-locales-2.22 make-4.1 bash-4.3.42 ld-wrapper-0 binutils-2.25.1 gawk-4.1.3
28 nodes guix graph --type=bag-emerged coreutils coreutils-8.24
acl-2.2.52 libcap-2.24
attr-2.4.47
gmp-6.1.0 gettext-0.19.7
m4-1.4.17 expat-2.1.0 perl-5.22.1
glibc-utf8-locales-2.22 ld-wrapper-0 patch-2.7.5
gawk-4.1.3 ed-1.12
gzip-1.6 file-5.25 findutils-4.6.0 libsigsegv-2.10 bzip2-1.0.6 sed-4.2.2 diffutils-3.3 xz-5.2.2 tar-1.28 lzip-1.16
grep-2.22 coreutils-8.24
libcap-2.24 acl-2.2.52
attr-2.4.47 make-4.1
gmp-6.1.0 gettext-0.19.7 pkg-config-0.29
perl-boot0-5.22.1 perl-5.22.1 m4-1.4.17 expat-2.1.0 guile-2.0.11
glibc-utf8-locales-2.22 readline-6.3 gmp-6.1.0 libgc-7.4.2
gzip-1.6 gzip-1.6 libunistring-0.9.6 libltdl-2.4.6 pkg-config-0.29 libffi-3.2.1 libatomic-ops-7.4.2 ncurses-6.0 m4-1.4.17
bash-4.3.42
readline-6.3
ncurses-6.0
gcc-4.9.3 gcc-4.9.3
ld-wrapper-boot3-0
binutils-2.25.1 zlib-1.2.8 libstdc++-4.9.3 guile-bootstrap-2.0
gcc-cross-boot0-wrapped-4.9.3
glibc-2.22
bash-static-4.3.42
gcc-cross-boot0-wrapped-4.9.3
glibc-intermediate-2.22 gettext-boot0-0.19.7
linux-libre-headers-3.14.37 texinfo-6.0 gcc-cross-boot0-4.9.3 bison-3.0.4
perl-boot0-5.22.1 m4-1.4.17 binutils-cross-boot0-2.25.1
file-boot0-5.25 findutils-boot0-4.6.0
diffutils-boot0-3.3
make-boot0-4.1
gcc-bootstrap-0 binutils-bootstrap-0 bootstrap-binaries-0
glibc-bootstrap-0
82 nodes guix graph --type=bag coreutils (too big)
383 nodes guix graph --type=derivation coreutils origin package
bag build system
derivation #4. “Staging”: hosting build-side code. build processes chroot, separate UIDs Guile Scheme
(guix packages)
, make, etc. , make, etc. , make, etc. (guix store) Guile Guile Guile
build daemon RPCs #5. Operating system! [email protected] http://gnu.org/software/guix/ Copyright c 2010, 2012–2016 Ludovic Courtes` [email protected].
GNU GuixSD logo, CC-BY-SA 4.0, http://gnu.org/s/guix/graphics Copyright of other images included in this document is held by their respective owners.
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
At your option, you may instead copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at http://www.gnu.org/licenses/gfdl.html.
The source of this document is available from http://git.sv.gnu.org/cgit/guix/maintenance.git.