Navigating the Guix Subsystems Ludovic Courtès GNU Hackers Meeting, Rennes, August 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.
#2. The store.
build processes chroot, separate UIDs Guile, make, etc. Guile, make, etc. Guile, make, etc. Guile Scheme (guix packages) (guix store) build daemon
build processes chroot, separate UIDs Guile, make, etc. Guile, make, etc. Guile, make, etc. Guile Scheme (guix packages) (guix store) build daemon RPCs
build processes chroot, separate UIDs Guile, make, etc. Guile, make, etc. Guile, make, etc. Guile Scheme (guix packages) (guix store) 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 Where attr-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
tar-1.28 gettext-0.19.7 expat-2.1.0 acl-2.2.52 attr-2.4.47 coreutils-8.24 libcap-2.24 perl-5.22.1 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 gmp-6.1.0 m4-1.4.17 28 nodes guix graph --type=bag-emerged coreutils
tar-1.28 gettext-0.19.7 expat-2.1.0 acl-2.2.52 attr-2.4.47 coreutils-8.24 libcap-2.24 perl-5.22.1 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 gmp-6.1.0 m4-1.4.17 What about the compiler s compiler, etc.? 28 nodes guix graph --type=bag-emerged coreutils
coreutils-8.24 perl-5.22.1 tar-1.28 gzip-1.6 bzip2-1.0.6 xz-5.2.2 file-5.25 diffutils-3.3 patch-2.7.5 sed-4.2.2 findutils-4.6.0 gawk-4.1.3 grep-2.22 coreutils-8.24 make-4.1 bash-4.3.42 ld-wrapper-0 binutils-2.25.1 gcc-4.9.3 glibc-2.22 glibc-utf8-locales-2.22 acl-2.2.52 gmp-6.1.0 libcap-2.24 glibc-utf8-locales-2.22 gcc-4.9.3 ld-wrapper-boot3-0 binutils-cross-boot0-2.25.1 make-boot0-4.1 diffutils-boot0-3.3 findutils-boot0-4.6.0 file-boot0-5.25 bootstrap-binaries-0 ed-1.12 libsigsegv-2.10 perl-boot0-5.22.1 perl-5.22.1 acl-2.2.52 gmp-6.1.0 libcap-2.24 pkg-config-0.29 guile-2.0.11 bison-3.0.4 readline-6.3 ncurses-6.0 gcc-cross-boot0-wrapped-4.9.3 texinfo-6.0 bash-static-4.3.42 libstdc++-4.9.3 zlib-1.2.8 perl-boot0-5.22.1 gettext-boot0-0.19.7 gcc-cross-boot0-4.9.3 glibc-bootstrap-0 gcc-bootstrap-0 linux-libre-headers-3.14.37 gzip-1.6 gettext-0.19.7 attr-2.4.47 m4-1.4.17 gzip-1.6 guile-bootstrap-2.0 binutils-bootstrap-0 gettext-0.19.7 attr-2.4.47 m4-1.4.17 gcc-cross-boot0-wrapped-4.9.3 glibc-intermediate-2.22 m4-1.4.17 expat-2.1.0 lzip-1.16 pkg-config-0.29 libffi-3.2.1 readline-6.3 libunistring-0.9.6 libltdl-2.4.6 libgc-7.4.2 gmp-6.1.0 ncurses-6.0 libatomic-ops-7.4.2 m4-1.4.17 expat-2.1.0 82 nodes guix graph --type=bag coreutils
(too big) 383 nodes guix graph --type=derivation coreutils
origin package bag build system derivation
#4. Operating system!
Linux-libre
Linux-libre initial RAM disk
Linux-libre initial RAM disk Guile
Linux-libre initial RAM disk Guile PID 1: GNU Shepherd services...
Linux-libre initial RAM disk Guile PID 1: GNU Shepherd services... Guile
Linux-libre initial RAM disk Guile PID 1: GNU Shepherd services... Guile applications
ludo@gnu.org http://gnu.org/software/guix/
Copyright c 2010, 2012 2016 Ludovic Courtès ludo@gnu.org. 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.