a gentle intro functional to package management with GNU Guix Package managers are really useful. But they can be so frustrating! Package managers are really useful. But they can be so frustrating! Version conflicts Old software Suspenseful upgrades The only way is forward Changes affect all users Trust? No package management You are on your own. External repos EPEL, PPAs, AUR... more conflicts, more to trust Application-specific packaging gem, cabal, pip, cpan, npm: more packages, less management Build your own system package Relocatable rpm, deb, PKGBUILD, ... Meta package managers Generate system packages with e.g. fpm Giving up Packaging is hard, let’s take snapshots. Functional packaging headers sources build tools libraries ... cabba9e-emacs-24.5/ bin emacs lib ... Functional packaging Same inputs? Same output! cabba9e-emacs-24.5/ bin emacs lib ... Different inputs? Different outputs. dedbeef-emacs-24.5/ bin emacs lib ... GNU Guix Guix client (guix packages) (guix store) RPCs Build daemon Isolated build processes chroot with declared inputs Store /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 /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 Learn more! #guix on irc.freenode.net http://gnu.org/s/guix rekado@elephly.net