diff --git a/.gitignore b/.gitignore
index d290e5f..7928c8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -194,3 +194,12 @@
/talks/bluehats-2019/talk.snm
/talks/bluehats-2019/talk.toc
/talks/bluehats-2019/talk.vrb
+/talks/fosdem-2020/containers/talk.aux
+/talks/fosdem-2020/containers/talk.log
+/talks/fosdem-2020/containers/talk.nav
+/talks/fosdem-2020/containers/talk.out
+/talks/fosdem-2020/containers/talk.pdf
+/talks/fosdem-2020/containers/talk.snm
+/talks/fosdem-2020/containers/talk.toc
+/talks/fosdem-2020/containers/talk.vrb
+/talks/fosdem-2020/containers/talk.dvi
diff --git a/talks/fosdem-2020/containers/images/Git-Logo-2Color.pdf b/talks/fosdem-2020/containers/images/Git-Logo-2Color.pdf
new file mode 120000
index 0000000..5c8de51
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/Git-Logo-2Color.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/Git-Logo-2Color.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/Guix-horizontal-print.pdf b/talks/fosdem-2020/containers/images/Guix-horizontal-print.pdf
new file mode 120000
index 0000000..d2bce8f
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/Guix-horizontal-print.pdf
@@ -0,0 +1 @@
+../../../fosdem-2019/minimalist/images/Guix-horizontal-print.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/Guix-white.pdf b/talks/fosdem-2020/containers/images/Guix-white.pdf
new file mode 120000
index 0000000..151b57b
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/Guix-white.pdf
@@ -0,0 +1 @@
+../../../fosdem-2019/minimalist/images/Guix-white.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/Murner.Nerrenbeschwerung.kind.jpg b/talks/fosdem-2020/containers/images/Murner.Nerrenbeschwerung.kind.jpg
new file mode 100644
index 0000000..7117362
Binary files /dev/null and b/talks/fosdem-2020/containers/images/Murner.Nerrenbeschwerung.kind.jpg differ
diff --git a/talks/fosdem-2020/containers/images/arrow-right.pdf b/talks/fosdem-2020/containers/images/arrow-right.pdf
new file mode 120000
index 0000000..57aea1c
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/arrow-right.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/arrow-right.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.dot b/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.dot
new file mode 100644
index 0000000..f27836d
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.dot
@@ -0,0 +1,137 @@
+digraph "Guix bag" {
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" [label = "make-boot0@4.2.1", shape = box, fontname = Helvetica];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/wmf4y32lq5jrci7q85pgrkq9bckkziqf-gcc-mesboot-wrapper-4.7.4.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/awv71y21ybrr68ygxd154ivaaclj4qg2-bootstrap-mescc-tools-0.5.2.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/fl6qxjcg355pagvngd96gf5nir678cwk-bootstrap-mes-0.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = cyan3];
+ "/gnu/store/xmqfk1h1725w6gbxfpvhdvv71ib9870s-make-boot0-4.2.1.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = cyan3];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" [label = "glibc-mesboot@2.16.0", shape = box, fontname = Helvetica];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = red];
+ "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" -> "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" [color = red];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = magenta];
+ "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = magenta];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" [color = dimgrey];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = dimgrey];
+ "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = dimgrey];
+ "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica];
+ "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" -> "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" [color = red];
+ "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" -> "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" [color = red];
+ "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = red];
+ "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" [label = "mes-boot@0.19", shape = box, fontname = Helvetica];
+ "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" -> "/gnu/store/awv71y21ybrr68ygxd154ivaaclj4qg2-bootstrap-mescc-tools-0.5.2.drv" [color = dimgrey];
+ "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" -> "/gnu/store/fl6qxjcg355pagvngd96gf5nir678cwk-bootstrap-mes-0.drv" [color = dimgrey];
+ "/gnu/store/awv71y21ybrr68ygxd154ivaaclj4qg2-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica];
+ "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica];
+ "/gnu/store/fl6qxjcg355pagvngd96gf5nir678cwk-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica];
+ "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" [label = "tcc-boot0@0.9.26-6.c004e9a", shape = box, fontname = Helvetica];
+ "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" [color = darkviolet];
+ "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/awv71y21ybrr68ygxd154ivaaclj4qg2-bootstrap-mescc-tools-0.5.2.drv" [color = darkviolet];
+ "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkviolet];
+ "/gnu/store/dsn288nnc52x09mswnjs98y366k9brcq-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/fl6qxjcg355pagvngd96gf5nir678cwk-bootstrap-mes-0.drv" [color = darkviolet];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" -> "/gnu/store/cn42d0h7l8zc72sj20xnr3w47za4kw6s-mes-boot-0.19.drv" [color = dimgrey];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" -> "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" [color = dimgrey];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = dimgrey];
+ "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica];
+ "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" -> "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" [color = dimgrey];
+ "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/6wchqw6i2jlqvr29sgakznwr2vpz7g8y-mesboot-headers-0.19.drv" [color = magenta];
+ "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = magenta];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/zajwffxc2bi3kby5898rjwp3ycdx6sjy-tcc-boot-0.9.27.drv" [color = darkseagreen];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkseagreen];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkseagreen];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = darkseagreen];
+ "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = darkseagreen];
+ "/gnu/store/6wchqw6i2jlqvr29sgakznwr2vpz7g8y-mesboot-headers-0.19.drv" [label = "mesboot-headers@0.19", shape = box, fontname = Helvetica];
+ "/gnu/store/6wchqw6i2jlqvr29sgakznwr2vpz7g8y-mesboot-headers-0.19.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkgoldenrod];
+ "/gnu/store/6wchqw6i2jlqvr29sgakznwr2vpz7g8y-mesboot-headers-0.19.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod];
+ "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/pywx782lm7nrsbg2dxzzh6f3cgsyic35-gcc-core-mesboot-2.95.3.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = darkviolet];
+ "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = darkviolet];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" [label = "glibc-headers-mesboot@2.16.0", shape = box, fontname = Helvetica];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/6wchqw6i2jlqvr29sgakznwr2vpz7g8y-mesboot-headers-0.19.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = dimgrey];
+ "/gnu/store/27zvyk378j2vyyqv9l1dlqzp5ldqqkaz-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" [label = "gcc-mesboot1@4.7.4", shape = box, fontname = Helvetica];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = dimgrey];
+ "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" [color = dimgrey];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/xqp9xn8v370sf887rhrns68cvg3kz2n3-binutils-mesboot0-2.20.1a.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/zrnhglk67xc8701zbsw58c0fmnbp75z0-glibc-mesboot0-2.2.5.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/crfm7vmph6cw1chfnxxdf2f9pvg62knp-gcc-mesboot0-2.95.3.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/bkjm21s9f7797bb30dx56azmhd2gnvqa-make-mesboot0-3.80.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = peachpuff4];
+ "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = peachpuff4];
+ "/gnu/store/wmf4y32lq5jrci7q85pgrkq9bckkziqf-gcc-mesboot-wrapper-4.7.4.drv" [label = "gcc-mesboot-wrapper@4.7.4", shape = box, fontname = Helvetica];
+ "/gnu/store/wmf4y32lq5jrci7q85pgrkq9bckkziqf-gcc-mesboot-wrapper-4.7.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = cyan3];
+ "/gnu/store/wmf4y32lq5jrci7q85pgrkq9bckkziqf-gcc-mesboot-wrapper-4.7.4.drv" -> "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" [color = cyan3];
+ "/gnu/store/wmf4y32lq5jrci7q85pgrkq9bckkziqf-gcc-mesboot-wrapper-4.7.4.drv" -> "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" [color = cyan3];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" [label = "gcc-mesboot@4.9.4", shape = box, fontname = Helvetica];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/aiy6k5wlrjzl7kxd9zfpxb5nfjdxiq82-binutils-mesboot-2.20.1a.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/sbgi11hwbr41zd3hjg2w18w27fphisw1-gcc-mesboot1-wrapper-4.7.4.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/17hzzynybbdnyiwg5cbh3y9ba8kb0vxg-diffutils-mesboot-2.7.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/vrq2a7h6ya4gws23hqn6ygi7wnib6496-linux-libre-headers-bootstrap-0.drv" [color = peachpuff4];
+ "/gnu/store/ghpg2libayj02dkm6hkp6d44ivkv894z-gcc-mesboot-4.9.4.drv" -> "/gnu/store/lkmx7360vlvfigz88s4y427m72w8as1a-make-mesboot-3.82.drv" [color = peachpuff4];
+ "/gnu/store/sbgi11hwbr41zd3hjg2w18w27fphisw1-gcc-mesboot1-wrapper-4.7.4.drv" [label = "gcc-mesboot1-wrapper@4.7.4", shape = box, fontname = Helvetica];
+ "/gnu/store/sbgi11hwbr41zd3hjg2w18w27fphisw1-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/n08bmic0cc7xsbxz7vapbh8rkk27qyis-bootstrap-binaries-0.drv" [color = darkviolet];
+ "/gnu/store/sbgi11hwbr41zd3hjg2w18w27fphisw1-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/mw0skn92ac1nqhmh89qsqwm27jz3l1jq-glibc-mesboot-2.16.0.drv" [color = darkviolet];
+ "/gnu/store/sbgi11hwbr41zd3hjg2w18w27fphisw1-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/iynqblmi51xxnzr2i6vyb59lk0l6phzi-gcc-mesboot1-4.7.4.drv" [color = darkviolet];
+
+}
diff --git a/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.pdf b/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.pdf
new file mode 100644
index 0000000..1f33c88
Binary files /dev/null and b/talks/fosdem-2020/containers/images/bootstrap-graph-reduced.pdf differ
diff --git a/talks/fosdem-2020/containers/images/bootstrap-graph.dot b/talks/fosdem-2020/containers/images/bootstrap-graph.dot
new file mode 100644
index 0000000..f351ebb
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/bootstrap-graph.dot
@@ -0,0 +1,14 @@
+digraph "Guix package" {
+ "29061504" [label = "make-boot0@4.2.1", shape = box, fontname = Helvetica];
+ "29061504" -> "43943040" [color = cyan3];
+ "29061504" -> "43942848" [color = cyan3];
+ "29061504" -> "43942656" [color = cyan3];
+ "29061504" -> "43942464" [color = cyan3];
+ "29061504" -> "43942464" [color = cyan3];
+ "43943040" [label = "glibc-bootstrap@0", shape = box, fontname = Helvetica];
+ "43942848" [label = "gcc-bootstrap@0", shape = box, fontname = Helvetica];
+ "43942848" -> "43943040" [color = darkviolet];
+ "43942656" [label = "binutils-bootstrap@0", shape = box, fontname = Helvetica];
+ "43942464" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica];
+
+}
diff --git a/talks/fosdem-2020/containers/images/bootstrap-graph.pdf b/talks/fosdem-2020/containers/images/bootstrap-graph.pdf
new file mode 100644
index 0000000..b2dac60
Binary files /dev/null and b/talks/fosdem-2020/containers/images/bootstrap-graph.pdf differ
diff --git a/talks/fosdem-2020/containers/images/bootstrappable.pdf b/talks/fosdem-2020/containers/images/bootstrappable.pdf
new file mode 100644
index 0000000..e0bba65
Binary files /dev/null and b/talks/fosdem-2020/containers/images/bootstrappable.pdf differ
diff --git a/talks/fosdem-2020/containers/images/bootstrappable.svg b/talks/fosdem-2020/containers/images/bootstrappable.svg
new file mode 100644
index 0000000..86d802c
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/bootstrappable.svg
@@ -0,0 +1,401 @@
+
+
+
+
diff --git a/talks/fosdem-2020/containers/images/clouds.jpg b/talks/fosdem-2020/containers/images/clouds.jpg
new file mode 100644
index 0000000..b0b0ebb
Binary files /dev/null and b/talks/fosdem-2020/containers/images/clouds.jpg differ
diff --git a/talks/fosdem-2020/containers/images/cumulunimbus.jpg b/talks/fosdem-2020/containers/images/cumulunimbus.jpg
new file mode 100644
index 0000000..c3a62de
Binary files /dev/null and b/talks/fosdem-2020/containers/images/cumulunimbus.jpg differ
diff --git a/talks/fosdem-2020/containers/images/delorean.jpg b/talks/fosdem-2020/containers/images/delorean.jpg
new file mode 120000
index 0000000..436ba7b
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/delorean.jpg
@@ -0,0 +1 @@
+../../../aramis-2019/images/delorean.jpg
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/docker-guix-lol.pdf b/talks/fosdem-2020/containers/images/docker-guix-lol.pdf
new file mode 120000
index 0000000..742ba35
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/docker-guix-lol.pdf
@@ -0,0 +1 @@
+../../../jcad-2018/images/docker-guix-lol.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/emblem-system-symbolic.pdf b/talks/fosdem-2020/containers/images/emblem-system-symbolic.pdf
new file mode 100644
index 0000000..2acb4d5
Binary files /dev/null and b/talks/fosdem-2020/containers/images/emblem-system-symbolic.pdf differ
diff --git a/talks/fosdem-2020/containers/images/guix-scope-systems.pdf b/talks/fosdem-2020/containers/images/guix-scope-systems.pdf
new file mode 100644
index 0000000..5aa0ab3
Binary files /dev/null and b/talks/fosdem-2020/containers/images/guix-scope-systems.pdf differ
diff --git a/talks/fosdem-2020/containers/images/guix-scope.pdf b/talks/fosdem-2020/containers/images/guix-scope.pdf
new file mode 100644
index 0000000..fb2b676
Binary files /dev/null and b/talks/fosdem-2020/containers/images/guix-scope.pdf differ
diff --git a/talks/fosdem-2020/containers/images/guix-scope.svg b/talks/fosdem-2020/containers/images/guix-scope.svg
new file mode 100644
index 0000000..a694d9d
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/guix-scope.svg
@@ -0,0 +1,1335 @@
+
+
+
+
diff --git a/talks/fosdem-2020/containers/images/low-clouds.jpg b/talks/fosdem-2020/containers/images/low-clouds.jpg
new file mode 100644
index 0000000..6c56db1
Binary files /dev/null and b/talks/fosdem-2020/containers/images/low-clouds.jpg differ
diff --git a/talks/fosdem-2020/containers/images/owncloud-dockerfile.png b/talks/fosdem-2020/containers/images/owncloud-dockerfile.png
new file mode 100644
index 0000000..3bfbedd
Binary files /dev/null and b/talks/fosdem-2020/containers/images/owncloud-dockerfile.png differ
diff --git a/talks/fosdem-2020/containers/images/reflections-on-trusting-trust.png b/talks/fosdem-2020/containers/images/reflections-on-trusting-trust.png
new file mode 100644
index 0000000..5808388
Binary files /dev/null and b/talks/fosdem-2020/containers/images/reflections-on-trusting-trust.png differ
diff --git a/talks/fosdem-2020/containers/images/reproducible-builds.pdf b/talks/fosdem-2020/containers/images/reproducible-builds.pdf
new file mode 100644
index 0000000..a8c6f0e
Binary files /dev/null and b/talks/fosdem-2020/containers/images/reproducible-builds.pdf differ
diff --git a/talks/fosdem-2020/containers/images/reproducible-builds.svg b/talks/fosdem-2020/containers/images/reproducible-builds.svg
new file mode 100644
index 0000000..42398cc
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/reproducible-builds.svg
@@ -0,0 +1,107 @@
+
+
+
diff --git a/talks/fosdem-2020/containers/images/rust-bootstrap.dot b/talks/fosdem-2020/containers/images/rust-bootstrap.dot
new file mode 100644
index 0000000..8bd6aba
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/rust-bootstrap.dot
@@ -0,0 +1,55 @@
+digraph gvpr_result {
+ 32273152 [fontname=Helvetica,
+ label="rust@1.28.0",
+ shape=box];
+ 32273536 [fontname=Helvetica,
+ label="rust@1.27.2",
+ shape=box];
+ 32273152 -> 32273536 [color=magenta];
+ 32273152 -> 32273536 [color=magenta];
+ 32273920 [fontname=Helvetica,
+ label="rust@1.26.2",
+ shape=box];
+ 32273536 -> 32273920 [color=darkseagreen];
+ 32273536 -> 32273920 [color=darkseagreen];
+ 32274304 [fontname=Helvetica,
+ label="rust@1.25.0",
+ shape=box];
+ 32273920 -> 32274304 [color=darkgoldenrod];
+ 32273920 -> 32274304 [color=darkgoldenrod];
+ 32274688 [fontname=Helvetica,
+ label="rust@1.24.1",
+ shape=box];
+ 32274304 -> 32274688 [color=darkseagreen];
+ 32274304 -> 32274688 [color=darkseagreen];
+ 32275072 [fontname=Helvetica,
+ label="rust@1.23.0",
+ shape=box];
+ 32274688 -> 32275072 [color=red];
+ 32274688 -> 32275072 [color=red];
+ 32275456 [fontname=Helvetica,
+ label="rust@1.22.1",
+ shape=box];
+ 32275072 -> 32275456 [color=darkseagreen];
+ 32275072 -> 32275456 [color=darkseagreen];
+ 32275840 [fontname=Helvetica,
+ label="rust@1.21.0",
+ shape=box];
+ 32275456 -> 32275840 [color=dimgrey];
+ 32275456 -> 32275840 [color=dimgrey];
+ 32276224 [fontname=Helvetica,
+ label="rust@1.20.0",
+ shape=box];
+ 32275840 -> 32276224 [color=red];
+ 32275840 -> 32276224 [color=red];
+ 32190656 [fontname=Helvetica,
+ label="rust@1.19.0",
+ shape=box];
+ 32276224 -> 32190656 [color=peachpuff4];
+ 32276224 -> 32190656 [color=peachpuff4];
+ 32190848 [fontname=Helvetica,
+ label="mrustc@0.8.0",
+ shape=box];
+ 32190656 -> 32190848 [color=cyan3];
+ 32190656 -> 32190848 [color=cyan3];
+}
diff --git a/talks/fosdem-2020/containers/images/rust-bootstrap.pdf b/talks/fosdem-2020/containers/images/rust-bootstrap.pdf
new file mode 100644
index 0000000..6e06b14
Binary files /dev/null and b/talks/fosdem-2020/containers/images/rust-bootstrap.pdf differ
diff --git a/talks/fosdem-2020/containers/images/smoothie.pdf b/talks/fosdem-2020/containers/images/smoothie.pdf
new file mode 120000
index 0000000..4e3d6cf
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/smoothie.pdf
@@ -0,0 +1 @@
+../../../in2p3-2019/images/smoothie.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/software-heritage-logo-title-white.pdf b/talks/fosdem-2020/containers/images/software-heritage-logo-title-white.pdf
new file mode 120000
index 0000000..b575630
--- /dev/null
+++ b/talks/fosdem-2020/containers/images/software-heritage-logo-title-white.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/software-heritage-logo-title-white.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/containers/images/sun.jpg b/talks/fosdem-2020/containers/images/sun.jpg
new file mode 100644
index 0000000..ddc0f73
Binary files /dev/null and b/talks/fosdem-2020/containers/images/sun.jpg differ
diff --git a/talks/fosdem-2020/containers/images/throwing-the-baby-out-with-the-bathwater.jpg b/talks/fosdem-2020/containers/images/throwing-the-baby-out-with-the-bathwater.jpg
new file mode 100644
index 0000000..b17633b
Binary files /dev/null and b/talks/fosdem-2020/containers/images/throwing-the-baby-out-with-the-bathwater.jpg differ
diff --git a/talks/fosdem-2020/containers/images/thunder.jpg b/talks/fosdem-2020/containers/images/thunder.jpg
new file mode 100644
index 0000000..4fd53ee
Binary files /dev/null and b/talks/fosdem-2020/containers/images/thunder.jpg differ
diff --git a/talks/fosdem-2020/containers/outline.org b/talks/fosdem-2020/containers/outline.org
new file mode 100644
index 0000000..2f1f5e0
--- /dev/null
+++ b/talks/fosdem-2020/containers/outline.org
@@ -0,0 +1,134 @@
+#+TITLE: Guix: Unifying provisioning, deployment, and package management in the age of containers
+
+* Summary
+
+When it comes to software deployment, we are getting used to a new
+distribution of roles among many actors: traditional distros take care
+of core software pieces, “application bundles” à la Docker/Flatpak
+provide complex applications, Cabal, Gem, npm, pip, and friends take
+care of language-specific software, and Puppet/Ansible orchestrate the
+whole thing. Each of these tools has its justification, but the end
+result is a maze that’s hard to deal with.
+
+In this talk I will present GNU Guix, a software deployment toolbox and
+its associated distro that feature transactional upgrades and rollbacks,
+declarative OS deployment inspired by Nix, and reproducible builds. I
+will show how Guix approaches a variety of use cases: “package
+management” à la apt-get, environment management à la VirtualEnv,
+Ansible-style declarative OS deployment, and container provisioning à la
+Docker.
+
+Guix emphasizes programmability and one of its salient features is that
+it provides a unified Scheme programming environment to deal with with
+all the aspects of configuration, deployment, and system
+management—including service management by PID 1. I will illustrate how
+this works out on standalone Guix systems, and show the benefits of the
+approach by discussing applications that take advantage of Guix as a
+library to support reproducible software deployment.
+
+Last, I will reflect on the road that led to Guix 1.0 six months ago and
+present some of the challenges ahead.
+
+* Abstract
+
+This talk will reflect on what GNU Guix has to offer to users and how it
+compares to other approaches—from CONDA and pip to Flatpak and
+Docker. Guix is not only a transactional package manager and declarative
+GNU/Linux distribution: it’s also an environment manager, a container
+provisioning tool, and more. We will describe these tools and our
+journey to 1.0, emphasizing key properties that set Guix apart:
+reproducibility, transparency, and hackability.
+
+* intro: ?
+
+* Guix
+
+** package management -> take from jcad-2018
+
+** ‘guix describe’ + ‘guix pull’
+
+
+** operating system
+
+** guix deploy
+
+* “It’s all about source code.”
+
+** functional model
+
+** ‘guix system describe’ (Quine)
+
+ #+begin_src scheme
+ ((lambda (x)
+ (list x (list (quote quote) x)))
+ (quote
+ (lambda (x)
+ (list x (list (quote quote) x)))))
+
+ #+end_src
+
+** reproducible builds
+
+** bootstrapping
+
+ - bootstrap from nothing
+
+** Software Heritage
+
+* what's cooking?
+
+** Guix-HPC
+
+** Guix-Jupyter
+
+** ‘guix deploy’
+
+** Guile 3
+
+** contributor stats
+
+** Outreachy + GSoC
+
+** link to other talks
+
+* Get it!
+
+* COMMENT references
+
+ - [[https://blog.florentdelannoy.com/blog/2020/introducing-zeitgeist/][Zeitgeist]], “Zeitgeist is a language-agnostic dependency checker.”
+ - https://www.jres.org/fr/programme/
+
+* COMMENT demo preparation
+
+#+BEGIN_SRC emacs-lisp :exports none
+ (org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t)
+ (scheme . t)
+ (shell . t)))
+#+END_SRC
+
+#+RESULTS:
+
+#+BEGIN_SRC sh :exports none
+ mkdir -p /tmp/home/demo
+ cp -fv ./os.scm /tmp/home/demo
+ export USER=demo
+ export HOME=/tmp/home/demo
+ export PS1='guix-demo \w\$ '
+ export GUIX_BUILD_OPTIONS=--no-grafts
+ export GUIX_DISK_SPACE_WARNING=0
+ mkdir -p "$HOME/.config/guix"
+ cd
+ rm -f my-profile.scm
+ echo '(specifications->manifest '"'"'("guile" "emacs" "emacs-geiser"))' > my-profile.scm
+ (cd $HOME/.config/guix ; ln -s ~ludo/.config/guix/current)
+ unset GUILE_LOAD_PATH
+ unset GUILE_LOAD_COMPILED_PATH
+ export PATH=$HOME/.config/guix/current/bin:$HOME/.guix-profile/bin:/run/current-system/profile/bin:$HOME/local/bin:/run/setuid-programs
+ rm -f /var/guix/profiles/per-user/demo/guix-profile*
+ rm -f ~/.guix-profile
+ rm -f old-* new-*
+ unset LANGUAGE
+#+END_SRC
+
diff --git a/talks/fosdem-2020/containers/rules.ini b/talks/fosdem-2020/containers/rules.ini
new file mode 100644
index 0000000..5a74423
--- /dev/null
+++ b/talks/fosdem-2020/containers/rules.ini
@@ -0,0 +1,9 @@
+;; Rules for Rubber.
+
+[dot-pdf]
+target = (.*)\.pdf
+source = \1.dot
+rule = shell
+cost = 0
+command = dot -Tpdf -Gratio=.78 -o $target $source
+message = rendering $source into $target
diff --git a/talks/fosdem-2020/containers/talk.tex b/talks/fosdem-2020/containers/talk.tex
new file mode 100644
index 0000000..16e6147
--- /dev/null
+++ b/talks/fosdem-2020/containers/talk.tex
@@ -0,0 +1,901 @@
+% The comment below tells Rubber to compile the .dot files.
+%
+% rubber: module graphics
+% rubber: rules rules.ini
+
+% Make sure URLs are broken on hyphens.
+% See .
+\RequirePackage[hyphens]{url}
+
+\documentclass[aspectratio=169]{beamer}
+\usepackage{ragged2e} % for 'flushleft', etc.
+
+\usetheme{default}
+
+\usefonttheme{structurebold}
+
+% Nice sans-serif font.
+\usepackage[sfdefault,lining]{FiraSans} %% option 'sfdefault' activates Fira Sans as the default text font
+%% \usepackage[fakebold]{firamath-otf}
+\renewcommand*\oldstylenums[1]{{\firaoldstyle #1}}
+
+% Nice monospace font.
+\usepackage{inconsolata}
+%% \renewcommand*\familydefault{\ttdefault} %% Only if the base font of the document is to be typewriter style
+\usepackage[T1]{fontenc}
+
+
+% Typeset maths using a slanted, serif font.
+\def\mathfamilydefault{\rmdefault}
+
+\ProcessOptionsBeamer
+
+\usepackage{helvet}
+
+
+%% \usepackage{fontspec}
+%% \setmainfont[
+%% Ligatures=TeX,
+%% UprightFont = *-Boo,
+%% ItalicFont = *-BooObl,
+%% SmallCapsFont = *SC-Boo,
+%% BoldFont = *-Dem,
+%% BoldItalicFont = *-DemObl
+%% ]{Futura}
+
+\usepackage{multimedia} % movie
+\usecolortheme{seagull} % white on black
+
+\usepackage[utf8]{inputenc}
+\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol}
+\usepackage[absolute,overlay]{textpos}
+\usepackage{tikz}
+\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
+\usepackage{fancyvrb} % for \Verb
+
+% Remember the position of every picture.
+\tikzstyle{every picture}+=[remember picture]
+
+\tikzset{onslide/.code args={<#1>#2}{%
+ \only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
+}}
+
+% Colors.
+\definecolor{guixred1}{RGB}{226,0,38} % red P
+\definecolor{guixorange1}{RGB}{243,154,38} % guixorange P
+\definecolor{guixyellow}{RGB}{254,205,27} % guixyellow P
+\definecolor{guixred2}{RGB}{230,68,57} % red S
+\definecolor{guixred3}{RGB}{115,34,27} % dark red
+\definecolor{guixorange2}{RGB}{236,117,40} % guixorange S
+\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S
+\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S
+\definecolor{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey S
+\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S
+\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S
+\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S
+\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S
+
+\setbeamerfont{title}{size=\huge}
+\setbeamerfont{frametitle}{size=\huge}
+\setbeamerfont{normal text}{size=\Large}
+
+% White-on-black color theme.
+\setbeamercolor{structure}{fg=guixorange1,bg=black}
+\setbeamercolor{title}{fg=white,bg=black}
+\setbeamercolor{date}{fg=guixorange1,bg=black}
+\setbeamercolor{frametitle}{fg=white,bg=black}
+\setbeamercolor{titlelike}{fg=white,bg=black}
+\setbeamercolor{normal text}{fg=white,bg=black}
+\setbeamercolor{alerted text}{fg=guixyellow,bg=black}
+\setbeamercolor{section in toc}{fg=white,bg=black}
+\setbeamercolor{section in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{frametitle in toc}{fg=white,bg=black}
+\setbeamercolor{local structure}{fg=guixorange1,bg=black}
+
+\newcommand{\highlight}[1]{\alert{\textbf{#1}}}
+
+\title{GNU Guix: Unifying provisioning, deployment, and package management}
+\author{Ludovic Courtès}
+\date{FOSDEM, 1 February 2020}
+
+\setbeamertemplate{navigation symbols}{} % remove the navigation bar
+
+\AtBeginSection[]{
+ \begin{frame}
+ \frametitle{}
+ \tableofcontents[currentsection]
+ \end{frame}
+}
+
+
+\newcommand{\screenshot}[2][width=\paperwidth]{
+ \begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[{#1}]{#2}};
+ \end{tikzpicture}
+ \end{frame}
+}
+
+
+\begin{document}
+
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=\paperwidth]{images/sun}};
+ \end{tikzpicture}
+
+ {\color{guixdarkgrey}\Huge{\textbf{\\GNU Guix:\\Unifying provisioning,
+ deployment,\\and package management}}}
+ \vfill{}
+ {\color{guixdarkgrey}{\Large{Ludovic Courtès}}}
+ \\[4mm]
+ {\color{guixorange2}{\Large{{FOSDEM, \oldstylenums{1 February 2020}}}}}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixred3,fg=white}
+\begin{frame}[plain]
+ \begin{quotation}
+ \noindent
+ \begin{flushright}
+ \LARGE{``The Linux distribution as we know it is \textbf{coming to
+ an end}, and is being replaced by a new concept of
+ containerized, multi-instance, multi-user applications [...]''}
+ \end{flushright}
+ \end{quotation}
+ \hfill{--- Daniel Riek (\oldstylenums{2020})}
+
+ \begin{tikzpicture}[overlay]
+ \node [at=(current page.south east), anchor=south east]{
+ \url{https://fosdem.org/2020/schedule/event/riek_kubernetes/}
+ };
+ \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+% https://commons.wikimedia.org/wiki/Category:Sun?uselang=fr#/media/File:%22Sun%22.JPG
+% https://en.wikipedia.org/wiki/Zenith#/media/File:Tropical-area-mactan-philippines.jpg
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=\paperwidth]{images/sun}};
+ \node [at=(current page.center), text=black,
+ text opacity=1, rounded corners=2pt]
+ {\LARGE{\textbf{ Slackware {\tt |} Debian {\tt |} Red Hat }}};
+ \end{tikzpicture}
+\end{frame}
+
+
+% https://commons.wikimedia.org/wiki/Category:Clouds_from_below?uselang=fr#/media/File:Cloud_(5018750171).jpg
+% https://commons.wikimedia.org/wiki/Category:Clouds_from_below?uselang=fr#/media/File:Chigwell_Meadow_Essex_England_-_cumulus_clouds.jpg
+% https://commons.wikimedia.org/wiki/Category:Clouds_from_below?uselang=fr#/media/File:Clouds_above_Lordship_Recreation_Ground_Haringey_London_England_1.jpg
+% https://commons.wikimedia.org/wiki/Category:Clouds_and_blue_sky?uselang=fr#/media/File:2018_05_Havelland_IMG_1931.JPG
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=1.4\paperwidth]{images/clouds}};
+ \node [at=(current page.center), text=white,
+ text opacity=1, rounded corners=2pt]
+ {\LARGE{\textbf{ modules {\tt |} Spack {\tt |} EasyBuild {\tt
+ |} VirtualEnv }}};
+ \end{tikzpicture}
+\end{frame}
+
+
+% https://commons.wikimedia.org/wiki/Category:Cumulus_congestus_clouds?uselang=fr#/media/File:Cumulunimbus_IMG_5537.JPG
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=1.4\paperwidth]{images/cumulunimbus}};
+ \node [at=(current page.center), text=white,
+ text opacity=1, rounded corners=2pt]
+ {\LARGE{\textbf{ Ansible {\tt |} Puppet {\tt |} Propellor }}};
+ \end{tikzpicture}
+\end{frame}
+
+% https://commons.wikimedia.org/wiki/Category:Stratus_clouds?uselang=fr#/media/File:2018-05-18_18_27_24_Low_stratiform_clouds_(base_near_3,000_feet_AGL)_with_wavy,_bumpy_base_viewed_from_Mercer_County_Route_622_(North_Olden_Avenue)_in_Ewing_Township,_Mercer_County,_New_Jersey.jpg
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=1.4\paperwidth]{images/low-clouds}};
+ \node [at=(current page.center), text=white, inner sep=5cm,
+ text opacity=1, rounded corners=2pt, fill=black, opacity=.5]
+ {\LARGE{\textbf{ pip {\tt |} Cabal {\tt |} Cargo {\tt |} CONDA
+ {\tt |} Gradle }}};
+ \end{tikzpicture}
+\end{frame}
+
+
+% https://commons.wikimedia.org/wiki/Category:Cloud-to-cloud_lightning#/media/File:004_2018_05_14_Extremes_Wetter.jpg
+\begin{frame}[plain, fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=1.4\paperwidth]{images/thunder}};
+ \node [at=(current page.center), text=white,
+ text opacity=1, rounded corners=2pt]
+ {\LARGE{\textbf{ Flatpak {\tt |} snap {\tt |} Docker {\tt |} Vagrant }}};
+ \end{tikzpicture}
+\end{frame}
+
+% TODO 2048 vuln + Docker license opacity
+
+\setbeamercolor{normal text}{bg=guixred3}
+\begin{frame}[plain, fragile]
+ \center{\Huge{\textbf{Are distros doomed?}}}
+ %% \\[2cm]
+ %% \uncover<2->{\center{Yes!} \par}
+ %% \uncover<3->{\center{No!} \par}
+\end{frame}
+\setbeamercolor{normal text}{bg=black,fg=white}
+
+\setbeamercolor{normal text}{bg=guixred3,fg=white}
+\begin{frame}[plain]
+ \begin{quotation}
+ \begin{flushright}
+ \LARGE{``Debian and other distributions are going to be \textbf{that
+ thing you run docker on}, little~more.''}
+ \end{flushright}
+ \end{quotation}
+ \hfill{--- Jos Poortvliet, ownCloud developer (\oldstylenums{2016})}
+
+ \begin{tikzpicture}[overlay]
+ \node [at=(current page.south east), anchor=south east]{
+ \url{http://lwn.net/Articles/670566/}
+ };
+ \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\setbeamercolor{normal text}{fg=white,bg=white}
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ % https://github.com/owncloud-docker/server/blob/master/v19.10/Dockerfile.amd64
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[height=\paperheight]{images/owncloud-dockerfile}};
+
+ \node [at=(current page.center), anchor=south west, overlay,
+ inner sep=3mm, rounded corners,
+ text=black, text opacity=1, fill=white, opacity=.5, text width=7cm]
+ {\LARGE{\textbf{It's also that thing you run \emph{inside} Docker!}}};
+ \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=1.3\textwidth]{images/smoothie}};
+ \node [at=(current page.south east), anchor=south east, text=guixgrey]
+ {\small{courtesy of Ricardo Wurmus}};
+ \end{tikzpicture}
+\end{frame}
+
+% https://en.wikipedia.org/wiki/Don't_throw_the_baby_out_with_the_bathwater#/media/File:Murner.Nerrenbeschwerung.kind.jpg
+\setbeamercolor{normal text}{bg=white}
+\screenshot[height=.95\paperheight]{images/throwing-the-baby-out-with-the-bathwater}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=0.7\paperwidth]{images/Guix-horizontal-print}};
+ \end{tikzpicture}
+\end{frame}
+
+\screenshot{images/guix-scope}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+% demo
+\begin{frame}[fragile]
+
+ \begin{semiverbatim}
+ \LARGE{
+guix \alert{install} gcc-toolchain openmpi hwloc
+
+eval `guix package \alert{--search-paths}=prefix`
+
+guix package \alert{--roll-back}
+
+guix install \alert{--profile}=./experiment \\
+ gcc-toolchain@5.5 hwloc@1
+}
+ \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \LARGE{
+guix package \alert{--manifest}=my-packages.scm
+
+
+
+ (\alert{specifications->manifest}
+ '("gcc-toolchain" "emacs"
+ "guile" "emacs-geiser"))
+}
+ \end{semiverbatim}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixdarkgrey}
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \Large{
+bob@laptop$ guix package \alert{--manifest}=my-packages.scm
+bob@laptop$ guix \alert{describe}
+ guix cabba9e
+ repository URL: https://git.sv.gnu.org/git/guix.git
+ commit: cabba9e15900d20927c1f69c6c87d7d2a62040fe
+
+\pause
+
+
+alice@supercomp$ guix \alert{pull} --commit=cabba9e
+alice@supercomp$ guix package \alert{--manifest}=my-packages.scm
+}
+ \end{semiverbatim}
+
+ %% \begin{tikzpicture}[overlay]
+ %% \node<3>[rounded corners=4, text centered, anchor=north,
+ %% fill=guixorange1, text width=7cm,
+ %% inner sep=3mm, opacity=.75, text opacity=1]
+ %% at (current page.center) {
+ %% \textbf{\Large{bit-reproducible \& portable!}}
+ %% };
+ %% \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ % https://commons.wikimedia.org/wiki/File:TeamTimeCar.com-BTTF_DeLorean_Time_Machine-OtoGodfrey.com-JMortonPhoto.com-07.jpg
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=\paperwidth]{images/delorean}};
+ \node [rounded corners=4, text centered, anchor=north,
+ text width=10cm,
+ inner sep=3mm, opacity=.75, text opacity=1]
+ at (current page.center) {
+ \textbf{\Huge{travel in space \emph{and} time!}}
+ };
+ \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \LARGE{
+guix \alert{time-machine} --commit=cabba9e -- \\
+ install hello
+ }
+ \end{semiverbatim}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue1}
+\begin{frame}[fragile]%{``Virtual environments''}
+ \LARGE{
+ \begin{semiverbatim}
+guix \alert{environment} --ad-hoc\uncover<2->{ \alert{--container}} \\
+ python python-numpy python-scipy \\
+ -- python3
+ \end{semiverbatim}
+ }
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixred3}
+\begin{frame}[fragile]%{Container provisioning}
+ \LARGE{
+ \begin{semiverbatim}
+\$ guix \alert{pack}\only<2>{ --relocatable}\only<3->{ --format=docker} \\
+ python python-numpy
+\textrm{...}
+/gnu/store/\textrm{...}-\only<1-2>{pack.tar.gz}\only<3->{docker-image.tar.gz}
+ \end{semiverbatim}
+ }
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot[width=.9\paperwidth]{images/docker-guix-lol}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\screenshot{images/guix-scope-systems}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \Large{
+<\textit{bob}> this is how Guix System works: you tell it
+ what you want, and it puts all the pieces in place
+ for you
+
+<\textit{alice}> yeah you just need to speak its language
+
+<\textit{civodul}> such a fine language, though :-)
+}
+ \end{semiverbatim}
+ \vfill{
+ (seen on \#guix)}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \vspace{-1cm}
+ \small{
+(\alert{operating-system}
+ (host-name "guixbox")
+ (timezone "Europe/Brussels")
+ (locale "fr_BE.utf8")
+ (bootloader (\alert{bootloader-configuration}
+ (bootloader grub-efi-bootloader)
+ (target "/boot/efi")))
+ (file-systems (append (list (\alert{file-system}
+ (device (file-system-label "my-root"))
+ (mount-point "/")
+ (type "ext4")))
+ %base-file-systems))
+ (users (append (list (\alert{user-account}
+ (name "charlie")
+ (group "users")
+ (home-directory "/home/charlie")))
+ %base-user-accounts))
+ (services (append (list (\alert{service} dhcp-client-service-type)
+ (\alert{service} openssh-service-type))
+ %base-services)))
+ }
+ \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \Large{
+\$ guix system \alert{vm} config.scm
+\textrm{...}
+
+\$ guix system \alert{docker-image} config.scm
+\textrm{...}
+
+\$ guix system \alert{container} config.scm
+\textrm{...}
+
+\$ guix system \alert{reconfigure} config.scm
+\textrm{...}
+}
+ \end{semiverbatim}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixdarkgrey}
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+(\alert{define} (os-for-machine n)
+ ;; \textsf{\textit{Return an OS for machine number N.}}
+ (operating-system
+ (host-name (string-append "machine"
+ (number->string n)))
+ \textsf{...}))
+
+;; \textsf{\textit{Return a list of machines.}}
+(map (\alert{lambda} (n)
+ (\alert{machine}
+ (operating-system (os-for-machine n))
+ \only<1-3>{(environment managed-host-environment-type)
+ (configuration (\alert{machine-ssh-configuration}
+ (host-name (ip-for-machine n))))))}\only<4->{(environment digital-ocean-environment-type)
+ (configuration (\alert{digital-ocean-configuration}
+ (region "nyc3")
+ \textsf{...}))))}
+ (list 1 2 3 4 5))
+ \end{semiverbatim}
+
+ \begin{tikzpicture}[overlay]
+ \node<1-2> at (14,6) [anchor=north east,
+ inner sep=1mm, rotate=-30, shape=star,
+ fill=guixorange1, text=white] {
+ \Large{\textbf{New!}}
+ };
+
+ \node<2> [at=(current page.center), inner sep=5mm,
+ rounded corners, fill=black, text=white,
+ opacity=.75, text opacity=1] {
+ \LARGE{\texttt{guix deploy machines.scm}}
+ };
+ \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixgreen1}
+\begin{frame}[fragile]
+ \Huge{\textbf{It's all about source code.}}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixgrey}
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+(define audacity
+ (\alert{package}
+ (name "audacity")
+ (home-page "https://github.com/audacity/audacity")
+ (\alert{source} (origin
+ (method git-fetch)
+ (uri (git-reference
+ (\alert{url} home-page)
+ (\alert{commit} "2f30ff07a")\tikz{\node(commit){};}
+ (recursive? #t)))
+ (sha256
+ (base32
+ "106rf402cvfdhc2yf\textrm{...}"))))
+ \textrm{...}))
+ \end{semiverbatim}
+
+ \begin{tikzpicture}[overlay]
+ \node<2->(swh) [inner sep=3mm, rounded corners, fill=black,
+ opacity=.3, text opacity=1] at (12,5) {
+ % https://annex.softwareheritage.org/public/logo/
+ \includegraphics[width=0.33\textwidth]{images/software-heritage-logo-title-white}
+ };
+ \node<2-> [at=(current page.south), anchor=south,
+ inner sep=2mm, rounded corners, fill=black, text width=13cm,
+ opacity=.3, text opacity=1] {
+ \url{https://www.softwareheritage.org/2019/04/18/software-heritage-and-gnu-guix-join-forces-to-enable-long-term-reproducibility/}
+ };
+
+ \path<2->[very thick, draw=guixorange1]
+ (swh) edge [out=-90, in=0, ->] (commit);
+ \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot[width=.8\paperwidth]{images/reproducible-builds}
+\setbeamercolor{normal text}{bg=guixdarkgrey}
+
+
+\begin{frame}[plain]
+ \LARGE{
+ $\texttt{emacs} = f(\texttt{gtk+}, \texttt{gcc}, \texttt{make}, \texttt{coreutils})$
+ \\[1.1cm]
+ \uncover<2->{$\texttt{gtk+} = g(\texttt{glib}, \texttt{gcc}, \texttt{make}, \texttt{coreutils})$}
+ \\[1.1cm]
+ \uncover<3->{$\texttt{gcc} = h(\texttt{make}, \texttt{coreutils}, \texttt{gcc}_0)$}
+ \\[1.1cm]
+ \uncover<3->{\textrm{...}}
+ }
+
+ \uncover<1>{\large{where $f =$ \texttt{./configure \&\& make \&\& make install}}}
+
+ %% \begin{tikzpicture}[overlay]
+ %% \node<4->[fill=guixorange1, text=black, text opacity=1, opacity=.7,
+ %% rounded corners=2mm, inner sep=5mm] at (5, 1) {
+ %% \textbf{\Large{the complete DAG is captured}}
+ %% };
+ %% \end{tikzpicture}
+\end{frame}
+%% \begin{frame}[fragile]
+%% \begin{tikzpicture}[overlay]
+%% \node [at=(current page.north west), anchor=north west,
+%% outer sep=4mm, text=white, text width=13mm]{
+%% \texttt{configure},
+%% \texttt{src/hello.c},
+%% GCC,\\
+%% Binutils,
+%% etc.
+%% };
+%% \node [at=(current page.center), outer sep=3mm, font=\rmfamily]{
+%% {\fontfamily{roman}\fontsize{45}{45}{$f(x,y,z)$}}
+%% };
+%% \end{tikzpicture}
+%% \end{frame}
+\setbeamercolor{normal text}{bg=black}
+
+\begin{frame}[fragile]
+ %% \frametitle{Bit-Reproducible Builds$^*$}
+ %% \framesubtitle{$^*$ almost!}
+
+ \begin{semiverbatim}
+ \Large{
+\$ guix build hello
+\uncover<2->{/gnu/store/\tikz[baseline]{\node[anchor=base](nixhash){\alert<2>{h2g4sf72\textrm{...}}};}-hello-2.10}
+
+\uncover<3->{\$ \alert<3>{guix gc --references /gnu/store/\textrm{...}-hello-2.10}
+/gnu/store/\textrm{...}-glibc-2.29
+/gnu/store/\textrm{...}-gcc-7.4.0-lib
+/gnu/store/\textrm{...}-hello-2.10
+}}
+ \end{semiverbatim}
+
+ \begin{tikzpicture}[overlay]
+ \node<1>(labelnixhash) [fill=white, text=black, inner sep=0.5cm,
+ rounded corners] at (current page.center) {%
+ \Large{\textbf{isolated build}: chroot, separate name spaces, etc.}
+ };
+
+ \node<2>(labelnixhash) [fill=white, text=black] at (4cm, 2cm) {%
+ hash of \textbf{all} the dependencies};
+ \path[->]<2>(labelnixhash.north) edge [bend left, in=180, out=-45] (nixhash.south);
+
+ \draw<4-> (-10pt, 105pt) [very thick, color=guixorange2, rounded corners=8pt]
+ arc (10:-50:-50pt and 110pt);
+ \node<4->[fill=white, text=black, text opacity=1, opacity=.7,
+ rounded corners=2mm, inner sep=5mm]
+ at (7, 2) {\textbf{\Large{(nearly) bit-identical for everyone}}};
+ \end{tikzpicture}
+
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue2}
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+$ \alert{guix challenge} --substitute-urls="https://ci.guix.gnu.org https://example.org"
+\alert{/gnu/store/\dots{}-openssl-1.0.2d contents differ}:
+ local hash: 0725l22\dots{}
+ http://ci.guix.gnu.org/\dots{}-openssl-1.0.2d: 0725l22\dots{}
+ http://example.org/\dots{}-openssl-1.0.2d: 1zy4fma\dots{}
+\alert{/gnu/store/\dots{}-git-2.5.0 contents differ}:
+ local hash: 00p3bmr\dots{}
+ http://ci.guix.gnu.org/\dots{}-git-2.5.0: 069nb85\dots{}
+ http://example.org/\dots{}-git-2.5.0: 0mdqa9w\dots{}
+\alert{/gnu/store/\dots{}-pius-2.1.1 contents differ}:
+ local hash: 0k4v3m9\dots{}
+ http://ci.guix.gnu.org/\dots{}-pius-2.1.1: 0k4v3m9\dots{}
+ http://example.org/\dots{}-pius-2.1.1: 1cy25x1\dots{}
+ \end{semiverbatim}
+\end{frame}
+\setbeamercolor{normal text}{bg=black}
+
+% demo guix build foo --check | guix challenge
+
+\setbeamercolor{normal text}{fg=black,bg=white}
+\begin{frame}[fragile]
+ \vspace{2.5cm}
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt,
+ drop shadow={opacity=0.5}, draw, color=guixgrey, line width=1pt]
+ {\includegraphics[height=0.9\paperheight]{images/reflections-on-trusting-trust}};
+ \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot[width=.8\paperwidth]{images/bootstrappable}
+\setbeamercolor{normal text}{bg=black}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[height=\paperheight]{images/bootstrap-graph}};
+ \node<2-> [at=(current page.center), anchor=north, inner sep=20pt, text=guixgrey]
+ {\Large{\textbf{250 MiB of binary blobs}}};
+ \end{tikzpicture}
+\end{frame}
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[height=\paperheight]{images/bootstrap-graph-reduced}};
+ \node<2-> [at=(current page.center), fill=guixorange1, rounded corners=10pt,
+ inner sep=10pt, opacity=.8, text opacity=1]
+ {\Large{\textbf{250 MiB $\rightarrow$ 130 MiB of binary blobs}}};
+ \node<2-> [at=(current page.south), anchor=south,
+ inner sep=2mm, outer sep=3mm, rounded corners,
+ fill=white, opacity=.7, text opacity=1, text=black]
+ {\url{https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/}};
+ \node<2-> [at=(current page.north east), anchor=north east,
+ fill=white, text=guixdarkgrey, draw=guixblue1,
+ rounded corners=10pt, %text width=5cm,
+ inner sep=10pt, outer sep=3mm, text opacity=1]
+ {\large{\textbf{Go to AW1.125, Sun.~11:50AM}}};
+ \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt, rotate=30]
+ {\includegraphics[height=1.1\paperheight]{images/rust-bootstrap}};
+ %% \node<2-> [at=(current page.center), fill=guixorange1, rounded corners=10pt,
+ %% inner sep=10pt, opacity=.8, text opacity=1]
+ %% {\Large{\textbf{Thumbs up, Danny Milosavljevic!}}};
+ \node<1> [at=(current page.center), fill=guixorange1, rounded corners=10pt,
+ inner sep=10pt, opacity=.8, text opacity=1]
+ {\Large{\textbf{Rust entirely built from source!}}};
+ \node<1> [at=(current page.south), anchor=south,
+ inner sep=2mm, outer sep=3mm, rounded corners, fill=white,
+ opacity=.7, text opacity=1, text=black]
+ {\url{https://guix.gnu.org/blog/2018/bootstrapping-rust/}};
+ \node<1-> [at=(current page.north east), anchor=north east,
+ fill=white, text=guixdarkgrey, draw=guixblue1,
+ rounded corners=10pt, %text width=5cm,
+ inner sep=10pt, outer sep=3mm, text opacity=1]
+ {\large{\textbf{Go to K.3.401, Sun.~10:00AM}}};
+ \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+%% \setbeamercolor{normal text}{bg=white}
+%% \begin{frame}[plain]
+%% \begin{tikzpicture}[remember picture, overlay]
+%% \node [at=(current page.center), fill=guixblue1,
+%% shape=circle, inner sep=2.2cm, opacity=.8, text opacity=1] {};
+%% \node [at=(current page.center), fill=guixorange1, rounded corners=10pt,
+%% shape=circle, inner sep=2cm, opacity=1, text opacity=1] {};
+%% \node [at=(current page.center), fill=guixorange1, rounded corners=10pt,
+%% shape=circle, inner sep=10pt, opacity=0, text opacity=1]
+%% {\Huge{\textbf{1.0!}}};
+
+%% \end{tikzpicture}
+%% \end{frame}
+%% \setbeamercolor{normal text}{fg=white,bg=black}
+
+\setbeamercolor{normal text}{bg=guixtaupe}
+\begin{frame}[fragile]
+ \Huge{$f(\texttt{config.scm}) = \vcenter{\hbox{\includegraphics[width=20mm]{images/emblem-system-symbolic}}}$}
+
+ \begin{tikzpicture}[remember picture, overlay]
+ \node<2-> [at=(current page.center), shape=circle, inner sep=1cm,
+ fill=white, text=black, opacity=.75, text opacity=.9] {
+ \Huge{$f^{-1}$}~?
+ };
+ \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[fragile]
+ \begin{semiverbatim}
+ \Large{
+\$ guix system \alert{describe}
+ file name: /var/guix/profiles/system-126-link
+ canonical file name: /gnu/store/\textsf{\dots{}}-system
+ label: GNU with Linux-Libre 5.4.15
+ bootloader: grub-efi
+ root device: label: "root"
+ \alert{channels}:
+ guix:
+ repository URL: https://git.savannah.gnu.org/\textsf{\dots{}}
+ commit: 93f4511eb0c9b33f5083c2a04f4148e0a494059c
+ \alert{configuration file}: /gnu/store/\textsf{\dots{}}-configuration.scm
+ }
+ \end{semiverbatim}
+
+ \begin{tikzpicture}[overlay]
+ \node at (14,6) [anchor=east,
+ inner sep=1mm, rotate=-30, shape=star,
+ fill=guixorange1, text=white] {
+ \Large{\textbf{New!}}
+ };
+ \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue1}
+\begin{frame}
+ \Huge{\textbf{Wrap-up.}}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\setbeamercolor{normal text}{fg=white,bg=guixdarkgrey}
+\begin{frame}[fragile]
+ \LARGE{
+ Not included in this talk :-)
+ \\[1cm]
+
+ \begin{itemize}
+ \item{ \textbf{embedded} usage
+ \begin{itemize}
+ \item Go to K.3.201, Sun. 11:00AM!
+ \end{itemize} }
+ \item { \textbf{Guile} \& programming language technology
+ \begin{itemize}
+ \item Go to AW1.125, Sun. 11:30AM!
+ \end{itemize} }
+ \item{ \textbf{Guix-HPC}: high-performance computing
+ \begin{itemize}
+ \item Go to UB.132, Sun. 12:30PM!
+ \end{itemize}}
+ \end{itemize}
+ }
+\end{frame}
+
+\begin{frame}[fragile]
+ \Huge{\textbf{Join us now, share the parens!}}
+ \vspace{0.7cm}
+ \Large{
+ \begin{itemize}
+ \item \textbf{install it!}
+ \item \textbf{use it!}
+ \item \textbf{hack it!}
+ \item \textbf{join} for Outreachy or GSoC!
+ \end{itemize}
+ }
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot{images/guix-scope}
+
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[fragile]
+ \vspace{-2cm}
+ \begin{tikzpicture}
+ \matrix[row sep=10mm, column sep=1cm]{
+ % https://git-scm.com/downloads/logos
+ \node {\includegraphics[width=0.2\textwidth]{images/Git-Logo-2Color}}; &
+ \node {\includegraphics[width=0.15\textwidth]{images/arrow-right}}; &
+ \node {\includegraphics[width=0.24\textwidth]{images/Guix-horizontal-print}};
+ \\
+ };
+ \end{tikzpicture}
+
+ \begin{tikzpicture}[overlay]
+ \node [at=(current page.center), anchor=north,
+ text=black, text width=.9\textwidth]{
+ \Huge{\textbf{Reproducible deployment}\\ is
+ the logical next step. \par
+ }};
+ \end{tikzpicture}
+\end{frame}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setbeamercolor{normal text}{bg=black}
+\begin{frame}[plain]
+
+\vfill{
+ \vspace{1.5cm}
+ \center{\includegraphics[width=0.3\textwidth]{images/Guix-white}}\\[1.0cm]
+ \texttt{ludo@gnu.org}\hfill{\alert{\url{https://guix.gnu.org/}}}
+}
+
+\end{frame}
+
+\begin{frame}{}
+
+ \begin{textblock}{12}(2, 3)
+ \tiny{
+ Copyright \copyright{} 2010, 2012--2020 Ludovic Courtès \texttt{ludo@gnu.org}.\\[3.0mm]
+ GNU Guix logo, CC-BY-SA 4.0, \url{https://gnu.org/s/guix/graphics} \\
+ Reproducible Builds logo under CC-BY 3.0,
+ \url{https://uracreative.github.io/reproducible-builds-styleguide/visuals/}. \\
+ Bootstrappable Builds logo by Ricardo Wurmus,
+ \url{https://bootstrappable.org}. \\
+ Docker whale image by Ricardo Wurmus. \\
+ Smoothie image \copyright{} 2019 Ricardo Wurmus, CC-BY-SA 4.0. \\
+ Hand-drawn arrows by Freepik from flaticon.com.
+ \\[1.5mm]
+ Picture of the sun under CC-BY-SA 3.0,
+ \url{https://commons.wikimedia.org/wiki/File:\%22Sun\%22.JPG}. \\
+ Cloud picture 1 under CC-BY-SA 2.0,
+ \url{https://commons.wikimedia.org/wiki/File:Cloud_(5018750171).jpg}. \\
+ Cloud picture 2 under CC-BY-SA 3.0,
+ \url{https://commons.wikimedia.org/wiki/File:Cumulunimbus_IMG_5537.JPG}. \\
+ Cloud picture 3 under CC-BY-SA 4.0,
+ \url{https://commons.wikimedia.org/wiki/File:2018-05-18_18_27_24_Low_stratiform_clouds_(base_near_3,000_feet_AGL)_with_wavy,_bumpy_base_viewed_from_Mercer_County_Route_622_(North_Olden_Avenue)_in_Ewing_Township,_Mercer_County,_New_Jersey.jpg}. \\
+ Thunder picture under CC-BY-SA 4.0,
+ \url{https://commons.wikimedia.org/wiki/File:004_2018_05_14_Extremes_Wetter.jpg}.
+ \\[1.5mm]
+ Copyright of other images included in this document is held by
+ their respective owners.
+ \\[3.0mm]
+ This work is licensed under the \alert{Creative Commons
+ Attribution-Share Alike 3.0} License. To view a copy of this
+ license, visit
+ \url{http://creativecommons.org/licenses/by-sa/3.0/} or send a
+ letter to Creative Commons, 171 Second Street, Suite 300, San
+ Francisco, California, 94105, USA.
+ \\[2.0mm]
+ At your option, you may instead copy, distribute and/or modify
+ this document under the terms of the \alert{GNU Free Documentation
+ License, Version 1.3 or any later version} published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is
+ available at \url{http://www.gnu.org/licenses/gfdl.html}.
+ \\[2.0mm]
+ % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
+ The source of this document is available from
+ \url{http://git.sv.gnu.org/cgit/guix/maintenance.git}.
+ }
+ \end{textblock}
+\end{frame}
+
+\end{document}
+
+% Local Variables:
+% coding: utf-8
+% comment-start: "%"
+% comment-end: ""
+% ispell-local-dictionary: "american"
+% compile-command: "rubber --pdf talk.tex"
+% End: