diff --git a/talks/2023-dfn/.gitignore b/talks/2023-dfn/.gitignore new file mode 100644 index 0000000..f08278d --- /dev/null +++ b/talks/2023-dfn/.gitignore @@ -0,0 +1 @@ +*.pdf \ No newline at end of file diff --git a/talks/2023-dfn/31-guix2.svg b/talks/2023-dfn/31-guix2.svg new file mode 100644 index 0000000..3f6a4ae --- /dev/null +++ b/talks/2023-dfn/31-guix2.svg @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + package + + + + environments + + + + + + + containers + + + + + + systems + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/31-guix3.svg b/talks/2023-dfn/31-guix3.svg new file mode 100644 index 0000000..9f876f8 --- /dev/null +++ b/talks/2023-dfn/31-guix3.svg @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + package + + + + environments + + + + + + + containers + + + + + + systems + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/31-guix4.svg b/talks/2023-dfn/31-guix4.svg new file mode 100644 index 0000000..358e798 --- /dev/null +++ b/talks/2023-dfn/31-guix4.svg @@ -0,0 +1,1332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + package + + + + environments + + + + + + + containers + + + + + + systems + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/31-guix5.svg b/talks/2023-dfn/31-guix5.svg new file mode 100644 index 0000000..dd3f79a --- /dev/null +++ b/talks/2023-dfn/31-guix5.svg @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + package + + + + environments + + + + + + + containers + + + + + + systems + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/31-guix6.svg b/talks/2023-dfn/31-guix6.svg new file mode 100644 index 0000000..580fdc5 --- /dev/null +++ b/talks/2023-dfn/31-guix6.svg @@ -0,0 +1,1698 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + package + + + + environments + + + + + + + containers + + + + + + systems + + + + + + + + + + + + + + + + + + + + + + + + Reproducible deployment + + diff --git a/talks/2023-dfn/Makefile b/talks/2023-dfn/Makefile new file mode 100644 index 0000000..b941d7b --- /dev/null +++ b/talks/2023-dfn/Makefile @@ -0,0 +1,46 @@ +SLIDES=\ + title \ + rekado \ + title2 \ + reproducibility \ + reproducibility2 \ + reproducibility \ + reproducible-4 \ + reproducible-2 \ + reproducible-3 \ + big-graph-fixed \ + hpc \ + conda1 \ + conda2 \ + containers \ + kernel \ + containers-details \ + smoothie \ + dockerfile \ + giraffe \ + functional-thesis \ + functional1a functional1b functional1c \ + guix-features \ + 31-guix2 31-guix3 31-guix4 31-guix5 \ + demo \ + env \ + manifest time-travel describe \ + docker-pack \ + summary \ + end + + +# Extra slides for which there is no time: + +BONUS= bonus \ + guix-architecture \ + profile-0 profile-1 rollback profile-1 \ + gc-1 gc-2 gc-3 + +GS = gs + +slides.pdf: $(addsuffix .pdf, ${SLIDES} ${BONUS}) + ${GS} -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=$@ $(addsuffix .pdf, ${SLIDES}) $(addsuffix .pdf, ${BONUS}) + +%.pdf: %.svg + rsvg-convert -f pdf $< > $@ diff --git a/talks/2023-dfn/README.org b/talks/2023-dfn/README.org new file mode 100644 index 0000000..49d4b8d --- /dev/null +++ b/talks/2023-dfn/README.org @@ -0,0 +1,34 @@ +#+title: Reproducible software deployment in scientific computing +#+author: Ricardo Wurmus + +presented on <2023-09-19 二> + +* Abstract + +Support teams of HPC systems often find themselves faced with an +impossible task: operate complex systems conservatively, but also +support scientists in deploying and running bleeding-edge scientific +software. Their unique position of power in an otherwise restrictive +environment gives them an often underappreciated role in the +collaborative effort of truly reproducible computational science. + +In this talk we address the need for reproducibility and how it +relates to software deployment, inspect tradeoffs of existing +approaches, and lay out implications and recommendations for system +administrators. We will demystify containers and introduce a +declarative functional approach to reproducible and portable software +environments using GNU Guix, and demonstrate possible integrations +with scientific workflows. + +* Building the slides + +#+begin_src sh +guix shell -m manifest.scm -- make +#+end_src + +* How to present with notes + +#+begin_src sh +guix shell pdfpc -- pdfpc slides.pdf -R script.pdfpc +#+end_src + diff --git a/talks/2023-dfn/abstract.org b/talks/2023-dfn/abstract.org new file mode 100644 index 0000000..dfa815a --- /dev/null +++ b/talks/2023-dfn/abstract.org @@ -0,0 +1,24 @@ +#+title: Reproducible software deployment in scientific computing + +* Abstract + +Support teams of HPC systems often find themselves faced with an +impossible task: operate complex systems conservatively, but also +support scientists in deploying and running bleeding-edge scientific +software. Their unique position of power in an otherwise restrictive +environment gives them an often underappreciated role in the +collaborative effort of truly reproducible computational science. + +In this talk we address the need for reproducibility and how it +relates to software deployment, inspect tradeoffs of existing +approaches, and lay out implications and recommendations for system +administrators. We will demystify containers and introduce a +declarative functional approach to reproducible and portable software +environments using GNU Guix, and demonstrate possible integrations +with scientific workflows. + +* Present + +#+begin_src sh +guix shell pdfpc -- pdfpc slides.pdf -R script.pdfpc +#+end_src diff --git a/talks/2023-dfn/big-graph-fixed.svg b/talks/2023-dfn/big-graph-fixed.svg new file mode 100644 index 0000000..ebd98eb --- /dev/null +++ b/talks/2023-dfn/big-graph-fixed.svg @@ -0,0 +1,24619 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + coreutils-8.24 + + + + perl-5.22.1 + + + + + + + + + + + tar-1.28 + + + + + + + + + + + gzip-1.6 + + + + + + + + + + + bzip2-1.0.6 + + + + + + + + + + + xz-5.2.2 + + + + + + + + + + + + le-5.25 + + + + + + + + + + + di + + utils-3.3 + + + + + + + + + + + patch-2.7.5 + + + + + + + + + + + sed-4.2.2 + + + + + + + + + + + + ndutils-4.6.0 + + + + + + + + + + + gawk-4.1.3 + + + + + + + + + + + grep-2.22 + + + + + + + + + + + coreutils-8.24 + + + + + + + + + + + make-4.1 + + + + + + + + + + + bash-4.3.42 + + + + + + + + + + + ld-wrapper-0 + + + + + + + + + + + binutils-2.25.1 + + + + + + + + + + + gcc-4.9.3 + + + + + + + + + + + glibc-2.22 + + + + + + + + + + + glibc-utf8-locales-2.22 + + + + + + + + + + + acl-2.2.52 + + + + + + + + + + + gmp-6.1.0 + + + + + + + + + + + libcap-2.24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + glibc-utf8-locales-2.22 + + + + + + + + + + + gcc-4.9.3 + + + + + + + + + + + ld-wrapper-boot3-0 + + + + + + + + + + + binutils-cross-boot0-2.25.1 + + + + + + + + + + + make-boot0-4.1 + + + + + + + + + + + di + + utils-boot0-3.3 + + + + + + + + + + + + ndutils-boot0-4.6.0 + + + + + + + + + + + + le-boot0-5.25 + + + + + + + + + + + bootstrap-binaries-0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ed-1.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + libsigsegv-2.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perl-boot0-5.22.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perl-5.22.1 + + + + + + + + + + + acl-2.2.52 + + + + + + + + + + + gmp-6.1.0 + + + + + + + + + + + libcap-2.24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pkg-con + + g-0.29 + + + + + + + + + + + guile-2.0.11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bison-3.0.4 + + + + + + + + + + + readline-6.3 + + + + + + + + + + + ncurses-6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gcc-cross-boot0-wrapped-4.9.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + texinfo-6.0 + + + + + + + + + + + bash-static-4.3.42 + + + + + + + + + + + libstdc++-4.9.3 + + + + + + + + + + + zlib-1.2.8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perl-boot0-5.22.1 + + + + + + + + + + + gettext-boot0-0.19.7 + + + + + + + + + + + + + + + + + + gcc-cross-boot0-4.9.3 + + + + + + + + + + + glibc-bootstrap-0 + + + + + + + + + + + gcc-bootstrap-0 + + + + + + + + + + + + + + + + + + linux-libre-headers-3.14.37 + + + + + + + + + + + + + + + + + + gzip-1.6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gettext-0.19.7 + + + + + + + + + + + attr-2.4.47 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + m4-1.4.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gzip-1.6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + guile-bootstrap-2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + binutils-bootstrap-0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gettext-0.19.7 + + + + + + + + + + + attr-2.4.47 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + m4-1.4.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gcc-cross-boot0-wrapped-4.9.3 + + + + + + + + + + + glibc-intermediate-2.22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + m4-1.4.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + expat-2.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lzip-1.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pkg-con + + g-0.29 + + + + + + + + + + + lib + + -3.2.1 + + + + + + + + + + + readline-6.3 + + + + + + + + + + + libunistring-0.9.6 + + + + + + + + + + + libltdl-2.4.6 + + + + + + + + + + + libgc-7.4.2 + + + + + + + + + + + gmp-6.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ncurses-6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + libatomic-ops-7.4.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + m4-1.4.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + expat-2.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Very. + + + + + diff --git a/talks/2023-dfn/bonus.svg b/talks/2023-dfn/bonus.svg new file mode 100644 index 0000000..a1a09dc --- /dev/null +++ b/talks/2023-dfn/bonus.svg @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + BONUS! + + + + diff --git a/talks/2023-dfn/conda1.svg b/talks/2023-dfn/conda1.svg new file mode 100644 index 0000000..6faad1b --- /dev/null +++ b/talks/2023-dfn/conda1.svg @@ -0,0 +1,422 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + ? + Conda + + + + diff --git a/talks/2023-dfn/conda2.svg b/talks/2023-dfn/conda2.svg new file mode 100644 index 0000000..91b3e9c --- /dev/null +++ b/talks/2023-dfn/conda2.svg @@ -0,0 +1,8388 @@ + + + +image/svg+xml?Conda diff --git a/talks/2023-dfn/containers-details.svg b/talks/2023-dfn/containers-details.svg new file mode 100644 index 0000000..9ef3f83 --- /dev/null +++ b/talks/2023-dfn/containers-details.svg @@ -0,0 +1,614 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + are not magic + Containers + Namespaces + pidnetipcmntutsuser + process tablenetworkinginter process commsfile system mount pointsunix time sharinguser ids + + + + + diff --git a/talks/2023-dfn/containers.svg b/talks/2023-dfn/containers.svg new file mode 100644 index 0000000..72bad2c --- /dev/null +++ b/talks/2023-dfn/containers.svg @@ -0,0 +1,584 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + to the rescue? + Containers + + + + + + + + + + diff --git a/talks/2023-dfn/demo-home/hello.patch b/talks/2023-dfn/demo-home/hello.patch new file mode 100644 index 0000000..b7e523a --- /dev/null +++ b/talks/2023-dfn/demo-home/hello.patch @@ -0,0 +1,24 @@ +diff -ru hello-2.12.1.original/src/hello.c hello-2.12.1/src/hello.c +--- hello-2.12.1.original/src/hello.c 2020-03-07 19:53:27.000000000 +0100 ++++ hello-2.12.1/src/hello.c 2023-09-18 18:19:57.321198481 +0200 +@@ -146,7 +146,7 @@ + #endif + + /* Having initialized gettext, get the default message. */ +- greeting_msg = _("Hello, world!"); ++ greeting_msg = _("Greeting, my fellow humans!"); + + /* Even exiting has subtleties. On exit, if any writes failed, change + the exit status. The /dev/full device on GNU/Linux can be used for +diff -ru hello-2.12.1.original/tests/hello-1 hello-2.12.1/tests/hello-1 +--- hello-2.12.1.original/tests/hello-1 2020-03-07 19:53:27.000000000 +0100 ++++ hello-2.12.1/tests/hello-1 2023-09-18 18:22:12.418622015 +0200 +@@ -21,7 +21,7 @@ + + tmpfiles="hello-test1.ok" + cat < hello-test1.ok +-Hello, world! ++Greeting, my fellow humans! + EOF + + tmpfiles="$tmpfiles hello-test1.out" diff --git a/talks/2023-dfn/demo.org b/talks/2023-dfn/demo.org new file mode 100644 index 0000000..c7a5b6c --- /dev/null +++ b/talks/2023-dfn/demo.org @@ -0,0 +1,13 @@ +#+begin_src sh +$ guix build hello +/gnu/store/5mqwac3zshjjn1ig82s12rbi7whqm4n8-hello-2.12.1 + +$ guix build hello --with-patch=hello=hello.patch +/gnu/store/3pryp1g7njm3zs9icq576zy8sf9sn6af-hello-2.12.1 + +$ guix build hello --with-configure-flag=hello=--with-packager=rekado +/gnu/store/9siab04l7zmaykn0mqm8wx7fgr4s5a00-hello-2.12.1 + +$ guix build hello --with-c-toolchain=hello=gcc@11 +/gnu/store/p172s3bgyi42dnw174qnfglmjy0mnfnx-hello-2.12.1 +#+end_src diff --git a/talks/2023-dfn/demo.svg b/talks/2023-dfn/demo.svg new file mode 100644 index 0000000..77d0ff6 --- /dev/null +++ b/talks/2023-dfn/demo.svg @@ -0,0 +1,418 @@ + + + +image/svg+xmlDEMO!terribly bored?check out the refcard:https://guix.gnu.org/guix-refcard.pdf diff --git a/talks/2023-dfn/describe.svg b/talks/2023-dfn/describe.svg new file mode 100644 index 0000000..603d27c --- /dev/null +++ b/talks/2023-dfn/describe.svg @@ -0,0 +1,486 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + Generation 38 Sep 18 2023 13:01:07 (current) nonguix bb184bd repository URL: https://gitlab.com/nonguix/nonguix branch: master commit: bb184bd0a8f91beec3a00718759e96c7828853de guix 2737099 repository URL: https://git.savannah.gnu.org/git/guix.git branch: master commit: 273709932fa47f6ae56c96564a9415fdbff4a169 + + + describe + guix + + + + diff --git a/talks/2023-dfn/docker-pack.svg b/talks/2023-dfn/docker-pack.svg new file mode 100644 index 0000000..6aea1e5 --- /dev/null +++ b/talks/2023-dfn/docker-pack.svg @@ -0,0 +1,695 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + guix pack --format docker python python-numpy + /gnu/store/ …-docker-pack.tar.gz + + + + + + + LOL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/dockerfile.svg b/talks/2023-dfn/dockerfile.svg new file mode 100644 index 0000000..f9b312f --- /dev/null +++ b/talks/2023-dfn/dockerfile.svg @@ -0,0 +1,31773 @@ + + + +image/svg+xmlFROM amd64/debian:stretchRUN apt-get update && \ apt-get install git make \ curl gcc g++ ...RUN curl -L -O https://... && \ ... && \ make -j 4 && ...RUN git clone https://... && \ ... && \ make ... /usr/local/lib/...The Emperor's New Clothes, Angela Rizza, 2012 diff --git a/talks/2023-dfn/end.svg b/talks/2023-dfn/end.svg new file mode 100644 index 0000000..96b11bf --- /dev/null +++ b/talks/2023-dfn/end.svg @@ -0,0 +1,503 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + https://hpc.guix.infohttps://guix.gnu.orghttps://guix.gnu.org/guix-refcard.pdf + Let’s talk! + + #guix on libera.chatricardo.wurmus@mdc-berlin.de + Learn more + + + + + + + + + + + diff --git a/talks/2023-dfn/env.svg b/talks/2023-dfn/env.svg new file mode 100644 index 0000000..5f7a30b --- /dev/null +++ b/talks/2023-dfn/env.svg @@ -0,0 +1,478 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + $ which octavewhich: no octave ...$ guix shell octave[env] $ which octave/gnu/store/...-profile/bin/octave[env] $ exit$ which octavewhich: no octave ... + + + shell + guix + + + + diff --git a/talks/2023-dfn/functional-thesis.svg b/talks/2023-dfn/functional-thesis.svg new file mode 100644 index 0000000..31ee9d4 --- /dev/null +++ b/talks/2023-dfn/functional-thesis.svg @@ -0,0 +1,337 @@ + + + +image/svg+xmlThe Purely Functional SoftwareDeployment ModelDolstra, E. (2006) diff --git a/talks/2023-dfn/functional1a.svg b/talks/2023-dfn/functional1a.svg new file mode 100644 index 0000000..eabf826 --- /dev/null +++ b/talks/2023-dfn/functional1a.svg @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/functional1b.svg b/talks/2023-dfn/functional1b.svg new file mode 100644 index 0000000..9fba464 --- /dev/null +++ b/talks/2023-dfn/functional1b.svg @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + headerssourcesbuild toolslibraries... + + + diff --git a/talks/2023-dfn/functional1c.svg b/talks/2023-dfn/functional1c.svg new file mode 100644 index 0000000..9edc48d --- /dev/null +++ b/talks/2023-dfn/functional1c.svg @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + headerssourcesbuild toolslibraries... + + + + cabba9e-samtools-1.7/ bin samtools lib ... + + + + + + + + + diff --git a/talks/2023-dfn/gc-1.svg b/talks/2023-dfn/gc-1.svg new file mode 100644 index 0000000..fd3e03a --- /dev/null +++ b/talks/2023-dfn/gc-1.svg @@ -0,0 +1,826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 43 + /gnu/store hscq14x...-profile bin samtools bowtie2 + + + + + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + + lud0v1c...-bowtie-2.2.4 bin bowtie2 + + + + + + + + z3braf1sh...-profile bin samtools + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/gc-2.svg b/talks/2023-dfn/gc-2.svg new file mode 100644 index 0000000..5edba8c --- /dev/null +++ b/talks/2023-dfn/gc-2.svg @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 43 + /gnu/store + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + lud0v1c...-bowtie-2.2.4 bin bowtie2 + + + + + + + z3braf1sh...-profile bin samtools + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/gc-3.svg b/talks/2023-dfn/gc-3.svg new file mode 100644 index 0000000..238fe7d --- /dev/null +++ b/talks/2023-dfn/gc-3.svg @@ -0,0 +1,737 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 43 + /gnu/store + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + + + + z3braf1sh...-profile bin samtools + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/giraffe.svg b/talks/2023-dfn/giraffe.svg new file mode 100644 index 0000000..aeca81d --- /dev/null +++ b/talks/2023-dfn/giraffe.svg @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + Did we take a wrong turn? + + + + + + + C.H. Pander & E. d’Alton“Die vergleichende Osteologie” (1821) + https://doi.org/10.5962/bhl.title.61021 + + + + diff --git a/talks/2023-dfn/guix-architecture.svg b/talks/2023-dfn/guix-architecture.svg new file mode 100644 index 0000000..af2e768 --- /dev/null +++ b/talks/2023-dfn/guix-architecture.svg @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + RPCs + + + Build daemon + + + + + + + + + + + Isolated build processes + chroot with declared inputs + + + + Store + + + + + + Guix client + (guix packages)(guix store) + + + + + diff --git a/talks/2023-dfn/guix-features.svg b/talks/2023-dfn/guix-features.svg new file mode 100644 index 0000000..a1e7eaf --- /dev/null +++ b/talks/2023-dfn/guix-features.svg @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reproducible deployment of28,000+ packagesCaptures all inputs,including configuration spaceBuilds software in isolation + + + + diff --git a/talks/2023-dfn/hpc.svg b/talks/2023-dfn/hpc.svg new file mode 100644 index 0000000..bb5f8cc --- /dev/null +++ b/talks/2023-dfn/hpc.svg @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P + C + + + H + P + C + H + P + C + H + P + C + H + + + diff --git a/talks/2023-dfn/kernel.svg b/talks/2023-dfn/kernel.svg new file mode 100644 index 0000000..bf12d83 --- /dev/null +++ b/talks/2023-dfn/kernel.svg @@ -0,0 +1,1636 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Linuxprocessscheduler + + Linuxmemorymanager + + IPCmanager + I/Ointerface + + Networkinterface + + Virtualfilesystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + diagram by Shmuel Csaba Otto Traian; GNU FDL 1.3 & CC-BY-SA 3.0 + + + + + + + + + + function call + system call + + + + diff --git a/talks/2023-dfn/manifest.scm b/talks/2023-dfn/manifest.scm new file mode 100644 index 0000000..7600f59 --- /dev/null +++ b/talks/2023-dfn/manifest.scm @@ -0,0 +1,54 @@ +(use-modules (gnu) + (gnu packages) + (guix build-system font) + (guix packages) + (guix download) + (guix utils) + (guix licenses)) + +(define font-vollkorn + (package + (name "font-vollkorn") + (version "4.105") + (source (origin + (method url-fetch/zipbomb) + (uri (string-append + "http://vollkorn-typeface.com/download/vollkorn-" + (string-replace-substring version "." "-") + ".zip")) + (sha256 + (base32 + "1xca3qq62ii6lh6j5lyg7kbvqa0pf8c12knkp3lz2akwjsfyll76")))) + (build-system font-build-system) + (home-page "http://vollkorn-typeface.com/") + (synopsis "Serif typeface") + (description "Vollkorn is a typeface for bread and butter use.") + (license silofl1.1))) + +(define font-league-gothic + (package + (name "font-league-gothic") + (version "1.601") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/theleagueof/league-gothic/releases/" + "download/" version "/LeagueGothic-" version ".zip")) + (sha256 + (base32 + "021smilmrqk70s4vgwry15zzah1cz3fkfmw5dkjvyvxsviz8xdxw")))) + (build-system font-build-system) + (home-page "https://www.theleagueofmoveabletype.com/league-gothic") + (synopsis "Gothic typeface") + (description "League Gothic is a revival of an old classic: +Alternate Gothic #1. It was originally designed by Morris Fuller +Benton for the American Type Founders Company in 1903. The company +went bankrupt in 1993, and since the original typeface was created +before 1923, the typeface is in the public domain. League Gothic is +derived from this typeface.") + (license silofl1.1))) + +(packages->manifest + (cons* font-vollkorn font-league-gothic + (specifications->packages + (list "font-fira-code" "ghostscript" "librsvg" "make")))) diff --git a/talks/2023-dfn/manifest.svg b/talks/2023-dfn/manifest.svg new file mode 100644 index 0000000..4b42141 --- /dev/null +++ b/talks/2023-dfn/manifest.svg @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + (specifications->manifest (list "r-minimal" "r-genomation" "python" "python-pytorch" "samtools@0.1")) + + + shell -m manifest.scm + guix + + + + diff --git a/talks/2023-dfn/profile-0.svg b/talks/2023-dfn/profile-0.svg new file mode 100644 index 0000000..d4cb7a3 --- /dev/null +++ b/talks/2023-dfn/profile-0.svg @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 42 + /gnu/store hscq14x...-profile bin samtools bowtie2 + + + + + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + + + lud0v1c...-bowtie-2.2.4 bin bowtie2 + + + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/profile-1.svg b/talks/2023-dfn/profile-1.svg new file mode 100644 index 0000000..b840f08 --- /dev/null +++ b/talks/2023-dfn/profile-1.svg @@ -0,0 +1,853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 42 43 + /gnu/store hscq14x...-profile bin samtools bowtie2 + + + + + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + + + lud0v1c...-bowtie-2.2.4 bin bowtie2 + + + + + + + + + z3braf1sh...-profile bin samtools + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/rekado.svg b/talks/2023-dfn/rekado.svg new file mode 100644 index 0000000..adaf36a --- /dev/null +++ b/talks/2023-dfn/rekado.svg @@ -0,0 +1,375 @@ + + + +image/svg+xmlRicardo Wurmusmy first computersysadmin at MDC since 2014Guix contributor since 2014writes Lisp for funEmacs or vim? Yes.Ruben de Rijcke, CC BY-SA 3.0,via Wikimedia Commons diff --git a/talks/2023-dfn/reproducibility.svg b/talks/2023-dfn/reproducibility.svg new file mode 100644 index 0000000..931c226 --- /dev/null +++ b/talks/2023-dfn/reproducibility.svg @@ -0,0 +1,488 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + Dispel doubts + Facilitate further experimentation + + 2 + + 1 + Goals of Reproducibility + + + + diff --git a/talks/2023-dfn/reproducibility1.svg b/talks/2023-dfn/reproducibility1.svg new file mode 100644 index 0000000..e69de29 diff --git a/talks/2023-dfn/reproducibility2.svg b/talks/2023-dfn/reproducibility2.svg new file mode 100644 index 0000000..5933df5 --- /dev/null +++ b/talks/2023-dfn/reproducibility2.svg @@ -0,0 +1,509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + https://blog.khinsen.net/posts/2017/01/24/reproducibility-does-not-imply-reproduction + + + + [T]here is no point in repeating a computation identically. The results will be the same. So the only reason to re-run a computation is when there are doubts about the exact software or data that were used […]. + +The point of computational reproducibility is to dispel those doubts. The holy grail of computational reproducibility is not a world in which every computation is run five times, but a world in which a straightforward and cheap analysis of the published material verifies that it is reproducible, so that there is no need to run it again. + + + + + diff --git a/talks/2023-dfn/reproducible-2.svg b/talks/2023-dfn/reproducible-2.svg new file mode 100644 index 0000000..760ad20 --- /dev/null +++ b/talks/2023-dfn/reproducible-2.svg @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/reproducible-3.svg b/talks/2023-dfn/reproducible-3.svg new file mode 100644 index 0000000..6006e18 --- /dev/null +++ b/talks/2023-dfn/reproducible-3.svg @@ -0,0 +1,929 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How hard could this possibly be? + + + + + + + + diff --git a/talks/2023-dfn/reproducible-4.svg b/talks/2023-dfn/reproducible-4.svg new file mode 100644 index 0000000..b512ed6 --- /dev/null +++ b/talks/2023-dfn/reproducible-4.svg @@ -0,0 +1,706 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + To repeat an experimentwe first need toreproduce its environment + + + + + + + diff --git a/talks/2023-dfn/rollback.svg b/talks/2023-dfn/rollback.svg new file mode 100644 index 0000000..5871dfe --- /dev/null +++ b/talks/2023-dfn/rollback.svg @@ -0,0 +1,854 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + /home/rekado/.guix-profile + /var/guix/... guix-profile 42 43 + /gnu/store hscq14x...-profile bin samtools bowtie2 + + + + + + rhrdst11m...-samtools-1.2 bin samtools include + + + + + + + + lud0v1c...-bowtie-2.2.4 bin bowtie2 + + + + + + + + + z3braf1sh...-profile bin samtools + + + + + + + ... + + + + + + diff --git a/talks/2023-dfn/script.pdfpc b/talks/2023-dfn/script.pdfpc new file mode 100644 index 0000000..8c04baf --- /dev/null +++ b/talks/2023-dfn/script.pdfpc @@ -0,0 +1,569 @@ +{ + "pdfpcFormat": 1, + "duration": 60, + "endSlide": 34, + "disableMarkdown": true, + "noteFontSize": 14, + "pages": [ + { + "idx": 0, + "label": "1", + "overlay": 0, + "note": "Reproducible software deployment in scientific computing\n\n" + }, + { + "idx": 1, + "label": "2", + "overlay": 0, + "note": "For most of my career I’ve been doing\nwhat would nowadays be called “DevOps”, an unholy mix of system\nadministration and software engineering for enterprises that don’t\nwant to pay enough money for either. These days I mostly write Lisp\ncode and do hazy things in the cloud.\n\nSince 2014 I work at the MDC in Berlin to develop and provide support\nfor reproducible scientific software and reproducible science. In the\nsame period I’ve been contributing to the GNU Guix project and\nvolunteered as a co-maintainer for a couple of years.\n\n" + }, + { + "idx": 2, + "label": "3", + "overlay": 0, + "note": "What’s in a title?\nLet’s work our way backwards: we use computers (laptops, workstations,\nHPC clusters, rented on-demand virtual machines known as the “cloud”)\nto do science. The scientific method involves testing hypotheses\nthrough repeated experiments. In scientific computing these\nexperiments largely happen by executing software that has been\ndeployed (or literally “rolled out”) on the computing substrate.\n\nThe last word — “reproducible” — is the most confusing, because it\nmeans different things to different people. For some definitions an\nexperiment is considered reproducible when the most important ideas\nare described so that someone else could perform a similar experiment.\nSome call software installation “reproducible” when installation can\nbe scripted. Some insist that an experiment is reproducible only when\nall experimental conditions are comprehensively described and the\nresult is invariably identical on every run.\n\nFor my purposes today, reproducibility is the ability to rerun an\nexperiment and produce results that are virtually indistinguishable\nfrom the published results.\n\n" + }, + { + "idx": 3, + "label": "4", + "overlay": 0, + "note": "Let’s take a step back and ask ourselves why reproducibility is +desirable at all. There are two goals: + ++ establish trust, and ++ facilitate further experimentation. + +Konrad Hinsen, a researcher at the French CNRS, has written +extensively on the methodology of computational science. In a blog +post entitled “Reproducibility does not imply reproduction” he +explains the role of doubt: +" + }, + { + "idx": 4, + "label": "5", + "overlay": 0, + "note": " +[T]here is no point in repeating a computation identically. The +results will be the same. So the only reason to re-run a computation +is when there are doubts about the exact software or data that were +used […]. + +The point of computational reproducibility is to dispel those +doubts. The holy grail of computational reproducibility is not a world +in which every computation is run five times, but a world in which a +straightforward and cheap analysis of the published material verifies +that it is reproducible, so that there is no need to run it again. +" + }, + { + "idx": 5, + "label": "6", + "overlay": 0, + "note": " +The second point is to facilitate experimentation. We need to have +fine-grain control over the variables that might affect the outcome of +our scientific experiments. We want to start with a known good state +and make deliberate changes to one variable at a time, so that we can +be sure that changes in the results are only due the variables we +deliberately changed. + +So we are in need of a system with strong reproducibility guarantees +and flexible high-level abstractions that enable us to do /interesting/ +things to the software environment instead of being sentenced to +low-level drugdery. +" + }, + { + "idx": 6, + "label": "7", + "overlay": 0, + "note": " +The first condition when repeating an experiment is to reproduce its +environment. In computational science the experimental environment is +largely defined by software, so we need to be able to easily reproduce +the complete software environment. +" + }, + { + "idx": 7, + "label": "8", + "overlay": 0, + "note": " +Examples include: + ++ a researcher resumes a project after a few months on the same + computer + ++ a researcher begins collaboration with a colleague and wants to set + up the same software on the colleague’s computer + ++ the researcher wants to run the computations on an HPC cluster and + needs to deploy the software to an HPC cluster + ++ after publication independent researchers elsewhere want to continue + the project + ++ a decade later researchers want to revisit the experiment in light + of new discoveries +" + }, + { + "idx": 8, + "label": "9", + "overlay": 0, + "note": " +All of these scenarios are fundamentally the same. It’s just bits on +deterministic machines, right? How hard could it possibly be to +recreate a software environment? +" + }, + { + "idx": 9, + "label": "10", + "overlay": 0, + "note": " +Turns out that the scale of the problem is often much larger than +anticipated. + +What you see here are dozens of interconnected software packages. A +package could be a software library or an application. Changes to any +of these packages could be significant. We don’t know if all of them +are relevant for the subset of the behaviors we care about, but we +can’t easily dismiss them either. + +Only *one* of these nodes corresponds to the code of the application +itself — if all you know is the application name and its version you +are missing a very large number of other ingredients that potentially +influence the behavior of the application. + +On the other hand, a user who receives a comprehensive book full of +all library names and version strings and configuration options would +still have no practical way of actually building an environment +according to these specifications. +" + }, + { + "idx": 10, + "label": "11", + "overlay": 0, + "note": " +* What options do we have? + +In the 1980s and early 90s people built software manually. We would +configure, make, and make install libraries and applications. In the +early days this was fine because most applications would depend only +on a very small number of large domain-specific libraries. + +In the late 1990s we had package managers such as APT on Debian or +RPM, so system administrators could more easily install large amounts +of software into a single global namespace for all users. Selected +alternative tools would be provided on shared systems (such as HPC +clusters or supercomputers) via environment modules: a set of +environment variables pointing to alternative locations in the shared +file system to override selected defaults. + +These systems are heavily dependent on system administrators who +provide global defaults, install alternatives globally, and manually +resolve combinatorial conflicts. The difficulty in avoiding these +conflicts is one of the reasons why environment modules rarely +represent the full diversity of user requirements. +" + }, + { + "idx": 11, + "label": "12", + "overlay": 0, + "note": " + * Example: Conda + +Enter Conda, an example of user-controlled management of software, +independent from system administrators. Conda is incredibly popular +because it solves a common problem: it frees users on a shared system +from having to petition system administrators to install software for +them globally, enabling them to install applications and libraries +into independent environments. It performs this task very well. +" + }, + { + "idx": 12, + "label": "13", + "overlay": 0, + "note": " +And yet Conda is know to have repeatedly failed to recreate +environments. Conda lets users impose version constraints for their +software environments. A SAT solver then finds an actual environment +that satisfies these constraints. Since the result of the solver +depends on the state of the Conda binary repositories the result of +the solver can vary with time. + +An even more common problem: Conda binaries often contain references +to system libraries such as symbols in the GNU C library which may +only be satisfied by *some* GNU+Linux distributions (say a recent +Ubuntu) and not others (a dusty RHEL). Conda environments are +incomplete and lossy. + +In recent years, steps have been taken to refine the constraints to +allow for a longer shelf-life of exported environments, but it is hard +to predict when old environment files will stop working again due to +the lack of a rigorous method of capturing all ingredients. +" + }, + { + "idx": 13, + "label": "14", + "overlay": 0, + "note": " +* Containers and reproducibility + +Another popular attempt to bundle up software environments is to use +container tools such as Docker. Docker and tools like it made the +fiddly Linux kernel features of process isolation and file system +virtualization easily accessible. + +Let's take a quick look at what the kernel does. + +" + }, + { + "idx": 14, + "label": "15", + "overlay": 0, + "note": " + +The kernel Linux presents a number of interfaces to the C library and +low level applications. Your code --- sometimes through many +intermediaries --- talks to the kernel either via the C library or +less commonly via system calls. + +These kernel interfaces together provide processes with the familiar +Unix persona. + +When the kernel prepares to launch a process it creates a view on the +slice of the system hardware that is relevant to the process: the +process appears to have exclusive access to the CPU and memory, while +the kernel actually just virtualizes these resources. +" + }, + { + "idx": 15, + "label": "16", + "overlay": 0, + "note": " +The kernel can *also* virtualize other resources that make up the Unix +interface. It can present independent namespaces for different +subsystems to a process. These namespaces include the process table, +network devices, facilities for inter-process communication, the file +system, user ids, and virtual time. + +Give a process an empty mount namespace and it cannot see the host +system's files any more. Give it a separate user namespace and it +will think that it is the only user on the system, and also has root +access. + +In the common case of Docker (or Singularity/Apptainer), people run a +process in a separate mount namespace, so that it cannot access the +root file system (and all the globally installed software) and instead +uses a provided binary bundle as the root file system. +" + }, + { + "idx": 16, + "label": "17", + "overlay": 0, + "note": " +This makes it much easier to *install* an application, but there is no +way to *recreate* the bundled root file system independently, exactly, +or with deliberate fine-grain modifications. This fine-grain control +is a necessary requirement for the interactive exploratory process of +computational science. + +We don’t only want to clone an environment, but we may want to have +the option of making *specific* changes without having anything else in +the environment change. + +Containers lack transparency. Looking at the binary image you cannot +tell what ingredients really went into it. You have no guarantee that +the binary you *received* really corresponds to the source code you +*reviewed*. +" + }, + { + "idx": 17, + "label": "18", + "overlay": 0, + "note": " + +When container images are built, they modify or extend existing +third-party images by fetching network resources that are not +guaranteed to be immutable as time passes. Dockerfiles are imperative +and execute traditional package management commands or perform +downloads and successively mutate the new root file system. We end up +with the raw bits of a new root file system and sacrifice any higher +order abstractions. + +When building a container image from a Dockerfile on one day and again +a month later it is not unusual to get two very different containers. +The secret ingredient in even the most transparent container smoothie +is the current state of the internet. + +" + }, + { + "idx": 18, + "label": "19", + "overlay": 0, + "note": " + +So far we looked at software management approaches that are derived +from the traditional approach of mutating shared storage. Even with +modern containers we still work with a single blob of a shared root +file system; we just ignore the existing system’s file system. + +Computing practices are not so different from biological evolution. +Evolution is descent with modification. All modification is subject +to the cumulative constraints of past modifications; this means that +backtracking is often prohibitively expensive. Giraffes, for example, +are stuck with their ridiculously long laryngeal nerve that takes a +detour from the head down the neck, around the aortic arch, all the +way back up to the head. + +Software deployment practices likewise are limited by the burden of +decisions in the past that continue to influence the trajectory of our +projects. What if we didn’t try to tack on reproducibility onto +legacy methods of software installation but instead built a system +from reproducible primitives? +" + }, + { + "idx": 19, + "label": "20", + "overlay": 0, + "note": " +* The functional approach + +In 2006 Eelco Dolstra published his PhD thesis entitled “The Purely +Functional Software Deployment Model”. The core idea is simple: treat +the transformation from source code and tools to executable files as a +pure function. The output of a function is fully determined by its +inputs and nothing else. +" + }, + { + "idx": 20, + "label": "21", + "overlay": 0, + "note": " +* The functional approach + +In 2006 Eelco Dolstra published his PhD thesis entitled “The Purely +Functional Software Deployment Model”. The core idea is simple: treat +the transformation from source code and tools to executable files as a +pure function. The output of a function is fully determined by its +inputs and nothing else. +" + }, + { + "idx": 21, + "label": "22", + "overlay": 0, + "note": " + +Inputs are source code files, +any tools that run to translate the code to a binary, +any libraries needed by these tools, +any libraries that the software needs to link with, etc. +" + }, + { + "idx": 22, + "label": "23", + "overlay": 0, + "note": " +The output is a tree of files, some executable some not." + }, + { + "idx": 23, + "label": "24", + "overlay": 0, + "note": " + +GNU Guix is one implementation of this functional idea. + +Guix comes with a very large collection of about 28000 package +recipes that are each built in complete isolation (no internet, no +root file system, no /bin, no /lib). This is enforced by a daemon +that spawns jails where dedicated unprivileged user accounts build +software. When compiling these packages only declared inputs are +available, nothing else. The resulting files are stored in a unique +output directory that is derived from the set of all inputs. Any +change to any of the inputs results in a new output directory. + +This simple property ensures that countless variants of applications +and libraries can be installed on the same system without conflicts. +Existing software doesn’t affect new software, and new software cannot +affect existing software. + +A Guix package is unambiguously described by its complete dependency +graph; this includes all libraries it needs, any tools that are used +to create it, any source code, and any configurations. + +Building the same package twice on different machines will (in the +absence of bugs) result in the exact same files. It doesn’t matter +whether you are using Ubuntu or RHEL, or whether you are doing +this in 2020 or 2024. + +Guix heavily caches builds and deduplicates identical files, so the +overall space consumption is lower than one would expect. + " + }, + { + "idx": 24, + "label": "25", + "overlay": 0, + "note": " + +This same simple idea is easily extended from individual packages to +groups of packages in the same environment... + " + }, + { + "idx": 25, + "label": "26", + "overlay": 0, + "note": " + +...or to lightweight +containers *without* the need to replace the root file system... + + " + }, + { + "idx": 26, + "label": "27", + "overlay": 0, + "note": " +...or even to full blown GNU+Linux systems... + " + }, + { + "idx": 27, + "label": "28", + "overlay": 0, + "note": " + +...whether that be system +containers, virtual machines, or bare-metal installations. + +Let us next look at the simplest features and work our way up. + + " + }, + { + "idx": 28, + "label": "29", + "overlay": 0, + "note": " + +As mentioned earlier, version numbers fail to describe software +completely. + +Let me show you an example with the humble “hello” package. [...] + +All of these applications are “hello” version 2 point 12 point one, but +some have patches, others use GCC 11, and yet others use different +configuration flags. With Guix these are all distinct. + + " + }, + { + "idx": 29, + "label": "30", + "overlay": 0, + "note": " + +“guix build” is a low-level command. Users don’t need to care about +all these /gnu/store locations. They would instead use Guix like a +traditional package manager or like a shell. + +[demo] + " + }, + { + "idx": 30, + "label": "31", + "overlay": 0, + "note": " + +Guix can be used declaratively. A manifest file declares what +software the environment should contain, and Guix can instantiate an +environment according to these specifications. + +Previously I said that recreating environments is just a necessary +step to facilitate further experimentation. Guix has a number of +built-in transformations to modify selected parts of the massive +dependency graph. Libraries can be replaced with variants that are +optimized for specific CPUs, recursively for any package that uses +them. Or a patch can be applied to a selected package, keeping the +rest of the stack unaltered. + +Beyond these transformation presets Guix is fully programmable in +Scheme and packages can be rewritten with the flexibility of a modern +general purpose programming language. + + " + }, + { + "idx": 31, + "label": "32", + "overlay": 0, + "note": " + + All the information about all dependencies of any package + available through Guix is part of Guix itself. So by changing the + version of Guix we can move backwards and forwards in time to + install software as it was available when that particular version + of Guix was current. + +This means that for fully reproducible environments we only need two +pieces of information: + ++ the exact version of Guix we used at the time, and ++ the name(s) of the package(s) +" + }, + { + "idx": 32, + "label": "33", + "overlay": 0, + "note": " +We can let Guix describe itself in a way that it can understand. + +guix describe -f channels > channels.scm + +You can think of the output as a complete snapshot of all the software +known to Guix (including all the relationships between libraries, +configurations, and tools) at this time. +" + }, + { + "idx": 33, + "label": "34", + "overlay": 0, + "note": " + +Given that Guix knows exactly what relationships there are between +applications and their dependencies it can also export all the bits in +whatever format you want. GUIX PACK is a way to generate application +bundles --- in docker format, singularity, or just as a plain tarball. + +This lets you share the bits with people who are not (yet) using Guix. +But remember that the resulting blob is an OUTPUT. By dumping all the +bits into an file system image we lose all the higher level +abstractions that enable us to perform controlled computational +experiments. + +" + } + ] +} diff --git a/talks/2023-dfn/smoothie.svg b/talks/2023-dfn/smoothie.svg new file mode 100644 index 0000000..6f14390 --- /dev/null +++ b/talks/2023-dfn/smoothie.svg @@ -0,0 +1,1216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + lack transparency + + Containers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strawberry? + + whale oil? + + + diff --git a/talks/2023-dfn/summary.svg b/talks/2023-dfn/summary.svg new file mode 100644 index 0000000..5b2939e --- /dev/null +++ b/talks/2023-dfn/summary.svg @@ -0,0 +1,596 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + Reproducibility constrains variablesVersion numbers don't mean muchContainers are outputs, not inputsGuix captures the full dependency graphSysadmins hold the keys + + 2 + + 3 + + 1 + + 4 + + 5 + to practical reproducibility + + + diff --git a/talks/2023-dfn/time-travel.svg b/talks/2023-dfn/time-travel.svg new file mode 100644 index 0000000..5a0020a --- /dev/null +++ b/talks/2023-dfn/time-travel.svg @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + $ guix time-machine -C channels.scm -- \ shell -m manifest.scm + + Snapshot ofall softwareknown to Guix + + Your selection + + + time-machine + guix + + + + diff --git a/talks/2023-dfn/title.svg b/talks/2023-dfn/title.svg new file mode 100644 index 0000000..6a22418 --- /dev/null +++ b/talks/2023-dfn/title.svg @@ -0,0 +1,1146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + Scientific Computing + ReproducibleSoftware Deployment + in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/talks/2023-dfn/title2.svg b/talks/2023-dfn/title2.svg new file mode 100644 index 0000000..845e747 --- /dev/null +++ b/talks/2023-dfn/title2.svg @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + Scientific Computing + ReproducibleSoftware Deployment + in + + + +