Your distro is a Scheme library Hacking your way through the GNU Guix API

Ludovic Courtes`

FOSDEM 2016 The 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

-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 -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 ’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. ! [email protected] http://gnu.org/software/guix/ Copyright 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 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.