growing a gnu with guix · growing a gnu with guix ludovic courtes` [email protected] fosdem 2 february...
TRANSCRIPT
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/19.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/20.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/21.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/22.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/23.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/24.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/25.jpg)
$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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/28.jpg)
<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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/29.jpg)
{
"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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/30.jpg)
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/32.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/36.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/37.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/38.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/47.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/48.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/49.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/50.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/51.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/52.jpg)
(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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/53.jpg)
# 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/58.jpg)
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/60.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/62.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/63.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/64.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/65.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/66.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/67.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/68.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/69.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/70.jpg)
$ 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/71.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/72.jpg)
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/73.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/74.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/75.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/76.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/77.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/78.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/79.jpg)
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/80.jpg)
![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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/81.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/82.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/83.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/84.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/85.jpg)
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 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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/87.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022060219/5f06bb217e708231d4197374/html5/thumbnails/88.jpg)
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.