[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/01: talk: Add talk at Sage Days 77.
From: |
Andreas Enge |
Subject: |
01/01: talk: Add talk at Sage Days 77. |
Date: |
Tue, 05 Apr 2016 13:16:59 +0000 |
andreas pushed a commit to branch master
in repository maintenance.
commit 570352a739749adeba059887630a6bf2fc37c0d4
Author: Andreas Enge <address@hidden>
Date: Tue Apr 5 15:15:01 2016 +0200
talk: Add talk at Sage Days 77.
* talks/sage-days-77-2016: New directory.
---
talks/sage-days-77-2016/beamercolorthemeguix.sty | 35 ++
talks/sage-days-77-2016/config-desktop.scm | 50 ++
talks/sage-days-77-2016/config-pari.scm | 57 ++
.../images/debian-upgrade-instructions.png | Bin 0 -> 46091 bytes
.../images/debian-upgrade-warning.png | Bin 0 -> 27798 bytes
talks/sage-days-77-2016/images/docker-security.png | Bin 0 -> 228779 bytes
.../images/graph-parigp-bag-emerged.pdf | Bin 0 -> 64956 bytes
.../images/graph-parigp-packages.pdf | Bin 0 -> 14087 bytes
talks/sage-days-77-2016/images/guixsd.pdf | Bin 0 -> 9478 bytes
talks/sage-days-77-2016/images/hope-hero.jpg | Bin 0 -> 114234 bytes
.../sage-days-77-2016/images/package-managers.png | Bin 0 -> 92567 bytes
talks/sage-days-77-2016/slides.pdf | Bin 0 -> 703363 bytes
talks/sage-days-77-2016/slides.tex | 555 ++++++++++++++++++++
13 files changed, 697 insertions(+), 0 deletions(-)
diff --git a/talks/sage-days-77-2016/beamercolorthemeguix.sty
b/talks/sage-days-77-2016/beamercolorthemeguix.sty
new file mode 100644
index 0000000..4ec058f
--- /dev/null
+++ b/talks/sage-days-77-2016/beamercolorthemeguix.sty
@@ -0,0 +1,35 @@
+% Copyright 2011, 2016 by Andreas Enge
+% adapted from whale
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/licenses/LICENSE for more details.
+
+\mode<presentation>
+\definecolor{guixorange1}{RGB}{243,154,38}
+
+\setbeamercolor*{structure}{fg=guixorange1}
+
+\setbeamercolor*{palette primary}{use=structure,fg=white,bg=structure.fg}
+\setbeamercolor*{palette
secondary}{use=structure,fg=white,bg=structure.fg!75!black}
+\setbeamercolor*{palette
tertiary}{use=structure,fg=white,bg=structure.fg!50!black}
+\setbeamercolor*{palette quaternary}{fg=white,bg=black}
+
+\setbeamercolor*{sidebar}{use=structure,bg=structure.fg}
+
+\setbeamercolor*{palette sidebar primary}{use=structure,fg=structure.fg!10}
+\setbeamercolor*{palette sidebar secondary}{fg=white}
+\setbeamercolor*{palette sidebar tertiary}{use=structure,fg=structure.fg!50}
+\setbeamercolor*{palette sidebar quaternary}{fg=white}
+
+\setbeamercolor {block body}{use=structure,bg=structure.fg!5}
+
+\setbeamercolor*{titlelike}{parent=palette primary}
+
+\setbeamercolor*{separation line}{}
+\setbeamercolor*{fine separation line}{}
+\mode
+<all>
diff --git a/talks/sage-days-77-2016/config-desktop.scm
b/talks/sage-days-77-2016/config-desktop.scm
new file mode 100644
index 0000000..244a594
--- /dev/null
+++ b/talks/sage-days-77-2016/config-desktop.scm
@@ -0,0 +1,50 @@
+;; This is an operating system configuration template
+;; for a "bare bones" setup, with no X11 display server.
+
+(use-modules (gnu) (gnu system nss))
+(use-service-modules desktop ssh)
+(use-package-modules certs)
+
+(operating-system
+ (host-name "bugis")
+ (timezone "Europe/Berlin")
+ (locale "de_DE.utf8")
+
+ ;; Assuming /dev/sdX is the target hard disk, and "root" is
+ ;; the label of the target root file system.
+ (bootloader (grub-configuration (device "/dev/sda")))
+ (mapped-devices (list (mapped-device
+ (source "/dev/sda2")
+ (target "home")
+ (type luks-device-mapping))))
+ (file-systems (cons* (file-system
+ (device "guixsd")
+ (title 'label)
+ (mount-point "/")
+ (type "ext4"))
+ (file-system
+ (device "/dev/mapper/home")
+ (title 'device)
+ (mount-point "/home")
+ (type "ext4"))
+ %base-file-systems))
+
+ ;; This is where user accounts are specified. The "root"
+ ;; account is implicit, and is initially created with the
+ ;; empty password.
+ (users (cons* (user-account
+ (name "enge")
+ (comment "Enge")
+ (group "users")
+ (supplementary-groups '("audio" "video" "netdev"))
+ (home-directory "/home/enge"))
+ %base-user-accounts))
+
+ ;; Globally-installed packages.
+ (packages (cons* nss-certs %base-packages))
+
+ (services (cons* (xfce-desktop-service)
+ %desktop-services))
+
+ (name-service-switch %mdns-host-lookup-nss))
+
diff --git a/talks/sage-days-77-2016/config-pari.scm
b/talks/sage-days-77-2016/config-pari.scm
new file mode 100644
index 0000000..9ca1f57
--- /dev/null
+++ b/talks/sage-days-77-2016/config-pari.scm
@@ -0,0 +1,57 @@
+;; This is an operating system configuration template
+;; for a "bare bones" setup, with no X11 display server.
+
+(use-modules (gnu) (gnu system nss))
+(use-service-modules desktop ssh xorg)
+(use-package-modules algebra xfce certs)
+
+(operating-system
+ (host-name "bugis")
+ (timezone "Europe/Berlin")
+ (locale "en_US.utf8")
+
+ ;; Assuming /dev/sdX is the target hard disk, and "root" is
+ ;; the label of the target root file system.
+ (bootloader (grub-configuration (device "/dev/sda")))
+ (mapped-devices (list (mapped-device
+ (source "/dev/sda2")
+ (target "home")
+ (type luks-device-mapping))))
+ (file-systems (cons* (file-system
+ (device "guixsd")
+ (title 'label)
+ (mount-point "/")
+ (type "ext4"))
+ (file-system
+ (device "/dev/mapper/home")
+ (title 'device)
+ (mount-point "/home")
+ (type "ext4"))
+ %base-file-systems))
+
+ ;; This is where user accounts are specified. The "root"
+ ;; account is implicit, and is initially created with the
+ ;; empty password.
+ (users (cons* (user-account
+ (name "enge")
+ (comment "Enge")
+ (group "users")
+ (supplementary-groups '("audio" "video" "netdev"))
+ (home-directory "/home/enge"))
+ %base-user-accounts))
+
+ ;; Globally-installed packages.
+ (packages (cons* pari-gp nss-certs %base-packages))
+
+ (services
+ (cons* (xfce-desktop-service)
+ (modify-services %desktop-services
+ (slim-service-type config =>
+ (slim-configuration
+ (inherit config)
+ (auto-login? #t)
+ (default-user "enge")
+ (auto-login-session #~(string-append #$xfce4-session
"/bin/startxfce4")))))))
+
+ (name-service-switch %mdns-host-lookup-nss))
+
diff --git a/talks/sage-days-77-2016/images/debian-upgrade-instructions.png
b/talks/sage-days-77-2016/images/debian-upgrade-instructions.png
new file mode 100644
index 0000000..09d74f0
Binary files /dev/null and
b/talks/sage-days-77-2016/images/debian-upgrade-instructions.png differ
diff --git a/talks/sage-days-77-2016/images/debian-upgrade-warning.png
b/talks/sage-days-77-2016/images/debian-upgrade-warning.png
new file mode 100644
index 0000000..d7fa594
Binary files /dev/null and
b/talks/sage-days-77-2016/images/debian-upgrade-warning.png differ
diff --git a/talks/sage-days-77-2016/images/docker-security.png
b/talks/sage-days-77-2016/images/docker-security.png
new file mode 100644
index 0000000..dcde4f9
Binary files /dev/null and b/talks/sage-days-77-2016/images/docker-security.png
differ
diff --git a/talks/sage-days-77-2016/images/graph-parigp-bag-emerged.pdf
b/talks/sage-days-77-2016/images/graph-parigp-bag-emerged.pdf
new file mode 100644
index 0000000..32d19ad
Binary files /dev/null and
b/talks/sage-days-77-2016/images/graph-parigp-bag-emerged.pdf differ
diff --git a/talks/sage-days-77-2016/images/graph-parigp-packages.pdf
b/talks/sage-days-77-2016/images/graph-parigp-packages.pdf
new file mode 100644
index 0000000..49ebb19
Binary files /dev/null and
b/talks/sage-days-77-2016/images/graph-parigp-packages.pdf differ
diff --git a/talks/sage-days-77-2016/images/guixsd.pdf
b/talks/sage-days-77-2016/images/guixsd.pdf
new file mode 100644
index 0000000..e4a772d
Binary files /dev/null and b/talks/sage-days-77-2016/images/guixsd.pdf differ
diff --git a/talks/sage-days-77-2016/images/hope-hero.jpg
b/talks/sage-days-77-2016/images/hope-hero.jpg
new file mode 100644
index 0000000..09f0009
Binary files /dev/null and b/talks/sage-days-77-2016/images/hope-hero.jpg differ
diff --git a/talks/sage-days-77-2016/images/package-managers.png
b/talks/sage-days-77-2016/images/package-managers.png
new file mode 100644
index 0000000..03432cb
Binary files /dev/null and
b/talks/sage-days-77-2016/images/package-managers.png differ
diff --git a/talks/sage-days-77-2016/slides.pdf
b/talks/sage-days-77-2016/slides.pdf
new file mode 100644
index 0000000..ca3d419
Binary files /dev/null and b/talks/sage-days-77-2016/slides.pdf differ
diff --git a/talks/sage-days-77-2016/slides.tex
b/talks/sage-days-77-2016/slides.tex
new file mode 100644
index 0000000..27b7e80
--- /dev/null
+++ b/talks/sage-days-77-2016/slides.tex
@@ -0,0 +1,555 @@
+\documentclass [t]{beamer}
+
+\usepackage [T1]{fontenc}
+\usepackage {ae,aecompl}
+\usepackage [utf8]{inputenc}
+\usepackage {graphicx}
+\usepackage {url}
+\usepackage {amsmath, amsfonts, amssymb}
+\usepackage {booktabs}
+\usepackage {tikz}
+\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
+
+\usepackage {color}
+\definecolor {rot}{RGB}{226,0,38}
+\definecolor {blau}{RGB}{10,50,80}
+\definecolor {gruen}{RGB}{157,193,7}
+\definecolor {orange}{RGB}{243,154,38}
+\definecolor {gelb}{RGB}{254,205,27}
+
+\usetheme {Boadilla}
+\usecolortheme {guix}
+\usefonttheme [onlymath]{serif}
+
+\setbeamertemplate {navigation symbols}{}
+% zeige Gesamtseitenzahl nicht an; outhertheme-infolines entnommen und
modifiziert
+\setbeamertemplate{footline}
+{
+ \leavevmode%
+ \hbox{%
+ \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author
in head/foot}%
+ \usebeamerfont{author in
head/foot}\insertshortauthor~~(\insertshortinstitute)
+ \end{beamercolorbox}%
+ \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title
in head/foot}%
+ \usebeamerfont{title in head/foot}\insertshorttitle
+ \end{beamercolorbox}%
+ \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in
head/foot}%
+ \usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
+ \insertframenumber{}\hspace*{2ex}
+% \insertframenumber{} / \inserttotalframenumber\hspace*{2ex}
+ \end{beamercolorbox}}%
+ \vskip0pt%
+}
+
+\AtBeginSection[]
+{
+ \begin{frame}
+ \frametitle{\inserttitle}
+ \tableofcontents[currentsection]
+ \end{frame}
+ \addtocounter {framenumber}{-1}
+}
+
+
+\begin{document}
+
+\title [GNU Guix]{Packaging and deploying with GNU Guix and GuixSD}
+\author {Andreas Enge}
+\institute[INRIA Bordeaux]{LFANT project-team \\
+INRIA Bordeaux--Sud-Ouest \\
+\url address@hidden \\
+\url {http://www.math.u-bordeaux.fr/~aenge}}
+\date [Sage Days 2016]{\color {gruen}Sage Days 77,
+Cernay, 5 April 2016
+}
+
+
+\begin {frame}{}
+\maketitle
+\end {frame}
+
+
+\setcounter {framenumber}{0}
+
+\section* {Introduction}
+
+\begin {frame}{Upgrades are difficult}
+\includegraphics [width=11cm]{images/debian-upgrade-instructions.png}
+\vfill
+\tiny
+\hfill \url
{https://www.debian.org/releases/squeeze/amd64/release-notes/ch-upgrading.en.html}
+\end {frame}
+
+
+\begin {frame}{Upgrades are dangerous}
+\includegraphics [width=11cm]{images/debian-upgrade-warning.png}
+\vfill
+\tiny
+\hfill \url {https://wiki.debian.org/DebianPackageManagement}
+\end {frame}
+
+
+\begin{frame}[fragile]{Stateful system management is unpredictable}
+ \begin{overlayarea}{\textwidth}{8cm}
+ \begin{tikzpicture}[stylish/.style = {
+ draw=orange, very thick,
+ fill=white, text=black, text width=3.2cm,
+ rounded corners=2mm, minimum height=1.4cm,
+ text centered
+ }]
+ \matrix[row sep=6mm, column sep=1.5cm] {
+ \node(inita)[stylish]{state 0};
+ & \node(initb)[stylish]{state 0};
+ \\
+
+ \node<2->(state1a)[stylish]{state $1_a$};
+ & \node<2->(state1b)[stylish]{state $1_b$};
+ \\
+
+ \node<3->(state2a)[stylish]{state $2_a$};
+ & \node<3->(state2b)[stylish]{state $2_b$};
+ \\
+
+ \node<3->(state3a)[stylish]{state $3_a$};
+ & \node<3->(state3b)[stylish]{state $3_b$};
+ \\
+ };
+
+ \path[->, very thick]<2->
+ (inita) edge node[right]{\texttt{apt-get update}} (state1a);
+ \path[->, very thick]<3->
+ (state1a) edge node[right]{\textcolor {gruen}{\texttt{apt-get install
foo}}} (state2a);
+ \path[->, very thick]<3->
+ (state2a) edge node[right]{\textcolor {blau}{\texttt{apt-get remove
bar}}} (state3a);
+
+ \path[->, very thick]<2->
+ (initb) edge node[right]{\texttt{apt-get update}} (state1b);
+ \path[->, very thick]<3->
+ (state1b) edge node[right]{\textcolor {blau}{\texttt{apt-get remove
bar}}} (state2b);
+ \path[->, very thick]<3->
+ (state2b) edge node[right]{\textcolor {gruen}{\texttt{apt-get install
foo}}} (state3b);
+ \end{tikzpicture}
+ \end{overlayarea}
+
+ \begin{tikzpicture}[overlay]
+ \node<4>[rounded corners=4, text centered,
+ fill=orange, text width=3cm,
+ inner sep=5mm, opacity=.75, text opacity=1,
+ drop shadow={opacity=0.5}] at (5, 4) {
+ \textbf{\Huge{= ?}}
+ };
+ \end{tikzpicture}
+\end{frame}
+
+
+\begin {frame}{Too many cooks spoil the broth}
+\includegraphics [width=11cm]{images/package-managers.png}
+\vfill
+\tiny
+\hfill \url
+{https://en.wikipedia.org/wiki/List_of_software_package_management_systems}
+\end {frame}
+
+
+\begin {frame}{Fashionable solution: Give up}
+\includegraphics [width=10cm]{images/docker-security.png}
+\end {frame}
+
+
+\begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[height=\paperheight]{images/hope-hero}};
+ \end{tikzpicture}
+\end{frame}
+
+
+
+\section {GNU Guix: Principles and package management}
+
+\begin {frame}{Functional package management}
+\begin {eqnarray*}
+\text {pari-gp} & = & f_1 (\text {pari-2.7.5.tar.gz}, \text {readline},
+ \text {gcc-5}, \text {make}) \\
+\pause
+\text {readline} & = & f_2 (\text {readline-6.3.tar.gz}, \text {ncurses},
+ \text {gcc-5}, \text {make}) \\
+\text {ncurses} & = & f_3 (\text {ncurses-6.0.tar.gz},
+ \text {gcc-5}, \text {make}) \\
+\pause
+\text {gcc-5} & = & f_4 (\text {gcc-5.3.0.tar.gz},
+ \text {gcc-4.9}, \text {make})
+\end {eqnarray*}
+
+\pause
+\vspace {1cm}
+Full \textcolor {blau}{directed acyclic graph} of dependencies is captured, \\
+with a few \textcolor {rot}{bootstrap binaries} at the root.
+\end {frame}
+
+
+\begin{frame}[fragile]{The store}
+ \begin{tikzpicture}[tools/.style = {
+ draw=orange, very thick,
+ text width=35mm, minimum height=4cm,
+ text centered,
+ rounded corners=2mm
+ },
+ tool/.style = {
+ text width=3cm,
+ text centered
+ },
+ daemon/.style = {
+ rectangle, text width=50mm, text centered,
+ rounded corners=2mm, minimum height=15mm,
+ top color=orange,
+ bottom color=gelb
+ },
+ builders/.style = {
+ draw=orange, very thick, dashed,
+ text width=5cm,
+ rounded corners=2mm,
+ },
+ builder/.style = {
+ draw=orange, thick, rectangle,
+ rotate=90
+ }]
+ \matrix[row sep=3mm, column sep=1cm] {
+ \node(builders)[builders, text height=5cm]{}
+ node at (0, 2) {\large{\textbf{build processes}}}
+ node at (0, 1.5) {chroot, separate UIDs}
+ node[builder] at (-1,-0.5) {Guile, make, etc.}
+ node[builder] at ( 0,-0.5) {Guile, make, etc.}
+ node[builder] at ( 1,-0.5) {Guile, make, etc.}; &
+ \node(tools)[tools]{}
+ node at (0, 1) {\large{\textbf{Guile Scheme}}}
+ node[tool] at (0, 0) {\texttt{(guix packages)}}
+ node(client)[tool] at (0, -1) {\texttt{(guix store)}};
+ \\
+
+ \node(daemon)[daemon]{\large{\textbf{build daemon}}}; &
+ &
+ \\
+ };
+
+ \path[very thick, draw=orange]
+ (tools.south) edge [out=-90, in=0, ->] node[below, sloped]{RPC}
(daemon.east);
+ \path[->, very thick, draw=orange]
+ (daemon) edge (builders);
+ \end{tikzpicture}
+\end{frame}
+
+
+\begin{frame}[fragile]{Package recipes}
+\vspace {-5mm}
+\scriptsize
+\begin{verbatim}
+(define-public pari-gp
+ (package
+ (name "pari-gp")
+ (version "2.7.5")
+ (source (origin
+ (method url-fetch)
+ (uri "http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-2.7.5.tar.gz")
+ (sha256 (base32
"0c8l83a0gjq73r9hndsrzkypwxvnnm4pxkkzbg6jm95m80nzwh11"))))
+ (build-system gnu-build-system)
+ (inputs `(("gmp" ,gmp)
+ ("libx11" ,libx11)
+ ("perl" ,perl)
+ ("readline" ,readline)))
+ (arguments
+ '(#:make-flags '("gp")
+ #:test-target "dobench"
+ #:phases (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (system* "./Configure"
+ (string-append "--prefix=" (assoc-ref outputs "out"))))))))
+ (license license:gpl2+)
+ (home-page "http://pari.math.u-bordeaux.fr/")))
+\end{verbatim}
+\end{frame}
+
+
+\begin {frame}{\texttt {guix graph --type=packages pari-gp}}
+\includegraphics [width=12cm]{images/graph-parigp-packages.pdf}
+
+\vfill
+And gcc, make and so on? Implicit inputs!
+\end {frame}
+
+
+\begin {frame}{\texttt {guix graph --type=bag-emerged pari-gp}}
+\includegraphics [height=8cm,width=12cm]{images/graph-parigp-bag-emerged.pdf}
+\end {frame}
+
+
+\begin{frame}[fragile]{Demo: Packages and profiles}
+\small
+\begin {itemize}
+\item
+\texttt {guix build pari-gp}
+
+\texttt {/gnu/store/\textcolor
{orange}{qbb9f5s6xzbgac9f260g16b68j7w1wqb}-pari-gp-2.7.5}
+
+Hash of all inputs!
+
+\pause
+\item
+\texttt {guix gc -\,-references /gnu/store/-...-pari-gp-2.7.5}
+
+\pause
+\item
+\texttt {guix package -i pari-gp}
+
+Look at \texttt {\$HOME/.guix-profile}; run \texttt {gp}.
+
+\pause
+\item
+\texttt {./pre-inst-env guix edit pari-gp}
+
+\texttt {./pre-inst-env guix build pari-gp}
+
+\texttt {guix gc -\,-references ...}
+
+\texttt {./pre-inst-env guix package -u pari-gp}
+
+\pause
+\item
+\texttt {guix package -l}
+
+\pause
+\item
+\textcolor {gruen}{\texttt {guix package -\,-roll-back}}
+\end {itemize}
+\end{frame}
+
+
+\begin {frame}{Features}
+\begin {itemize}
+\item
+\textcolor {blau}{Hackable}
+\begin {itemize}
+\item
+based on Guile Scheme
+\end {itemize}
+\item
+\textcolor {blau}{Dependable}
+\begin {itemize}
+\item
+immutable packages in store
+\item
+transactional upgrades \textcolor {gruen}{and downgrades}
+\end {itemize}
+\item
+\textcolor {blau}{Liberating}
+\begin {itemize}
+\item
+user centric: every user has an individual profile
+\item
+transparent (and reproducible?) binary and source deployments
+\item
+easy roll-back
+\item
+different versions can co-exist
+\begin {itemize}
+\item
+in \textcolor {gruen}{one user profile} (?)
+\item
+for \textcolor {gruen}{different users}
+\item
+for one user in \textcolor {gruen}{different profiles}
+\end {itemize}
+\end {itemize}
+\end {itemize}
+\end {frame}
+
+
+
+\section {GNU GuixSD: Declarative system deployments}
+
+\begin {frame}{System layers}
+\hspace {2cm}
+ \begin{tikzpicture}[entry/.style = {
+ draw=orange, very thick,
+ fill=white, text=black, text width=6cm,
+ rounded corners=2mm, minimum height=1cm,
+ text centered
+ },
+ guile/.style = {
+ fill=gelb, text=black, rotate=20,
+ rounded corners=4mm, text width=3cm,
+ opacity=.75, text opacity=1, text centered,
+ minimum height=1cm
+ }]
+ \matrix[row sep=6mm, column sep=1cm] {
+ \node(kernel)[entry]{\textbf{\large{Linux-libre}}};
+ \\
+ \node(initrd)[entry]{\textbf{\large{initial RAM disk}}};
+ \\
+
+ \node(shepherd)[entry]{\textbf{\large{PID 1: GNU Shepherd}}
+ \\ services};
+ \\
+
+ \node(user)[entry, dashed]{\textbf{\large{applications}}};
+ \\
+ };
+
+ \path[->, very thick, draw=orange]
+ (kernel) edge (initrd);
+ \path[->, very thick, draw=orange]
+ (initrd) edge (shepherd);
+ \path[->, very thick, draw=orange]
+ (shepherd) edge (user);
+
+ \node<2->(labelinitrd) [guile] at (initrd.east) {%
+ \Large{Guile}
+ };
+ \node<2->(labelinitrd) [guile] at (shepherd.east) {%
+ \Large{Guile}
+ };
+ \end{tikzpicture}
+\end {frame}
+
+
+\begin {frame}{Demo: Always change a running system!}
+Have a look at
+
+\texttt {/run}
+
+\texttt {/run/current-system}
+
+\texttt {/run/booted-system}
+
+\texttt {/run/current-system/}
+\end {frame}
+
+
+\begin {frame}{Demo: Do as you please!}
+\begin {itemize}
+\item
+Look at \texttt {config-desktop.scm}.
+\pause
+\item
+Change!
+\begin {itemize}
+\item
+change locales
+\item
+add pari-gp package to global list
+\item
+auto-login the user \texttt {enge}
+\end {itemize}
+
+\pause
+\item
+\texttt {guix system vm config-pari.scm}
+
+\pause
+\item
+\texttt {guix system reconfigure config-pari.scm}
+\end {itemize}
+\end {frame}
+
+
+\section {State of the nation}
+
+\begin {frame}{Timeline}
+\begin {itemize}
+\item
+2012-11: GNU project by Ludovic Courtès
+\item
+2013-01: release 0.1
+\item
+2014-07: \textcolor {blau}{installable operating system}
+\item
+2015-01: ARMv7 port
+\item
+2016-01: successful fundraiser for new build farm
+\item
+2016-02: creation of \textcolor {blau}{Guix Europe}, \\
+non-profit organisation to support GNU Guix
+\item
+2016-03: release 0.10.0
+\end {itemize}
+\end {frame}
+
+
+\begin {frame}{Status and activities}
+\begin {itemize}
+\item
+3200 packages
+\item
+4 platforms
+\begin {itemize}
+\item
+GuixSD: x86\_64, i686
+\item
+Guix as package manager: mips64el, armhf
+\end {itemize}
+\item
+$\approx$ 25 contributors per month
+\item
+$\approx$ 400 commits per month
+\item
+lots of friendly people on the mailing list and on IRC
+\end {itemize}
+
+\pause
+\vfill
+\begin {center}
+\color {rot}\framebox {\textcolor {orange}{Try it out!}}
+\end {center}
+\begin {itemize}
+\item
+\url {https://gnu.org/software/guix/}
+\item
+It is free
+\begin {itemize}
+\item
+as in \textcolor {gruen}{libre}
+\item
+of \textcolor {orange}{cost}
+\item
+of \textcolor {rot}{risk}
+\end {itemize}
+\end {itemize}
+\end {frame}
+
+
+\begin {frame}
+\centerline
{\includegraphics[width=0.3\textwidth,angle=270]{images/guixsd.pdf}}
+
+\vfill
+ \tiny{
+ Copyright \copyright{} 2016 Andreas Enge address@hidden
+ Some slides are \copyright{} 2010, 2012--2016 Ludovic Courtès
address@hidden
+
+ GNU GuixSD logo \copyright{} 2015 Luis Felipe López Acevedo
<address@hidden>\\
+ CC-BY-SA 4.0, \url{http://gnu.org/s/guix/graphics}\\[2mm]
+
+ Copyright of other images included in this document is held by
+ their respective owners.
+ \\[2mm]
+ 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 {frame}
+
+\end {document}