Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` [email protected] FOSDEM 2 February...

88
Growing a GNU with Guix Ludovic Court ` es [email protected] FOSDEM 2 February 2014, Brussels

Transcript of Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` [email protected] FOSDEM 2 February...

Page 1: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Growing a GNU with Guix

Ludovic [email protected]

FOSDEM2 February 2014, Brussels

Page 2: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Howdy!

( )guile

NixOS

Page 3: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Howdy!

( )guileNixOS

Page 4: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Howdy!

( )guileNixOS

Page 5: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the “GNU system”,30 years later

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

Page 6: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the “GNU system”,30 years later

I protect & enhance computing freedom

I improve integration of GNU software, consistencyI improve workflow among GNU hacker & users

Page 7: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the “GNU system”,30 years later

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

Page 8: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

team leader, GNU marketing dept.

Page 9: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Dependable. Hackable. Liberating.

Page 10: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Dependable.

Page 11: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

per-user, transactional package installation etc.

alice@foo$ guix package --install=gcc

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

/nix/store/...-glibc-2.17

/nix/store/...-gcc-4.8.0

...

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

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

/nix/store/...-glibc-2.13

/nix/store/...-gcc-4.7.3

...

demo!

Page 12: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transparent binary/source deployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

The following files will be downloaded:

/nix/store/...-emacs-24.3

/nix/store/...-libxpm-3.5.10

/nix/store/...-libxext-1.3.1

/nix/store/...-libxaw-1.0.11

Page 13: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transparent binary/source deployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

The following files will be downloaded:

/nix/store/...-libxext-1.3.1

/nix/store/...-libxaw-1.0.11

The following derivations will be built:

/nix/store/...-emacs-24.3.drv

/nix/store/...-libxpm-3.5.10.drv

Page 14: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transactional upgrades

$ guix package --upgrade

The following packages will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

gdb-7.6 out /nix/store/...-gdb-7.6

geiser-0.4 out /nix/store/...-geiser-0.4

glibc-2.17 out /nix/store/...-glibc-2.17

guile-2.0.9 out /nix/store/...-guile-2.0.9

...

(interrupted right in the middle)

$ emacs --version ; guile --version

GNU Emacs

guile (GNU Guile)

Page 15: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transactional upgrades

$ guix package --upgrade

The following packages will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

gdb-7.6 out /nix/store/...-gdb-7.6

geiser-0.4 out /nix/store/...-geiser-0.4

glibc-2.17 out /nix/store/...-glibc-2.17

guile-2.0.9 out /nix/store/...-guile-2.0.9

...

(interrupted right in the middle)

$ emacs --version ; guile --version

GNU Emacs 24.3.1

guile (GNU Guile) 2.0.9

Page 16: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transactional upgrades

$ guix package --upgrade

The following packages will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

gdb-7.6 out /nix/store/...-gdb-7.6

geiser-0.4 out /nix/store/...-geiser-0.4

glibc-2.17 out /nix/store/...-glibc-2.17

guile-2.0.9 out /nix/store/...-guile-2.0.9

...

(interrupted right in the middle)

$ emacs --version ; guile --version

GNU Emacs

guile (GNU Guile)

Page 17: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transactional upgrades

$ guix package --upgrade

The following packages will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

gdb-7.6 out /nix/store/...-gdb-7.6

geiser-0.4 out /nix/store/...-geiser-0.4

glibc-2.17 out /nix/store/...-glibc-2.17

guile-2.0.9 out /nix/store/...-guile-2.0.9

...

(interrupted right in the middle)

$ emacs --version ; guile --version

GNU Emacs 23.2

guile (GNU Guile) 1.8.8

Page 18: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

transactional upgrades

$ guix package --upgrade

The following packages will be installed:

emacs-24.3 out /nix/store/...-emacs-24.3

gdb-7.6 out /nix/store/...-gdb-7.6

geiser-0.4 out /nix/store/...-geiser-0.4

glibc-2.17 out /nix/store/...-glibc-2.17

guile-2.0.9 out /nix/store/...-guile-2.0.9

...

(interrupted right in the middle)

$ emacs --version ; guile --version

GNU Emacs 23.2

guile (GNU Guile) 1.8.8

Page 19: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

42

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

Page 20: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

42

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

aqn3wygq9jzk...-openssh-5.2p1bin

ssh

guix package --upgrade=openssh

Page 21: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

42

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshicecat

guix package --upgrade=openssh

Page 22: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

42

43

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshicecat

guix package --upgrade=openssh

Page 23: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

42

43

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshicecat

guix package --upgrade=openssh

Page 24: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

43

/nix/storepp56i0a01si5...-user-env

binicecatssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-icecat-3.5.4

binicecat

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshicecat

Page 25: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$PATH

/nix/.../profiles

current

43

/nix/store

rpdqxnilb0cg...-icecat-3.5.4bin

icecataqn3wygq9jzk...-openssh-5.2p1

binssh

i3d9vh6d8ip1...-user-envbin

sshicecat

guix gc

Page 26: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

rollback

$ emacs --version

GNU Emacs 24.2

$ guix package --upgrade=emacs

The following packages will be installed:

emacs-24.3.1 out /nix/store/...-emacs-24.3.1

...

$ emacs --version

Segmentation Fault

$ guix package --roll-back

switching from generation 43 to 42

$ emacs --version

GNU Emacs 24.2

demo!

Page 27: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Hackable.

Page 28: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

<project xmlns="http://guix.gnu.org/POM/0.0.1"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://guix.gnu.org/POM/0.0.1

http://guix.gnu.org/xsd/guix-0.0.1.xsd">

<modelVersion>0.0.1</modelVersion>

<!-- The Basics -->

<groupId>...</groupId>

<artifactId>...</artifactId>

<version>...</version>

<packaging>...</packaging>

<dependencies>...</dependencies>

<parent>...</parent>

<dependencyManagement>...</dependencyManagement>

<modules>...</modules>

<properties>...</properties>

<!-- Build Settings -->

<build>...</build>

<reporting>...</reporting>

<!-- More Project Information -->

<name>...</name>

<description>...</description>

<url>...</url>

<inceptionYear>...</inceptionYear>

<licenses>...</licenses>

<organization>...</organization>

<developers>...</developers>

<contributors>...</contributors>

Page 29: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

{

"name": "http-server",

"preferGlobal": true,

"version": "0.3.0",

"description": "a simple zero-configuration command-line http server",

"bin": {

"http-server": "./bin/http-server"

},

"scripts": {

"start": "node ./bin/http-server",

"test": "vows --spec --isolate",

},

"main": "./lib/http-server",

"dependencies" : {

"colors" : "*",

"flatiron" : "0.1.x",

"optimist" : "0.2.x",

},

"license": "MIT",

"engines": {

"node": ">=0.6"

}

Page 30: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect
Page 31: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 32: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(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 33: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 34: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 35: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 36: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(use-modules (guix packages) (guix store)

(gnu packages base))

(define store

(open-connection))

(package? hello)

=> #t

(define drv (package-derivation store hello))

drv

=> "/nix/store/xyz...-hello-2.8.drv"

(build-derivations (list drv))

... daemon builds/downloads package on our behalf...=> "/nix/store/pqr...-hello-2.8"

Emacs +Geiser demo!

Page 37: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(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 38: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(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 39: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

Page 40: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

/nix/store/...-foo-1.0

test

Page 41: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

/nix/store/...-foo-1.0

git push git.sv.gnu.org

test

Page 42: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

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

build farm

git push git.sv.gnu.org

test

pull

pull

Page 43: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

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

build farm

git push git.sv.gnu.org

test

pull

pull

get binary

Page 44: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

/nix/store/...-foo-1.0

git push git.sv.gnu.org

test

pull

Page 45: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

workflow

(define foo (package ...)) user

guix build foo

/nix/store/...-foo-1.0

git push git.sv.gnu.org

test

no “maintainer

uploads”

no singlepoint of trust

Page 46: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

boot time!

Page 47: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(users (list (user-account

(name "ludo")

(uid 1000) (gid 100)

(comment "Hello, this is me!")

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

(packages (list coreutils bash grep sed

findutils inetuils

guile-2.0

dmd guix

procps psmisc

zile less))))

Page 48: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(initrd (qemu-initrd))

(users (list (user-account

(name "ludo")

(uid 1000) (gid 100)

(comment "Hello, this is me!")

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

(packages (list coreutils bash grep sed

findutils inetuils

guile-2.0

dmd guix

procps psmisc

zile less))))

Page 49: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(initrd (expression->initrd ...))(users (list (user-account

(name "ludo")

(uid 1000) (gid 100)

(comment "Hello, this is me!")

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

(packages (list coreutils bash grep sed

findutils inetuils

guile-2.0

dmd guix

procps psmisc

zile less))))

Page 50: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(expression->initrd

’(begin

(mkdir "/proc")

(mount "none" "/proc" "proc")

;; Load Linux kernel modules.

(let ((slurp (lambda (module)

(call-with-input-file

(string-append "/modules/" module)

get-bytevector-all))))

(for-each (compose load-linux-module slurp)

(list "md4.ko" "ecb.ko" "cifs.ko")))

;; Turn eth0 up.

(let ((sock (socket AF_INET SOCK_STREAM 0)))

(set-network-interface-flags sock "eth0" IFF_UP))

;; At last, the warm and friendly REPL.

(start-repl)))

boot to Guile!

Page 51: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(users (list (user-account

(name "ludo")

(uid 1000) (gid 100)

(comment "Hello, this is me!")

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

(packages (list coreutils bash grep sed

...))))

Page 52: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

(define my-config

(operating-system

(host-name "gnubox")

(timezone "Europe/Paris")

(locale "en US.UTF-8")

(services

(list (mingetty-service "tty1"

#:motd (text-file "motd" "This is tty One."))

(mingetty-service "tty2")

(syslog-service)

(nscd-service)))

(users (list (user-account

(name "ludo")

(uid 1000) (gid 100)

(comment "Hello, this is me!")

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

(packages (list coreutils bash grep sed

...))))

Page 53: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

# deco status dmd

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

Stopped: ()

# deco stop nscd

Service nscd has been stopped

PID 1 isGNU dmd!

Page 54: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 55: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 56: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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 57: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Liberating.

Page 58: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect
Page 59: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

The “Correspo

nding Source” f

or

a work in object

code formmeans

all thesource

code needed

to

generate, insta

ll, and (for an ex

-

ecutable work)

run theobject c

ode

and tomodify th

e work,includin

g

scripts to contro

l those activities

.

Page 60: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

The “Correspo

nding Source” f

or

a work in object

code formmeans

all thesource

code needed

to

generate, insta

ll, and (for an ex

-

ecutable work)

run theobject c

ode

and tomodify th

e work,includin

g

scripts to contro

l those activities

.

Guix users get theCorresponding Source

Page 61: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

hello-2.3.drv

default-builder.sh

bash-4.0-p17.drv

bison-2.3.drv

gnum4-1.4.13.drv

curl-7.19.4.drv

openssl-0.9.8k.drv

zlib-1.2.3.drvperl-5.10.0.drv

binutils-2.19.1.drv

texinfo-4.13a.drv gmp-4.3.1.drv

mpfr-2.4.1.drv

lzma-4.32.7.drvncurses-5.7.drv gnum4-1.4.13.drv

linux-headers-2.6.28.5.drv

perl-5.10.0.drv

gawk-3.1.6.drv

coreutils-7.2.drv

gnupatch-2.5.4.drv gnutar-1.22.drv

findutils-4.4.1.drv

replace-2.24.drv gnused-4.1.5.drv gnumake-3.81.drv

diffutils-2.8.1.drv

gnugrep-2.5.4.drv

patchelf-0.4.drv gzip-1.3.12.drv

acl-2.2.47.drv

attr-2.4.43.drv

gettext-0.17.drv

libtool-2.2.6a.drv

perl-5.10.0.drvlzma-4.32.7.drvpcre-7.8.drv

bootstrap-glibc.drv

hello-2.3.tar.bz2.drv

stdenv-linux.drv

mirrors-list.drv

gcc-wrapper-4.3.3.drv

bash40-006.drv bash40-002.drvbash-4.0.tar.gz.drv

stdenv-linux-boot.drv

bzip2-1.0.5.drv

bash40-009.drv

bootstrap-tools.drv

bash40-012.drv bash40-008.drvbash40-013.drv bash40-007.drvbash40-003.drvbash40-001.drvbash40-017.drv bash40-015.drv bash40-005.drvbash40-016.drv bash40-010.drv bash40-004.drv bash40-014.drvbash40-011.drv

mirrors-list.drv

stdenv-linux-boot.drv

bison-2.3.tar.bz2.drv

gcc-wrapper-4.3.3.drv

m4-1.4.13.tar.bz2.drv curl-7.19.4.tar.bz2.drvopenssl-0.9.8k.tar.gz.drvperl-5.10.0.tar.gz.drv zlib-1.2.3.tar.gz.drv

gcc-4.3.3.drv

glibc-2.9.drv

gcc-core-4.3.3.tar.bz2.drv

stdenv-linux-boot.drv

gcc-g++-4.3.3.tar.bz2.drvtexinfo-4.13a.tar.lzma.drvgmp-4.3.1.tar.bz2.drv lzma-4.32.7.tar.gz.drvncurses-5.7.tar.gz.drvglibc-2.9-20081208.tar.bz2.drv

stdenv-linux-boot.drv

bootstrap-gcc.drv

bootstrap-gcc.drv

linux-2.6.28.5.tar.bz2.drv gawk-3.1.6.tar.bz2.drvcoreutils-7.2.tar.gz.drvbzip2-1.0.5.tar.gz.drv patch-2.5.4.tar.gz.drvacl_2.2.47-1.tar.gz.drvattr_2.4.43-1.tar.gz.drv tar-1.22.tar.bz2.drvgettext-0.17.tar.gz.drv findutils-4.4.1.tar.gz.drvreplace-2.24-src-11.11.tar.gz.drvsed-4.1.5.tar.gz.drv libtool-2.2.6a.tar.lzma.drv make-3.81.tar.bz2.drvdiffutils-2.8.1.tar.gz.drvmpfr-2.4.1.tar.bz2.drv grep-2.5.4.tar.bz2.drvpcre-7.8.tar.bz2.drvbinutils-2.19.1.tar.bz2.drv patchelf-0.4.tar.bz2.drv gzip-1.3.12.tar.gz.drv

builder.sh

prehook.sh builder.sh setup.sh

bzip2

bootstrap-tools.cpio.bz2.drv unpack-bootstrap-tools.sh

mkdir curl.bz2 cpio sh

write-mirror-list.sh

connect-timeout.patch

no-sys-dirs.patch setup-hook.sh

builder.sh ld-wrapper.sh gcc-wrapper.shutils.sh setup-hook.sh add-flags

pass-cxxcpp.patch builder.sh no-sys-dirs.patch

locale-override.patch rpcgen-path.patchbuilder.sh nss-skip-unavail.patch

prehook.sh

builder.sh implausible.patch

findutils-path.patch change_echo_path.patch

malloc.patch gettext-fix.patch impure-dirs.patchlog.patch

new-dtags.patch

gnulib-futimens.patch

download.sh ln

build-time dependencies of GNU Hello

Page 62: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

hello-2.3.drv

default-builder.sh

bash-4.0-p17.drv

bison-2.3.drv

gnum4-1.4.13.drv

curl-7.19.4.drv

openssl-0.9.8k.drv

zlib-1.2.3.drvperl-5.10.0.drv

binutils-2.19.1.drv

texinfo-4.13a.drv gmp-4.3.1.drv

mpfr-2.4.1.drv

lzma-4.32.7.drvncurses-5.7.drv gnum4-1.4.13.drv

linux-headers-2.6.28.5.drv

perl-5.10.0.drv

gawk-3.1.6.drv

coreutils-7.2.drv

gnupatch-2.5.4.drv gnutar-1.22.drv

findutils-4.4.1.drv

replace-2.24.drv gnused-4.1.5.drv gnumake-3.81.drv

diffutils-2.8.1.drv

gnugrep-2.5.4.drv

patchelf-0.4.drv gzip-1.3.12.drv

acl-2.2.47.drv

attr-2.4.43.drv

gettext-0.17.drv

libtool-2.2.6a.drv

perl-5.10.0.drvlzma-4.32.7.drvpcre-7.8.drv

bootstrap-glibc.drv

hello-2.3.tar.bz2.drv

stdenv-linux.drv

mirrors-list.drv

gcc-wrapper-4.3.3.drv

bash40-006.drv bash40-002.drvbash-4.0.tar.gz.drv

stdenv-linux-boot.drv

bzip2-1.0.5.drv

bash40-009.drv

bootstrap-tools.drv

bash40-012.drv bash40-008.drvbash40-013.drv bash40-007.drvbash40-003.drvbash40-001.drvbash40-017.drv bash40-015.drv bash40-005.drvbash40-016.drv bash40-010.drv bash40-004.drv bash40-014.drvbash40-011.drv

mirrors-list.drv

stdenv-linux-boot.drv

bison-2.3.tar.bz2.drv

gcc-wrapper-4.3.3.drv

m4-1.4.13.tar.bz2.drv curl-7.19.4.tar.bz2.drvopenssl-0.9.8k.tar.gz.drvperl-5.10.0.tar.gz.drv zlib-1.2.3.tar.gz.drv

gcc-4.3.3.drv

glibc-2.9.drv

gcc-core-4.3.3.tar.bz2.drv

stdenv-linux-boot.drv

gcc-g++-4.3.3.tar.bz2.drvtexinfo-4.13a.tar.lzma.drvgmp-4.3.1.tar.bz2.drv lzma-4.32.7.tar.gz.drvncurses-5.7.tar.gz.drvglibc-2.9-20081208.tar.bz2.drv

stdenv-linux-boot.drv

bootstrap-gcc.drv

bootstrap-gcc.drv

linux-2.6.28.5.tar.bz2.drv gawk-3.1.6.tar.bz2.drvcoreutils-7.2.tar.gz.drvbzip2-1.0.5.tar.gz.drv patch-2.5.4.tar.gz.drvacl_2.2.47-1.tar.gz.drvattr_2.4.43-1.tar.gz.drv tar-1.22.tar.bz2.drvgettext-0.17.tar.gz.drv findutils-4.4.1.tar.gz.drvreplace-2.24-src-11.11.tar.gz.drvsed-4.1.5.tar.gz.drv libtool-2.2.6a.tar.lzma.drv make-3.81.tar.bz2.drvdiffutils-2.8.1.tar.gz.drvmpfr-2.4.1.tar.bz2.drv grep-2.5.4.tar.bz2.drvpcre-7.8.tar.bz2.drvbinutils-2.19.1.tar.bz2.drv patchelf-0.4.tar.bz2.drv gzip-1.3.12.tar.gz.drv

builder.sh

prehook.sh builder.sh setup.sh

bzip2

bootstrap-tools.cpio.bz2.drv unpack-bootstrap-tools.sh

mkdir curl.bz2 cpio sh

write-mirror-list.sh

connect-timeout.patch

no-sys-dirs.patch setup-hook.sh

builder.sh ld-wrapper.sh gcc-wrapper.shutils.sh setup-hook.sh add-flags

pass-cxxcpp.patch builder.sh no-sys-dirs.patch

locale-override.patch rpcgen-path.patchbuilder.sh nss-skip-unavail.patch

prehook.sh

builder.sh implausible.patch

findutils-path.patch change_echo_path.patch

malloc.patch gettext-fix.patch impure-dirs.patchlog.patch

new-dtags.patch

gnulib-futimens.patch

download.sh ln

bootstrap binaries

Page 63: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

hello-2.3.drv

default-builder.sh

bash-4.0-p17.drv

bison-2.3.drv

gnum4-1.4.13.drv

curl-7.19.4.drv

openssl-0.9.8k.drv

zlib-1.2.3.drvperl-5.10.0.drv

binutils-2.19.1.drv

texinfo-4.13a.drv gmp-4.3.1.drv

mpfr-2.4.1.drv

lzma-4.32.7.drvncurses-5.7.drv gnum4-1.4.13.drv

linux-headers-2.6.28.5.drv

perl-5.10.0.drv

gawk-3.1.6.drv

coreutils-7.2.drv

gnupatch-2.5.4.drv gnutar-1.22.drv

findutils-4.4.1.drv

replace-2.24.drv gnused-4.1.5.drv gnumake-3.81.drv

diffutils-2.8.1.drv

gnugrep-2.5.4.drv

patchelf-0.4.drv gzip-1.3.12.drv

acl-2.2.47.drv

attr-2.4.43.drv

gettext-0.17.drv

libtool-2.2.6a.drv

perl-5.10.0.drvlzma-4.32.7.drvpcre-7.8.drv

bootstrap-glibc.drv

hello-2.3.tar.bz2.drv

stdenv-linux.drv

mirrors-list.drv

gcc-wrapper-4.3.3.drv

bash40-006.drv bash40-002.drvbash-4.0.tar.gz.drv

stdenv-linux-boot.drv

bzip2-1.0.5.drv

bash40-009.drv

bootstrap-tools.drv

bash40-012.drv bash40-008.drvbash40-013.drv bash40-007.drvbash40-003.drvbash40-001.drvbash40-017.drv bash40-015.drv bash40-005.drvbash40-016.drv bash40-010.drv bash40-004.drv bash40-014.drvbash40-011.drv

mirrors-list.drv

stdenv-linux-boot.drv

bison-2.3.tar.bz2.drv

gcc-wrapper-4.3.3.drv

m4-1.4.13.tar.bz2.drv curl-7.19.4.tar.bz2.drvopenssl-0.9.8k.tar.gz.drvperl-5.10.0.tar.gz.drv zlib-1.2.3.tar.gz.drv

gcc-4.3.3.drv

glibc-2.9.drv

gcc-core-4.3.3.tar.bz2.drv

stdenv-linux-boot.drv

gcc-g++-4.3.3.tar.bz2.drvtexinfo-4.13a.tar.lzma.drvgmp-4.3.1.tar.bz2.drv lzma-4.32.7.tar.gz.drvncurses-5.7.tar.gz.drvglibc-2.9-20081208.tar.bz2.drv

stdenv-linux-boot.drv

bootstrap-gcc.drv

bootstrap-gcc.drv

linux-2.6.28.5.tar.bz2.drv gawk-3.1.6.tar.bz2.drvcoreutils-7.2.tar.gz.drvbzip2-1.0.5.tar.gz.drv patch-2.5.4.tar.gz.drvacl_2.2.47-1.tar.gz.drvattr_2.4.43-1.tar.gz.drv tar-1.22.tar.bz2.drvgettext-0.17.tar.gz.drv findutils-4.4.1.tar.gz.drvreplace-2.24-src-11.11.tar.gz.drvsed-4.1.5.tar.gz.drv libtool-2.2.6a.tar.lzma.drv make-3.81.tar.bz2.drvdiffutils-2.8.1.tar.gz.drvmpfr-2.4.1.tar.bz2.drv grep-2.5.4.tar.bz2.drvpcre-7.8.tar.bz2.drvbinutils-2.19.1.tar.bz2.drv patchelf-0.4.tar.bz2.drv gzip-1.3.12.tar.gz.drv

builder.sh

prehook.sh builder.sh setup.sh

bzip2

bootstrap-tools.cpio.bz2.drv unpack-bootstrap-tools.sh

mkdir curl.bz2 cpio sh

write-mirror-list.sh

connect-timeout.patch

no-sys-dirs.patch setup-hook.sh

builder.sh ld-wrapper.sh gcc-wrapper.shutils.sh setup-hook.sh add-flags

pass-cxxcpp.patch builder.sh no-sys-dirs.patch

locale-override.patch rpcgen-path.patchbuilder.sh nss-skip-unavail.patch

prehook.sh

builder.sh implausible.patch

findutils-path.patch change_echo_path.patch

malloc.patch gettext-fix.patch impure-dirs.patchlog.patch

new-dtags.patch

gnulib-futimens.patch

download.sh ln

bootstrap binaries

canw

eclose

theloop?

Page 64: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build bootstrap-tarballs

/nix/store/...-bootstrap-tarballs-0

porting to new arches:

$ guix build bootstrap-tarballs \

--target=mips64el-linux-gnuabi64

Page 65: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build bootstrap-tarballs

/nix/store/...-bootstrap-tarballs-0

porting to new arches:

$ guix build bootstrap-tarballs \

--target=mips64el-linux-gnuabi64

Page 66: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Does this binary correspondto that source?

Page 67: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build guile

/nix/store/ h2g4sc09h4... -guile-2.0.9

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

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

/nix/store/iplay43cg58...-libunistring-0.9.3

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

/nix/store/drkwck2j965...-gmp-5.0.5

...

Page 68: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build guile

/nix/store/ h2g4sc09h4... -guile-2.0.9

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

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

/nix/store/iplay43cg58...-libunistring-0.9.3

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

/nix/store/drkwck2j965...-gmp-5.0.5

...

hash of all the dependencies

Page 69: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build guile

/nix/store/ h2g4sc09h4... -guile-2.0.9

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

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

/nix/store/iplay43cg58...-libunistring-0.9.3

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

/nix/store/drkwck2j965...-gmp-5.0.5

...

Page 70: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

$ guix build guile

/nix/store/ h2g4sc09h4... -guile-2.0.9

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

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

/nix/store/iplay43cg58...-libunistring-0.9.3

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

/nix/store/drkwck2j965...-gmp-5.0.5

...

(nearly) bit-identical for everyone

Page 71: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

controlled build environment

1. one directory per installed package2. immutable installation directories3. undeclared dependencies invisible to the build process4. isolated build: chroot, container, etc.

Page 72: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect
Page 73: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

do not trust a singlebinary provider

Deterministic Builds: Integrity

through Decentralization

– Mike Perry

Page 74: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

do not trust a singlebinary provider

Deterministic Builds: Integrity

through Decentralization

– Mike Perry

Page 75: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Lively!

Page 76: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Shipping is a feature.A really important feature.

– Joel Spolsky

Page 77: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

timeline

I July 2012 — GHM, DusseldorfI Nov. 2012 — dubbed GNUI Jan. 2013 — 0.1I Feb. 2013 — Boot-to-GuileI May 2013 — 0.2I June 2013 — European Lisp SymposiumI July 2013 — 0.3, cross-compilation, debug info, etc.I 27 Sep. 2013 — 0.4, with VM imageI Dec. 2013 — GNU dmd 0.1I Dec. 2013 — 0.5, system config, mips64, 600 packages

Page 78: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

status

I full-featured package managerI self-contained distro, 600+ packages, 3 platformsI binaries built & served at http://hydra.gnu.orgI tooling: auto-update, sync descriptions with GNU, etc.I l10n: 4 languages!

Page 79: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect
Page 80: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect
Page 81: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

thanks for the code, bug reports, and ideas!

I Eric Bavier, John Darrington, Eelco Dolstra & the Nix crew,Andreas Enge, Guy Grant, Nikita Karetnikov, AljoshaPapsch, Cyril Roelandt, Alex Sassmannshausen, SreeHarsha Totakura, David Thompson, Mark H. Weaver

I Lluıs Batlle i Rossell, Felipe Castro, Daniel Clark,Alexandru Cojocaru, Aleix Conchillo Flaque, RafaelFerreira, Christian Grothoff, Jeffrin Jose, Kete, MatthewLien, Niels Moller, Yutaka Niibe, Cyrill Schenkel, JasonSelf, Alen Skondro, Matthias Wachs, Zerwas

Page 82: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the road to 1.0

1. simple installer ISO image (real soon)

2. infrastructure: get a real build farm3. packages, packages, packages!

Page 83: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the road to 1.0

1. simple installer ISO image (real soon)2. infrastructure: get a real build farm

3. packages, packages, packages!

Page 84: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

the road to 1.0

1. simple installer ISO image (real soon)2. infrastructure: get a real build farm3. packages, packages, packages!

Page 85: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

I install Guix atop your current distroI use it, report bugs, add packagesI help with the infrastructure + adminI share your ideas!

your help needed!

Page 86: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

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

Page 87: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

credits

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

I “GNU marketing dept.” picture by the Free Software Foundation,http://www.fsf.org/news/

gnu-comes-bearing-gifts-draws-shoppers-from-windows-store

I “Lisp is over half a century old”, http://xkcd.com/297/

I “Run free, run GNU”, GFDL,http://www.gnu.org/graphics/runfreegnu.html

I Stallman & Assange, http://ergoemacs.org/emacs/i/Richard_Stallman_and_Julian_Assange_2013-07-12.jpg

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

Page 88: Growing a GNU with Guix · Growing a GNU with Guix Ludovic Courtes` ludo@gnu.org FOSDEM 2 February 2014, Brussels. Howdy! Howdy! Howdy! the “GNU system”, 30 years later I protect

Copyright c© 2010, 2012, 2013, 2014 Ludovic Courtes [email protected] of user environments is:Copyright c© 2009 Eelco Dolstra [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.