We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even...

90
We’re building the GNU system! Ludovic Court ` es [email protected] GNU Hackers Meeting 15 August 2014, M¨ unchen

Transcript of We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even...

Page 1: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

We’re building the GNU system!

Ludovic [email protected]

GNU Hackers Meeting15 August 2014, Munchen

Page 2: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Howdy!

( )guile

NixOS

Page 3: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Howdy!

( )guileNixOS

Page 4: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Howdy!

( )guileNixOS

Page 5: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the “GNU system”,aka. “a GNU distribution”

I protect & enhance computing freedomI improve integration of GNU software, consistencyI improve workflow among GNU hackers & users

Page 6: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the “GNU system”,aka. “a GNU distribution”

I protect & enhance computing freedomI improve integration of GNU software, consistencyI improve workflow among GNU hackers & users

Page 7: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Dependable. Hackable. Liberating.

Page 8: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Dependable.

Page 9: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

per-user, transactional package installation etc.

alice@foo$ guix package --install=gcc

alice@foo$ guix gc --references ‘which gcc‘

/gnu/store/...-glibc-2.19

/gnu/store/...-gcc-4.9.1

...

bob@foo$ guix package --install=gcc-4.7.3

bob@foo$ guix gc --references ‘which gcc‘

/gnu/store/...-glibc-2.17

/gnu/store/...-gcc-4.7.3

...

demo!

Page 10: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

transparent binary/source deployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.3 out /gnu/store/...-emacs-24.3

The following files will be downloaded:

/gnu/store/...-emacs-24.3

/gnu/store/...-libxpm-3.5.10

/gnu/store/...-libxext-1.3.1

/gnu/store/...-libxaw-1.0.11

Page 11: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

transparent binary/source deployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.3 out /gnu/store/...-emacs-24.3

The following files will be downloaded:

/gnu/store/...-libxext-1.3.1

/gnu/store/...-libxaw-1.0.11

The following derivations will be built:

/gnu/store/...-emacs-24.3.drv

/gnu/store/...-libxpm-3.5.10.drv

Page 12: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

Page 13: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0

test

Page 14: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0

git push git.sv.gnu.org

test

Page 15: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0hydra.gnu.org

build farm

git push git.sv.gnu.org

test

pull

pull

Page 16: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0hydra.gnu.org

build farm

git push git.sv.gnu.org

test

pull

pull

get binary

Page 17: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0

git push git.sv.gnu.org

test

pull

Page 18: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

workflow

(define foo (package ...)) user

guix build foo

/gnu/store/...-foo-1.0

git push git.sv.gnu.org

test

no “maintainer

uploads”

no singlepoint of trust

Page 19: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

does this binary correspondto that source?

Page 20: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

towards deterministic builds

$ guix build guile

/gnu/store/ h2g4sc09h4... -guile-2.0.9

$ guix gc --references /gnu/store/...-guile-2.0.9

/gnu/store/4jl83jgzaac...-glibc-2.17

/gnu/store/iplay43cg58...-libunistring-0.9.3

/gnu/store/47p47v92cj9...-libffi-3.0.9

/gnu/store/drkwck2j965...-gmp-5.0.5

...

isolated build: chroot, separate name spaces, etc.

Page 21: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

towards deterministic builds

$ guix build guile

/gnu/store/ h2g4sc09h4... -guile-2.0.9

$ guix gc --references /gnu/store/...-guile-2.0.9

/gnu/store/4jl83jgzaac...-glibc-2.17

/gnu/store/iplay43cg58...-libunistring-0.9.3

/gnu/store/47p47v92cj9...-libffi-3.0.9

/gnu/store/drkwck2j965...-gmp-5.0.5

...

hash of all the dependencies

Page 22: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

towards deterministic builds

$ guix build guile

/gnu/store/ h2g4sc09h4... -guile-2.0.9

$ guix gc --references /gnu/store/...-guile-2.0.9

/gnu/store/4jl83jgzaac...-glibc-2.17

/gnu/store/iplay43cg58...-libunistring-0.9.3

/gnu/store/47p47v92cj9...-libffi-3.0.9

/gnu/store/drkwck2j965...-gmp-5.0.5

...

Page 23: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

towards deterministic builds

$ guix build guile

/gnu/store/ h2g4sc09h4... -guile-2.0.9

$ guix gc --references /gnu/store/...-guile-2.0.9

/gnu/store/4jl83jgzaac...-glibc-2.17

/gnu/store/iplay43cg58...-libunistring-0.9.3

/gnu/store/47p47v92cj9...-libffi-3.0.9

/gnu/store/drkwck2j965...-gmp-5.0.5

...

(nearly) bit-identical for everyone

Page 24: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages
Page 25: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

do not trust a single

binary provider

Page 26: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Deterministic Builds: Integritythrough Decentralization

– Mike Perry

Page 27: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

cool features forGNU maintainers

Page 28: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix package -i gettext

looking for latest release of GNU gettext...

note: using 0.18.3 but 0.19.2 is available upstream

Page 29: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix package -i gettext

note: using 0.18.3 but 0.19.2 is available upstream

Page 30: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix build emacs

\

--with-source=ftp://alpha.gnu..../emacs-24.3.92.tar.xz

Page 31: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix build emacs \

--with-source=ftp://alpha.gnu..../emacs-24.3.92.tar.xz

Page 32: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix build emacs \

--with-source=ftp://alpha.gnu..../emacs-24.3.92.tar.xz

pre-release testing ina pristine environment

Page 33: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages
Page 34: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

send a package recipe! :-)

Page 35: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (guix) (gnu))

(package (inherit

(car (find-packages-by-name "libunistring")))

(version "0.9.4rc1")

(source (origin

(method url-fetch)

(uri "http://.../libunistring-0.9.4-rc1.tar.gz")(sha256 (base32 "14pi90...")))))

$ guix build -e ’(load "libunistring-rc.scm")’

The following derivations will be built:

/gnu/store/...-libunistring-0.9.4rc1.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv

Page 36: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (guix) (gnu))

(package (inherit

(car (find-packages-by-name "libunistring")))

(version "0.9.4rc1")

(source (origin

(method url-fetch)

(uri "http://.../libunistring-0.9.4-rc1.tar.gz")(sha256 (base32 "14pi90...")))))

$ guix build -e ’(load "libunistring-rc.scm")’

The following derivations will be built:

/gnu/store/...-libunistring-0.9.4rc1.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv

Page 37: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (guix) (gnu))

(package (inherit

(car (find-packages-by-name "libunistring")))

(version "0.9.4rc1")

(source (origin

(method url-fetch)

(uri "http://.../libunistring-0.9.4-rc1.tar.gz")(sha256 (base32 "14pi90...")))))

$ guix build -e ’(load "libunistring-rc.scm")’

The following derivations will be built:

/gnu/store/...-libunistring-0.9.4rc1.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv

but does, say, Guile work with the RC?

Page 38: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (gnu packages guile) (guix)

(srfi srfi-1))

(package (inherit guile-2.0)

;; Replace the stable libunistring with the RC

;; in Guile’s dependencies.

(inputs ‘(("libunistring"

,(primitive-load "libunistring-rc.scm"))

,@(alist-delete "libunistring"

(package-inputs guile-2.0)))))

$ guix build -e ’(load "guile-libunistring.scm")’

The following derivations will be built:

/gnu/store/...-guile-2.0.11.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv/gnu/store/...-libunistring-0.9.4rc1.drv

Page 39: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (gnu packages guile) (guix)

(srfi srfi-1))

(package (inherit guile-2.0)

;; Replace the stable libunistring with the RC

;; in Guile’s dependencies.

(inputs ‘(("libunistring"

,(primitive-load "libunistring-rc.scm"))

,@(alist-delete "libunistring"

(package-inputs guile-2.0)))))

$ guix build -e ’(load "guile-libunistring.scm")’

The following derivations will be built:

/gnu/store/...-guile-2.0.11.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv/gnu/store/...-libunistring-0.9.4rc1.drv

Page 40: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (gnu packages guile) (guix)

(srfi srfi-1))

(package (inherit guile-2.0)

;; Replace the stable libunistring with the RC

;; in Guile’s dependencies.

(inputs ‘(("libunistring"

,(primitive-load "libunistring-rc.scm"))

,@(alist-delete "libunistring"

(package-inputs guile-2.0)))))

$ guix build -e ’(load "guile-libunistring.scm")’

The following derivations will be built:

/gnu/store/...-guile-2.0.11.drv/gnu/store/...-libunistring-0.9.4-rc1.tar.gz.drv/gnu/store/...-libunistring-0.9.4rc1.drv

reliable integration testing

Page 41: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

even better

(left as an exercise to the audience)

1. iterate over the packages withfold-packages

2. identify those depending on libunistring3. compute package variants that use the RC4. build them

Page 42: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

even better(left as an exercise to the audience)

1. iterate over the packages withfold-packages

2. identify those depending on libunistring3. compute package variants that use the RC4. build them

Page 43: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Hackable.

Page 44: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

The truth is that Lisp is not the rightlanguage for any particular problem.Rather, Lisp encourages one to attack a newproblem by implementing new languagestailored to that problem.

– Abelson & Sussman, 1987

Page 45: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(define hello

(package

(name "hello")

(version "2.8")

(source (origin

(method url-fetch)

(uri (string-append

"mirror://gnu/.../hello-" version

".tar.gz"))

(sha256 (base32 "0wqd...dz6"))))(build-system gnu-build-system)

(synopsis "Hello, GNU world: An example GNU package")

(description "Produce a friendly greeting.")

(home-page "http://www.gnu.org/software/hello/")

(license gpl3+)))

Page 46: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile

(guix packages)

(guix store)

build daemon

Page 47: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile

(guix packages)

(guix store)

build daemon RPCs

Page 48: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile

(guix packages)

(guix store)

build daemon RPCs

Page 49: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(use-modules (guix) (gnu packages base))

,enter-store-monad

(interned-file "README")

=> "/gnu/store/rwmzi9jlj77a7bq5kyiy2abdqznr3f02-README"

(gexp->derivation "list-files"

#~(symlink (string-append #$coreutils "/bin/ls")

#$output))

=> #<derivation "/gnu/store/xyz...-list-files.drv" ...>

(package->derivation hello)

=> #<derivation "/gnu/store/xyz...-hello-2.8.drv ...>

(built-derivations (list drv))

... daemon builds/downloads package on our behalf...=> #t

Emacs +Geiser demo!

Page 50: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(package ( inherit hello)

(version "2.7")

(source

(origin

(method url-fetch)

(uri "mirror://gnu/hello/hello-2.7.tar.gz")

(sha256

(base32 "7dqw3...")))))

copy fields from hello exceptfor version and source

Page 51: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(define (static-package p)

;; Return a statically-linked variant of P.

(package (inherit p)

(arguments

‘(#:configure-flags ’("--disable-shared"

"LDFLAGS=-static")

,@(package-arguments p)))))

Page 52: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

and now, the operating system

Page 53: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(bootloader (grub-configuration (device "/dev/sdX")))

(initrd (cut base-initrd <>

#:extra-modules ’("usb-storage.ko")))

(file-systems (cons (file-system

(mount-point "/") ...)%base-file-systems))

(users (list (user-account

(name "ludo") (group "users")

(comment "Hello, this is me!")

(home-directory "/home/ludo"))))

(packages (cons* iotop jnettop %base-packages)))

Page 54: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(bootloader (grub-configuration (device "/dev/sdX")))

(initrd (cut base-initrd <>

#:extra-modules ’("usb-storage.ko")))

(file-systems (cons (file-system

(mount-point "/") ...)%base-file-systems))

(users (list (user-account

(name "ludo") (group "users")

(comment "Hello, this is me!")

(home-directory "/home/ludo"))))

(packages (cons* iotop jnettop %base-packages)))

Page 55: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

$ guix system build os-config.scm

/gnu/store/lq5kbp84kl9q9ncbk578wa7x5x0lrl3f-system

$ guix system vm os-config

/gnu/store/yan79p9k83dwk5yd6jgmhpjh0nxalfn6-run-vm.sh

# guix system init os-config /mnt

...

# guix system reconfigure os-config

...

demo!

Page 56: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

# deco status dmd

Started: (term-tty1 term-tty2 nscd syslog)

Stopped: ()

# deco stop nscd

Service nscd has been stopped

PID 1 isGNU dmd!

Page 57: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU dmd in a nutshell

I born in 2003, revived in 2013 :-)I dependency-based service manager

I dmd is PID 1, deco is a clientI written in Guile SchemeI dynamic, extensible, etc.

Page 58: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU dmd in a nutshell

I born in 2003, revived in 2013 :-)I dependency-based service managerI dmd is PID 1, deco is a client

I written in Guile SchemeI dynamic, extensible, etc.

Page 59: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU dmd in a nutshell

I born in 2003, revived in 2013 :-)I dependency-based service managerI dmd is PID 1, deco is a clientI written in Guile SchemeI dynamic, extensible, etc.

Page 60: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

extra coolness

Page 61: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU/Hurd port—the true GNU!WIP by Manolis Ragkousis

I step #1: cross-compiling to GNU/Hurd

I packaged Mach, MiG, the Hurd, and...I ... libcI but! GNU libc fails to build on GNU/HurdI (Debian’s version does build...)

Page 62: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU/Hurd port—the true GNU!WIP by Manolis Ragkousis

I step #1: cross-compiling to GNU/HurdI packaged Mach, MiG, the Hurd, and...I ... libc

I but! GNU libc fails to build on GNU/HurdI (Debian’s version does build...)

Page 63: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU/Hurd port—the true GNU!WIP by Manolis Ragkousis

I step #1: cross-compiling to GNU/HurdI packaged Mach, MiG, the Hurd, and...I ... libcI but! GNU libc fails to build on GNU/Hurd

I (Debian’s version does build...)

Page 64: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU/Hurd port—the true GNU!WIP by Manolis Ragkousis

I step #1: cross-compiling to GNU/HurdI packaged Mach, MiG, the Hurd, and...I ... libcI but! GNU libc fails to build on GNU/HurdI (Debian’s version does build...)

Page 65: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

GNU/Hurd port—the true GNU!WIP by Manolis Ragkousis

I step #1: cross-compiling to GNU/HurdI packaged Mach, MiG, the Hurd, and...I ... libcI but! GNU libc fails to build on GNU/HurdI (Debian’s version does build...)

help the Hurd & libc

regain harmony!

Page 66: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

worldpremiere!

Page 67: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

WIP by David Thompsonhttps://gitorious.org/guix-web/guix-web

Page 68: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

guix.el!

Page 69: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

guix.el!

Page 70: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

WIP by Alex Kosthttps://github.com/alezost/guix.el(merged soon)

Page 71: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

⇒ plan working as expected

embed DSLs!

Page 72: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

⇒ plan working as expected

embed DSLs!

Page 73: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Lively!

Page 74: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

timeline

I July 2012 — GHM, DusseldorfI Nov. 2012 — dubbed GNUI Jan. 2013 — 0.1I June 2013 — European Lisp SymposiumI 27 Sep. 2013 — 0.4, with VM imageI Dec. 2013 — 0.5, system config, mips64I Apr. 2014 — 0.6, signed binaries, guix system

I July 2014 — 0.7, installable operating system!

Page 75: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

timeline

I July 2012 — GHM, DusseldorfI Nov. 2012 — dubbed GNUI Jan. 2013 — 0.1I June 2013 — European Lisp SymposiumI 27 Sep. 2013 — 0.4, with VM imageI Dec. 2013 — 0.5, system config, mips64I Apr. 2014 — 0.6, signed binaries, guix system

I July 2014 — 0.7, installable operating system!

Page 76: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

status

status

Page 77: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

status

I full-featured package managerI 900 packages, 3 platformsI standalone distro! (alpha)I binaries built & served at http://hydra.gnu.orgI tooling: auto-update, sync descriptions with GNU, etc.I l10n: 7 languages!

Page 78: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages
Page 79: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages
Page 80: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

thanks for the code, reports, ideas, and translations!

I Eric Bavier, Taylan Ulrich Bayirli/Kammer, John Darrington,Eelco Dolstra & the Nix crew, Andreas Enge, Alırio Eyng,Guy Grant, Raimon Grau, Nikita Karetnikov, AljoshaPapsch, Manolis Ragkousis, Cyril Roelandt, AlexSassmannshausen, Cyrill Schenkel, Jason Self, SreeHarsha Totakura, David Thompson, Mark H. Weaver

I Lluıs Batlle i Rossell, Marek Benc, Daniel Clark, AlexandruCojocaru, Aleix Conchillo Flaque, Rafael Ferreira,Christian Grothoff, Jeffrin Jose, Kete, Alex Kost, MatthewLien, Niels Moller, Yutaka Niibe, Adam Pribyl, BennoSchulenberg, Alen Skondro, Matthias Wachs, Zerwas

I Pavel Fric, Mario Blattermann, Felipe Castro, Balazs Ur,Rafael Ferreira, Miroslav Nikolic, Tran Ngoc Quan

Page 81: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions

3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)5. user interfaces: Emacs, web, curses(?)6. larger, more robust build farm...7. less dog food...8. more packages...9. your idea here

Page 82: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)5. user interfaces: Emacs, web, curses(?)6. larger, more robust build farm...7. less dog food...8. more packages...9. your idea here

Page 83: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)

5. user interfaces: Emacs, web, curses(?)6. larger, more robust build farm...7. less dog food...8. more packages...9. your idea here

Page 84: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)5. user interfaces: Emacs, web, curses(?)

6. larger, more robust build farm...7. less dog food...8. more packages...9. your idea here

Page 85: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)5. user interfaces: Emacs, web, curses(?)6. larger, more robust build farm...7. less dog food...8. more packages...

9. your idea here

Page 86: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

the road to 1.0

0. official FSDG compliance1. OS features: dm-crypt, LVM, etc.2. more service definitions3. improved guix system reconfigure

4. authenticated guix pull (signed commits?)5. user interfaces: Emacs, web, curses(?)6. larger, more robust build farm...7. less dog food...8. more packages...9. your idea here

Page 87: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

I install the distributionI use it, report bugs, add packagesI help with the infrastructure + adminI share your ideas!

your help needed!

Page 88: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

[email protected] http://gnu.org/software/guix/

Page 89: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

credits

I GNU Guix logo, GFDL, http://gnu.org/s/guix/graphics

I NSA SIGDEV slide, http://www.heise.de/ct/artikel/NSA-GCHQ-The-HACIENDA-Program-for-Internet-Colonization-2292681.

html

I dog food, http://en.wikipedia.org/wiki/File:Kibbles_How_Others_See_Me.jpg

I commit stats & project summary,http://www.ohloh.net/p/gnuguix

Page 90: We're building the GNU system! · (package-inputs guile-2.0))))) $ guix build -e ’ ... even better (left as an exercise to the audience) 1. iterate over the packages with fold-packages

Copyright c© 2010, 2012, 2013, 2014 Ludovic Courtes [email protected] 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 copyof this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to CreativeCommons, 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 theGNU Free Documentation License, Version 1.3 or any later version published by the Free SoftwareFoundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of thelicense 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.