Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix...

71
Reproducible Software Deployment with GNU Guix Ludovic Court ` es Inria Rennes Bretagne Atlantique, November 2015

Transcript of Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix...

Page 1: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Reproducible SoftwareDeployment with GNU Guix

Ludovic Courtes

Inria Rennes Bretagne Atlantique, November 2015

Page 2: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

The difficulty of keepingsoftware environmentsunder control.

Page 3: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

#1. Upgrades are hard.

Page 4: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 5: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 6: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

#2. Stateful systemmanagement is intractable.

Page 7: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$DISTRO $DISTRO

Page 8: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$DISTRO $DISTRO

state 1a state 1b

apt-get update apt-get update

Page 9: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$DISTRO $DISTRO

state 1a state 1b

state 2a state 2b

apt-get update

apt-get install foo

apt-get update

apt-get remove bar

Page 10: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$DISTRO $DISTRO

state 1a state 1b

state 2a state 2b

state 3a state 3b

apt-get update

apt-get install foo

apt-get remove bar

apt-get update

apt-get remove bar

apt-get install foo

Page 11: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$DISTRO $DISTRO

state 1a state 1b

state 2a state 2b

state 3a state 3b

apt-get update

apt-get install foo

apt-get remove bar

apt-get update

apt-get remove bar

apt-get install foo

= ?

Page 12: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

#3. It’s worse than this.

Page 13: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 14: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

It’s worse, really.

Page 15: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

“Let’s Package jQuery: A Javascript PackagingDystopian Novella” by Chris Webber

http://dustycloud.org/blog/

javascript-packaging-dystopia/

Page 16: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Giving up?

→ “app bundles” (Docker images)

Page 17: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Giving up?

→ “app bundles” (Docker images)

Page 18: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 19: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 20: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Functional packagemanagement.

Page 21: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

openmpi = f (hwloc, gcc, make, coreutils)

hwloc = g(pciaccess, gcc, make, coreutils)gcc = h(make, coreutils, gcc0)...

where f = ./configure && make && make install

Page 22: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

openmpi = f (hwloc, gcc, make, coreutils)hwloc = g(pciaccess, gcc, make, coreutils)

gcc = h(make, coreutils, gcc0)...where f = ./configure && make && make install

Page 23: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

openmpi = f (hwloc, gcc, make, coreutils)hwloc = g(pciaccess, gcc, make, coreutils)gcc = h(make, coreutils, gcc0)...

where f = ./configure && make && make install

Page 24: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

openmpi = f (hwloc, gcc, make, coreutils)hwloc = g(pciaccess, gcc, make, coreutils)gcc = h(make, coreutils, gcc0)...

where f = ./configure && make && make install

the complete DAG is captured

Page 25: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

I A Safe and Policy-Free System for SoftwareDeployment, Dolstra et al., 2003Nix, http://nixos.org/nix/

I Functional Package Management with Guix,Courtes, 2013

Page 26: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define hello

(package

(name "hello")

(version "2.10")

(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, world!")

(description "Produce a friendly greeting.")

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

(license gpl3+)))

Page 27: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile Scheme

(guix packages)

(guix store)

build daemon

Page 28: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile Scheme

(guix packages)

(guix store)

build daemon RPCs

Page 29: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

build processeschroot, separate UIDs

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc.

Gui

le,m

ake,

etc. Guile Scheme

(guix packages)

(guix store)

build daemon RPCs

Page 30: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix build hello

/gnu/store/ h2g4sf72... -hello-2.10

$ guix gc --references /gnu/store/...-hello-2.10/gnu/store/...-glibc-2.22/gnu/store/...-gcc-4.9.3-lib/gnu/store/...-hello-2.10

isolated build: chroot, separate name spaces, etc.

Page 31: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix build hello

/gnu/store/ h2g4sf72... -hello-2.10

$ guix gc --references /gnu/store/...-hello-2.10/gnu/store/...-glibc-2.22/gnu/store/...-gcc-4.9.3-lib/gnu/store/...-hello-2.10

hash of all the dependencies

Page 32: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix build hello

/gnu/store/ h2g4sf72... -hello-2.10

$ guix gc --references /gnu/store/...-hello-2.10/gnu/store/...-glibc-2.22/gnu/store/...-gcc-4.9.3-lib/gnu/store/...-hello-2.10

Page 33: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix build hello

/gnu/store/ h2g4sf72... -hello-2.10

$ guix gc --references /gnu/store/...-hello-2.10/gnu/store/...-glibc-2.22/gnu/store/...-gcc-4.9.3-lib/gnu/store/...-hello-2.10(nearly) bit-identical for everyone

Page 34: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix package -i gcc-toolchain coreutils sed grep

...

$ eval ‘guix package --search-paths‘

...

$ guix package --manifest=my-software.scm

...

demo

Page 35: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Want your PhD student tohack on GNUnet?

A simple matter of installing the deps, right?

Page 36: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Want your PhD student tohack on GNUnet?

A simple matter of installing the deps, right?

Page 37: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

gnunet-0.10.1

pkg-config-0.28

python-2.7.10

glpk-4.56

gnurl-7.45.0

gnutls-3.4.5

libextractor-1.3

libgcrypt-1.6.3

libidn-1.32

libmicrohttpd-0.9.45

libltdl-2.4.6libunistring-0.9.6

openssl-1.0.2d

opus-1.1

pulseaudio-6.0

sqlite-3.8.11.1

zlib-1.2.7

bzip2-1.0.6 gdbm-1.11libffi-3.1

readline-6.3 tcl-8.6.4

tk-8.6.4gmp-6.0.0a

perl-5.16.1

groff-1.22.3

texinfo-6.0

which-2.21guile-2.0.11libtasn1-4.5 nettle-3.1.1 libtiff-4.0.5

libjpeg-9a

exiv2-0.23

flac-1.3.1

ffmpeg-2.8

file-5.22

glib-2.46.1

gstreamer-1.6.1

gst-plugins-base-1.6.1

libogg-1.3.2

libvorbis-1.3.5

libgpg-error-1.19

curl-7.45.0

m4-1.4.17

speex-1.2rc1

dbus-1.10.0

libcap-2.24

eudev-3.1.5

alsa-lib-1.0.27.1json-c-0.12

libsndfile-1.0.25

libsamplerate-0.1.8

intltool-0.51.0

fftwf-3.3.4

avahi-0.6.31 check-0.9.14

ncurses-6.0

libxft-2.3.2

fontconfig-2.11.94

libx11-1.6.2

libxext-1.3.3

xproto-7.0.26

libxrender-0.9.8

freetype-2.6 gs-fonts-8.11 expat-2.1.0

inputproto-2.3.1xextproto-7.3.0

xtrans-1.3.5

kbproto-1.0.6

libxcb-1.11

libxau-1.0.8

util-macros-1.19.0

renderproto-0.11.1python-wrapper-3.4.3

xcb-proto-1.11libxslt-1.1.28

libpthread-stubs-0.3

libxdmcp-1.1.1

python-minimal-3.4.3

libxml2-2.9.2

bison-3.0.4

psutils-17

ghostscript-9.14.0

netpbm-10.61.01

flex-2.5.37

procps-3.2.8

xz-5.0.4

python-wrapper-3.4.3lcms-2.6

libjpeg-8d

libpng-1.5.21 libpaper-1.1.24

bison-2.7.1 indent-2.2.10

python-3.4.3

bash-4.3.39 libgc-7.4.2

libatomic-ops-7.4.2

bc-1.06

yasm-1.2.0

ladspa-1.13 lame-3.99.5

libass-0.12.1

libbluray-0.9.0

libcaca-0.99.beta19

libcdio-paranoia-10.2+0.93+1

libquvi-0.4.1

libtheora-1.1.1

libvpx-1.4.0 libx264-20150706-2245

openal-1.15.1

soxr-0.1.1

twolame-0.3.13

xvid-1.3.3

gettext-0.19.6

coreutils-8.24

tzdata-2015c

gobject-introspection-1.46.0

pango-1.38.1

libxv-1.0.10

cdparanoia-10.2 orc-0.4.24

xmlto-0.0.25

fribidi-0.19.6harfbuzz-1.0.5 enca-1.16

doxygen-1.8.7

texlive-2015

freeglut-3.0.0ftgl-2.1.3-rc5

mesa-11.0.3

libcdio-0.93

cyrus-sasl-2.1.26

libquvi-scripts-0.4.21 lua-5.1.5

util-linux-2.27

net-base-5.3

tar-1.28

cairo-1.14.2

graphite2-1.3.3

icu4c-55.1

recode-3.7.0.201402

libspectre-0.2.7

poppler-0.37.0

pixman-0.32.8

python2-fonttools-2.5

acl-2.2.52

attr-2.4.46

openjpeg-1.5.2

cairo-1.14.2

python2-setuptools-18.3.1

graphviz-2.38.0

texlive-bin-2015

texlive-texmf-2015

gts-0.7.6

gd-2.1.1

libxaw-1.0.12

libxmu-1.1.2 libxpm-3.5.11

libxt-1.1.4

libice-1.0.9

libsm-1.2.2

fontforge-20120731-bmpfr-3.1.3

potrace-1.11

ruby-2.2.3

tcsh-6.18.01

teckit-2.5.4

zziplib-0.13.62

lua-5.2.3

giflib-5.1.1

libxi-1.7.4

libspiro-20071029

libuninameslist-0.4.20140731

autoconf-2.69

automake-1.15

libtool-2.4.6

zip-3.0

libxfixes-5.0.1

fixesproto-5.0

autoconf-wrapper-2.69autoconf-wrapper-2.69

libxrandr-1.4.2libxxf86vm-1.1.3

xinput-1.6.1

glu-9.0.0

dri2proto-2.8 dri3proto-1.0presentproto-1.0

libva-without-mesa-1.6.1

libxvmc-1.0.8

makedepend-1.0.5

s2tc-1.0

glproto-1.4.17

libdrm-2.4.65

libxdamage-1.1.4

libxshmfence-1.1

randrproto-1.4.0

xf86vidmodeproto-2.3.1

libxinerama-1.1.3

gperf-3.0.4kmod-17

mesa-headers-11.0.3

libpciaccess-0.13.4

damageproto-1.2.1

videoproto-2.3.2xineramaproto-1.2.1

help2man-1.47.2

libcddb-1.3.0

gss-1.0.3

libssh2-1.4.3

openldap-2.4.42

mit-krb5-1.11.3

shishi-1.0.2

bdb-5.3.21

linux-pam-1.2.1

libgcrypt-1.5.4

fftw-3.3.4

perl-xml-parser-2.44

libdaemon-0.14

Page 38: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix environment --container gnunet

...

$ guix environment --ad-hoc python-ipython python-numpy \

-E ipython

...

Page 39: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 40: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Whole-systemdeployment.

Page 41: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

Page 42: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

initial RAM disk

Page 43: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

initial RAM disk Guile

Page 44: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

initial RAM disk

PID 1: GNU dmdservices...

Guile

Page 45: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

initial RAM disk

PID 1: GNU dmdservices...

Guile

Guile

Page 46: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Linux-libre

initial RAM disk

PID 1: GNU dmdservices...

applications

Guile

Guile

Page 47: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Trustworthiness.

Page 48: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Debian’s dirtiest secret:Binary packages built by developersare used in the archive

— Lucas Nussbaum, FOSDEM 2015

Page 49: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Transparent binary/sourcedeployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.5 /gnu/store/...-emacs-24.5

The following files will be downloaded:

/gnu/store/...-emacs-24.5

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

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

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

Page 50: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Transparent binary/sourcedeployment

alice@foo$ guix package --install=emacs

The following package will be installed:

emacs-24.5 /gnu/store/...-emacs-24.5

The following files will be downloaded:

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

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

The following derivations will be built:

/gnu/store/...-emacs-24.5.drv

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

Page 51: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

Page 52: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

test

Page 53: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

git push git.sv.gnu.org

test

Page 54: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

build farm

git push git.sv.gnu.org

test

pull

pull

Page 55: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

build farm

git push git.sv.gnu.org

test

pull

pull

get binary

Page 56: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

git push git.sv.gnu.org

test

pull

Page 57: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

(define foo (package ...)) user

guix build foo

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

git push git.sv.gnu.org

test

no “maintainer

uploads”

no singlepoint of trust

Page 58: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

sourcepackage recipes

binaryhydra.gnu.org

(define emacs (package . . . )) /gnu/store/. . . -emacs-24.5

?

Page 59: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

The path to greater user control

1. Bit-reproducible builds

I we have isolated build environments!I ... but we need builds to be deterministicI http://reproducible-builds.org

2. No single binary provider

I guix publishI publish over GNUnet? (GSoC 2015)

3. Tools for users to challenge binaries

Page 60: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

The path to greater user control

1. Bit-reproducible buildsI we have isolated build environments!I ... but we need builds to be deterministicI http://reproducible-builds.org

2. No single binary provider

I guix publishI publish over GNUnet? (GSoC 2015)

3. Tools for users to challenge binaries

Page 61: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

The path to greater user control

1. Bit-reproducible buildsI we have isolated build environments!I ... but we need builds to be deterministicI http://reproducible-builds.org

2. No single binary providerI guix publishI publish over GNUnet? (GSoC 2015)

3. Tools for users to challenge binaries

Page 62: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

The path to greater user control

1. Bit-reproducible buildsI we have isolated build environments!I ... but we need builds to be deterministicI http://reproducible-builds.org

2. No single binary providerI guix publishI publish over GNUnet? (GSoC 2015)

3. Tools for users to challenge binaries

Page 63: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

$ guix challenge --substitute-urls="http://hydra.gnu.org http://guix.example.org"

/gnu/store/...-openssl-1.0.2d contents differ:

local hash: 0725l22...

http://hydra.gnu.org/...-openssl-1.0.2d: 0725l22...

http://guix.example.org/...-openssl-1.0.2d: 1zy4fma...

/gnu/store/...-git-2.5.0 contents differ:

local hash: 00p3bmr...

http://hydra.gnu.org/...-git-2.5.0: 069nb85...

http://guix.example.org/...-git-2.5.0: 0mdqa9w...

/gnu/store/...-pius-2.1.1 contents differ:

local hash: 0k4v3m9...

http://hydra.gnu.org/...-pius-2.1.1: 0k4v3m9...

http://guix.example.org/...-pius-2.1.1: 1cy25x1...

Page 64: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Status.

Page 65: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Timeline

I Nov. 2012 — dubbed GNUI Jan. 2013 — 0.1I ...I Apr. 2014 — 0.6, signed binaries, guix system

I July 2014 — 0.7, installable operating systemI ...I 29 Jan. 2015 — 0.8.1, ARMv7 portI ...I Aug. 2015 — Reproducibility in Parallel Computing

Workshop (RepPar)I 5 Nov. 2015 — 0.9.0, new service framework, etc.

Page 66: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015
Page 67: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Status

I full-featured package managerI 2,600+ packages, 4 platformsI Guix System Distributionβ

I binaries at http://hydra.gnu.orgI tooling: auto-update, “linting”, etc.I l10n: 8 languages!

Page 68: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

I ≈25 contributors each monthI ... and lots of friendly people!I ≈400 commits per monthI ≈200–500 new packages per release

Page 69: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

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

your help needed!

Page 70: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

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

Page 71: Reproducible Software Deployment with GNU Guix · Reproducible Software Deployment with GNU Guix Ludovic Courtes` Inria Rennes Bretagne Atlantique, November 2015

Copyright c© 2010, 2012, 2013, 2014, 2015 Ludovic Courtes [email protected].

GNU Guix logo, GFDL, http://gnu.org/s/guix/graphicsCopyright 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 acopy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter toCreative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

At your option, you may instead copy, distribute and/or modify this document under the terms of 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.