guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/04: talks: Add FOSDEM 2019 minimalistic talk.


From: Ludovic Courtčs
Subject: 01/04: talks: Add FOSDEM 2019 minimalistic talk.
Date: Sun, 3 Feb 2019 15:18:49 -0500 (EST)

civodul pushed a commit to branch master
in repository maintenance.

commit 6185134209ac198b58251a7f6ec2aafe78567c54
Author: Ludovic Courtès <address@hidden>
Date:   Thu Jan 31 08:54:42 2019 +0100

    talks: Add FOSDEM 2019 minimalistic talk.
    
    * talks/fosdem-2019: New directory.
---
 .gitignore                                         |   8 +
 talks/fosdem-2019/distributions/outline.org        | 142 +++++
 .../minimalist/images/Guix-horizontal-print.pdf    |   1 +
 talks/fosdem-2019/minimalist/images/Guix-white.pdf | Bin 0 -> 8483 bytes
 talks/fosdem-2019/minimalist/images/buffet.jpg     | Bin 0 -> 133073 bytes
 .../images/cacm-felleisen-programmable.png         | Bin 0 -> 141710 bytes
 talks/fosdem-2019/minimalist/images/cacm2.png      | Bin 0 -> 457762 bytes
 .../fosdem-2019/minimalist/images/guix-refcard.pdf | Bin 0 -> 55185 bytes
 .../images/hashicorp-conf-lang-for-full.jpg        | Bin 0 -> 226834 bytes
 .../minimalist/images/nix-shell-escapes.png        |   1 +
 talks/fosdem-2019/minimalist/images/sloc.png       | Bin 0 -> 34493 bytes
 talks/fosdem-2019/minimalist/outline.org           |  87 +++
 talks/fosdem-2019/minimalist/talk.tex              | 657 +++++++++++++++++++++
 13 files changed, 896 insertions(+)

diff --git a/.gitignore b/.gitignore
index 221c86e..52b120f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -155,3 +155,11 @@
 /cdn/terraform/terraform.tfstate
 /cdn/terraform/terraform.tfstate.backup
 /cdn/terraform/.terraform
+/talks/fosdem-2019/minimalist/talk.aux
+/talks/fosdem-2019/minimalist/talk.log
+/talks/fosdem-2019/minimalist/talk.nav
+/talks/fosdem-2019/minimalist/talk.out
+/talks/fosdem-2019/minimalist/talk.pdf
+/talks/fosdem-2019/minimalist/talk.snm
+/talks/fosdem-2019/minimalist/talk.toc
+/talks/fosdem-2019/minimalist/talk.vrb
diff --git a/talks/fosdem-2019/distributions/outline.org 
b/talks/fosdem-2019/distributions/outline.org
new file mode 100644
index 0000000..15132ae
--- /dev/null
+++ b/talks/fosdem-2019/distributions/outline.org
@@ -0,0 +1,142 @@
+#+TITLE: GNU Guix’s take on a new approach to software distribution
+
+* Summary
+
+In a time where distros are sometimes viewed as “that thing you run
+inside a container”, where alternative approaches to software
+distribution are taking steam—from CONDA and pip to Flatpak and
+Docker—is there still room for the traditional approach to GNU/Linux
+distros?
+
+As GNU Guix reaches 1.0 after six years of development, this talk will
+reflect on what Guix has to offer to users and how that compares to
+other approaches.  You can view Guix as a package manager, but with
+transactional upgrades and roll-backs.  Or you can view it as a
+standalone distribution like Debian but with a declarative interface Ă 
+la Puppet.  Guix is also an environment manager Ă  la VirtualEnv but not
+limited to a single language, a container provisioning tool like—think
+‘Dockerfile’ but with reproducibility and transparency built in, and a
+continuous integration/deployment tool—why write a lengthy
+‘gitlab-ci.yml’ when you can reuse your package definition?
+
+In this talk I will give an overview of all these tools Guix provides
+and discuss our journey from a “package manager” kind of project to a
+complete software deployment toolbox.  I will present key properties
+that set Guix apart: transparency through reproducible builds and
+provenance tracking, and practical user freedom through a broad range of
+discoverable APIs that we hope invite users to hack.  We believe Guix
+has shown that there’s still room for innovation in the distro space,
+and still value in distro-style software distribution.
+
+* Abstract
+
+As GNU Guix reaches 1.0, this talk will reflect on what it has to offer
+to users and how it compares to other approaches—from CONDA and pip to
+Flatpak and Docker.  Guix is not only a transactional package manager
+and declarative GNU/Linux distribution: it’s also an environment
+manager, a container provisioning tool, and more.  We will describe
+these tools and our journey to 1.0, emphasizing key properties that set
+Guix apart: reproducibility, transparency, and hackability.
+
+
+* intro: sad state of distros
+
+** the “depressed distro developers track”?
+
+** let’s face it, distros are losing momentum
+
+**  “attacks” on distros suggest they’re not serving user needs
+
+*** for users: pip, CONDA, Cargo, Cabal, etc.
+
+*** for developers: VirtualEnv, Spack/EasyBuild/modules, npm, etc.
+
+*** for both: Flatpak, snap, Docker, Vagrant, etc.
+
+**** “that thing you run Docker on”
+
+**** “issues”: snap 2048 mining, Docker vulns, Docker license opacity
+
+*** for admins: Ansible, Puppet, Propellor, etc.
+
+** are distros doomed? are they a bad idea?
+
+  - i never wanted to be a distro developer, i became one by accident
+  - i was a happy Debian user but i never imagined working *on* Debian
+    packaging could be interesting
+
+* distros are invaluable
+
+** license control, QA (integration)
+
+**  “curated package collection” vs jungle-everyone-uploads
+
+** collective control
+
+** transparency? sort-of, can do better!
+
+** flexibility? not quite!
+
+** dev tools? hmm
+
+** conclusion: let’s raise the bar!
+
+* Guix
+
+** liberating, dependable, hackable
+
+*** we protect your freedom (and security!), empower you
+
+*** transactional upgrades and rollbacks => demo
+
+*** reproducibility, bootstrapping!
+
+*** you can inspect package defs, rebuild them, grep/M-. the whole system
+
+** hacking packages: demo
+
+   #+begin_src sh
+     tar xf $(guix build --source hello)
+     cd hello*
+     guix environment hello
+     ./configure
+     make -j5
+   #+end_src
+
+** building app bundles: guix pack
+
+** reproducibility n°1: guix package -m & guix describe & guix pull
+
+** reproducibility n°1: declarative & stateless OS configs
+
+** reproducibility n°2: bit-reproducibility
+
+** building from source: bootstrappable.org
+
+* open questions
+
+** what to do with all the software out there? (Cabal, npm, etc.)
+
+* what’s cooking?
+
+** 1.0!
+
+** 9K+ packages + importers + updaters
+
+** graphical installer
+
+** better UI
+
+** package customization on the command line
+
+** more resilient build farm
+
+** better ARM support
+
+* take-away message
+
+** provides compelling tools for users, devs, admins
+
+** makes it easy to be a distro dev
+
+** takes transparency & hackability to the next level
diff --git a/talks/fosdem-2019/minimalist/images/Guix-horizontal-print.pdf 
b/talks/fosdem-2019/minimalist/images/Guix-horizontal-print.pdf
new file mode 120000
index 0000000..5c30073
--- /dev/null
+++ b/talks/fosdem-2019/minimalist/images/Guix-horizontal-print.pdf
@@ -0,0 +1 @@
+/home/ludo/src/guix-maintenance/talks/bosc-2017/images/Guix-horizontal-print.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2019/minimalist/images/Guix-white.pdf 
b/talks/fosdem-2019/minimalist/images/Guix-white.pdf
new file mode 100644
index 0000000..3641e7f
Binary files /dev/null and b/talks/fosdem-2019/minimalist/images/Guix-white.pdf 
differ
diff --git a/talks/fosdem-2019/minimalist/images/buffet.jpg 
b/talks/fosdem-2019/minimalist/images/buffet.jpg
new file mode 100644
index 0000000..5ed6a1e
Binary files /dev/null and b/talks/fosdem-2019/minimalist/images/buffet.jpg 
differ
diff --git 
a/talks/fosdem-2019/minimalist/images/cacm-felleisen-programmable.png 
b/talks/fosdem-2019/minimalist/images/cacm-felleisen-programmable.png
new file mode 100644
index 0000000..64a302f
Binary files /dev/null and 
b/talks/fosdem-2019/minimalist/images/cacm-felleisen-programmable.png differ
diff --git a/talks/fosdem-2019/minimalist/images/cacm2.png 
b/talks/fosdem-2019/minimalist/images/cacm2.png
new file mode 100644
index 0000000..eb48184
Binary files /dev/null and b/talks/fosdem-2019/minimalist/images/cacm2.png 
differ
diff --git a/talks/fosdem-2019/minimalist/images/guix-refcard.pdf 
b/talks/fosdem-2019/minimalist/images/guix-refcard.pdf
new file mode 100644
index 0000000..0cf24c1
Binary files /dev/null and 
b/talks/fosdem-2019/minimalist/images/guix-refcard.pdf differ
diff --git 
a/talks/fosdem-2019/minimalist/images/hashicorp-conf-lang-for-full.jpg 
b/talks/fosdem-2019/minimalist/images/hashicorp-conf-lang-for-full.jpg
new file mode 100644
index 0000000..e34fd6f
Binary files /dev/null and 
b/talks/fosdem-2019/minimalist/images/hashicorp-conf-lang-for-full.jpg differ
diff --git a/talks/fosdem-2019/minimalist/images/nix-shell-escapes.png 
b/talks/fosdem-2019/minimalist/images/nix-shell-escapes.png
new file mode 120000
index 0000000..41151b2
--- /dev/null
+++ b/talks/fosdem-2019/minimalist/images/nix-shell-escapes.png
@@ -0,0 +1 @@
+../../../cufp-2016/images/nix-shell-escapes.png
\ No newline at end of file
diff --git a/talks/fosdem-2019/minimalist/images/sloc.png 
b/talks/fosdem-2019/minimalist/images/sloc.png
new file mode 100644
index 0000000..e47e9f9
Binary files /dev/null and b/talks/fosdem-2019/minimalist/images/sloc.png differ
diff --git a/talks/fosdem-2019/minimalist/outline.org 
b/talks/fosdem-2019/minimalist/outline.org
new file mode 100644
index 0000000..0d523d1
--- /dev/null
+++ b/talks/fosdem-2019/minimalist/outline.org
@@ -0,0 +1,87 @@
+#+TITLE: Building a whole distro on top of a minimalistic language
+
+* Summary
+
+GNU Guix is a package manager, GNU/Linux distribution, and more
+generally a “software deployment toolbox” featuring key features such as
+transactional upgrades and rollbacks, declarative operating system
+configuration, and more.  Guix has become a relatively large piece of
+software but a key aspect of it is that Guix builds on Scheme, a Lisp
+dialect known for its emphasis on minimalism.  From day one, use of
+Scheme as its single implementation language has shaped Guix.
+
+This talk will be about what it means for Guix to be implemented as a
+set of libraries on top of this tiny core that Scheme is.  Together we
+will have a guided tour through Guix’ interfaces, be they “programming”
+or “user” interfaces; we’ll look at its embedded domain-specific
+languages (EDSLs) that make it just as clear as your favorite
+YAML/JSON/XML thing while retaining the full power (and joy!) of a
+general-purpose programming language.  We’ll discuss the features of
+Scheme that make it possible.  I will share my thoughts on how such a
+design can empower users and how well this has worked in practice.
+
+* Abstract
+
+GNU Guix is a package manager and GNU/Linux distribution that builds on
+Scheme, a Lisp dialect known for its emphasis on minimalism.  This talk
+will be an exploration of Guix’ use of Scheme’s extensibility to build
+high-level abstractions and user interfaces in a broad sense.
+
+* intro
+
+** Babel tower of GNU/Linux
+
+** proliferation of specific “languages”
+
+** “auberge espagnole” or “potluck”
+
+** a strength, but also a hindrance for users: practical user freedom?
+
+* Lisp mystique
+
+** “not by piling feature upon feature”
+
+** “The truth is that Lisp …” (GHM 2014)
+
+** 
[[https://cacm.acm.org/magazines/2018/3/225475-a-programmable-programming-language/fulltext][“language-oriented
 programming” with Racket]]
+
+** “escaping DSL hell by having parentheses all the way down”
+
+* GNU/Linux distro as a Scheme library
+
+** minimalism: 500K SLOC
+** thesis: embedding the DSL provides tools: lint, refresh, etc.
+
+*** full-blown language supports abstraction ("package" objects, etc.)
+
+*** EDSL thanks to macros (deep or shallow embedding)
+
+*** expose data structures
+
+*** IDE
+
+** why stop here? ELS diagram Nix/Guix side by side
+
+* Unification beyond the distro
+
+
+** the problem
+
+  - lots of glueing, no big picture
+    + different languages, approaches, config file syntax
+    + sometimes redundant
+
+** The initrd: 'expression->initrd'
+
+** VMs: 'expression->linux-vm'
+
+** PID 1: example Shepherd service
+
+*** dependency graph of services
+
+*** static checks
+
+** more services: mcron
+
+** service in container
+
diff --git a/talks/fosdem-2019/minimalist/talk.tex 
b/talks/fosdem-2019/minimalist/talk.tex
new file mode 100644
index 0000000..6e818ce
--- /dev/null
+++ b/talks/fosdem-2019/minimalist/talk.tex
@@ -0,0 +1,657 @@
+\documentclass[aspectratio=169]{beamer}
+
+\usetheme{default}
+
+\usefonttheme{structurebold}
+\usepackage{helvet}
+\usepackage{multimedia}         % movie
+\usecolortheme{seagull}         % white on black
+
+\usepackage[utf8]{inputenc}
+\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol}
+\usepackage[absolute,overlay]{textpos}
+\usepackage{tikz}
+\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
+\usepackage{fancyvrb}           % for \Verb
+
+% Remember the position of every picture.
+\tikzstyle{every picture}+=[remember picture]
+
+\tikzset{onslide/.code args={<#1>#2}{%
+  \only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
+}}
+
+% Colors.
+\definecolor{guixred1}{RGB}{226,0,38}  % red P
+\definecolor{guixorange1}{RGB}{243,154,38}  % guixorange P
+\definecolor{guixyellow}{RGB}{254,205,27}  % guixyellow P
+\definecolor{guixred2}{RGB}{230,68,57}  % red S
+\definecolor{guixred3}{RGB}{115,34,27}  % dark red
+\definecolor{guixorange2}{RGB}{236,117,40}  % guixorange S
+\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S
+\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S
+\definecolor{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey S
+\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S
+\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S
+\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S
+\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S
+
+\setbeamerfont{title}{size=\huge}
+\setbeamerfont{frametitle}{size=\huge}
+\setbeamerfont{normal text}{size=\Large}
+
+% White-on-black color theme.
+\setbeamercolor{structure}{fg=guixorange1,bg=black}
+\setbeamercolor{title}{fg=white,bg=black}
+\setbeamercolor{date}{fg=guixorange1,bg=black}
+\setbeamercolor{frametitle}{fg=white,bg=black}
+\setbeamercolor{titlelike}{fg=white,bg=black}
+\setbeamercolor{normal text}{fg=white,bg=black}
+\setbeamercolor{alerted text}{fg=guixyellow,bg=black}
+\setbeamercolor{section in toc}{fg=white,bg=black}
+\setbeamercolor{section in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{frametitle in toc}{fg=white,bg=black}
+\setbeamercolor{local structure}{fg=guixorange1,bg=black}
+
+\newcommand{\highlight}[1]{\alert{\textbf{#1}}}
+
+\title{Building a whole distro on top of a minimalistic language}
+
+\author{Ludovic Courtès}
+\date{FOSDEM, 2 February 2019}
+
+\setbeamertemplate{navigation symbols}{} % remove the navigation bar
+
+\AtBeginSection[]{
+  \begin{frame}
+    \frametitle{}
+    \tableofcontents[currentsection]
+  \end{frame} 
+}
+
+
+\newcommand{\screenshot}[1]{
+  \begin{frame}[plain]
+    \begin{tikzpicture}[remember picture, overlay]
+      \node [at=(current page.center), inner sep=0pt]
+        {\includegraphics[width=\paperwidth]{#1}};
+    \end{tikzpicture}
+  \end{frame}
+}
+
+
+\begin{document}
+
+\maketitle
+
+\begin{frame}[plain]
+  \begin{tikzpicture}[remember picture, overlay]
+    % 
https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Buffet_brekafast_%285078306699%29.jpg/1024px-Buffet_brekafast_%285078306699%29.jpg
+    \node [at=(current page.center), inner sep=0pt]
+          {\includegraphics[width=\paperwidth]{images/buffet}};
+    \node [at=(current page.center), text=white, text opacity=1]
+          {\Huge{\textbf{the GNU/Linux potluck}}};
+  \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[plain]
+  \begin{tikzpicture}[remember picture, overlay]
+    \node [at=(current page.center), inner sep=0pt]
+          
{\includegraphics[width=0.7\paperwidth]{images/Guix-horizontal-print}};
+  \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\screenshot{images/sloc}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[fragile]
+  \begin{tikzpicture}[remember picture, overlay]
+    \node [at=(current page.center), inner sep=0pt, rotate=-90,
+           drop shadow={opacity=0.5}, draw, color=guixgrey, line width=1pt]
+          {\includegraphics[height=1.3\paperheight]{images/guix-refcard}};
+  \end{tikzpicture}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+    \vspace{-1cm}
+    \small{
+(\alert{operating-system}
+  (host-name "schememachine")
+  (timezone "Europe/Brussels")
+  (locale "fr_BE.utf8")
+  (bootloader (\alert{bootloader-configuration}
+                (bootloader grub-efi-bootloader)
+                (target "/boot/efi")))
+  (file-systems (cons (\alert{file-system}
+                        (device (file-system-label "my-root"))
+                        (mount-point "/")
+                        (type "ext4"))
+                      %base-file-systems))
+  (users (cons (\alert{user-account}
+                 (name "charlie")
+                 (group "users")
+                 (home-directory "/home/charlie"))
+               %base-user-accounts))
+  (services (cons* (\alert{service} dhcp-client-service-type)
+                   (\alert{service} openssh-service-type)
+                   %base-services)))
+    }
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+\$ guix system build config.scm
+\textrm{...}   
+
+\$ guix system vm config.scm
+\textrm{...}
+
+\$ guix system container config.scm
+\textrm{...}
+
+\$ guix system reconfigure config.scm
+\textrm{...}
+  \end{semiverbatim}
+\end{frame}
+
+
+%% \screenshot{images/nix-shell-escapes}
+
+%% \setbeamercolor{normal text}{bg=guixred3,fg=white}
+%% \begin{frame}[plain]
+%%   \begin{quotation}
+%%     \noindcalent
+%%     \LARGE{``Escaping DSL hell by having parentheses all the way down''}
+%%   \end{quotation}
+%%   \vspace{1cm}
+%%   \hfill{-- talk by Tom Hall}\\
+%%   
\hfill{\small{\url{https://skillsmatter.com/skillscasts/5488-escaping-dsl-hell-by-having-parenthesis-all-the-way-down}}}
+%% \end{frame}
+%% \setbeamercolor{normal text}{bg=black,fg=white}
+
+%c 
https://www.hashicorp.com/resources/keynote-terraform-free-saas-tier-hcl-upgrades
+\begin{frame}[plain, fragile]
+  \begin{tikzpicture}[remember picture, overlay]
+    \node [at=(current page.center), inner sep=0pt]
+          
{\includegraphics[width=\paperwidth]{images/hashicorp-conf-lang-for-full}};
+    \node<2-> [at=(current page.center), text width=10cm,
+            fill=black, inner sep=5cm, opacity=.5, text opacity=1]
+          {\LARGE{``Here’s one of my favorite features. \\[.3cm]
+            The new \texttt{for} keyword allows you \\ to iterate
+            over lists and generate lists and maps. \\[.3cm]
+            This gives you \textbf{a whole bunch of new flexibility}.''\par}};
+  \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue1,fg=white}
+\begin{frame}[plain, fragile]
+  \frametitle{}
+  
+  \vspace{0.5cm}
+  \textrm{\Huge{%
+      The truth is that Lisp is not the right language for
+      any particular problem.  Rather, Lisp encourages one to attack a
+      new problem by \textbf{implementing new languages} tailored to that
+      problem.  }}
+
+  \vspace{1cm}
+  \hfill{-- Abelson \& Sussman, 1987}
+\end{frame}
+\setbeamercolor{normal text}{bg=black,fg=white}
+
+%% \setbeamercolor{normal text}{bg=guixblue2,fg=white}
+%% \begin{frame}
+%%   \frametitle{}
+
+%%   \vspace{0.5cm}
+%%   \textrm{\Huge{%
+%%       Programming languages should be designed not by piling feature on top 
of
+%%       feature, but by removing the weaknesses and restrictions that make
+%%       additional features appear necessary.
+%%     }}
+
+%%   \vspace{1cm}
+%%   \hfill{-- Clinger et al., 1998}
+%% \end{frame}
+%% \setbeamercolor{normal text}{bg=black,fg=white}
+
+%% \screenshot{images/cacm-felleisen-programmable}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+    \small{
+(define hello
+  (\alert{package}
+    (name "hello")
+    (version "2.8")
+    (source (\alert{origin}
+              (method url-fetch)
+              (uri (string-append
+                    "http://ftp.gnu.org/\textrm{...}/hello-"; version
+                    ".tar.gz"))
+              (sha256 (base32 "0wqd\textrm{...}dz6"))))
+    (\alert{build-system} gnu-build-system)
+    (synopsis "An example GNU package")
+    (description "Produce a friendly greeting.")
+    (home-page "https://gnu.org/software/hello/";)
+    (license gpl3+)))
+
+;; \textsl{Yields: /gnu/store/\textrm{...}-hello-2.8}
+}
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+\Large{
+  (service openssh-service-type)
+}
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+\Large{
+  (service openssh-service-type
+           (openssh-configuration
+             (x11-forwarding? #true)
+             (permit-root-login 'without-password)))
+}
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+\Large{
+  ;; Sets up cgit + nginx + fcgiwrap.
+  (service cgit-service-type
+           (cgit-configuration
+             (repository-directory "/srv/git")
+             (project-list (list "foo" "bar"))))
+}
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+(\alert{operating-system}
+  ;; \textrm{...}
+  (services (remove (lambda (service)
+                      (eq? ntp-service-type
+                           (service-kind service)))
+                    %desktop-services)))
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+(\alert{define} %my-services
+  ;; My very own list of services.
+  (\alert{modify-services} %desktop-services
+    (mingetty-service-type config =>
+                           (mingetty-configuration
+                            (\alert{inherit} config)
+                            (motd (plain-file "motd"
+                                     "Howdy FOSDEM!"))))
+    (upower-service-type config =>
+                         (upower-configuration
+                          (\alert{inherit} config)
+                          (ignore-lid? #true)
+                          (percentage-critical 5.)))))
+  \end{semiverbatim}
+\end{frame}
+
+
+%% \begin{frame}[plain]
+%%   \Large{$\Rightarrow$ plan working
+%%     \textbf{as expected}}
+%%   \\[1cm]
+%%   \uncover<2->{\Huge{\textbf{DSL embedding helps!}}}
+%% \end{frame}
+
+\begin{frame}
+  \Large{
+  \begin{itemize}
+  \item Emacs and Web user interfaces
+  \item \texttt{guix refresh} package auto-updater
+  \item \texttt{guix lint} package checker
+  \item \texttt{guix graph} dependency graph viewer
+  \item \texttt{guix system extension-graph} service composition viewer
+  \item ...
+  \end{itemize}
+  }
+\end{frame}
+
+%% \begin{frame}[fragile]{}
+%%   \begin{tikzpicture}[tools/.style = {
+%%                         text width=35mm, minimum height=4cm,
+%%                         text centered,
+%%                         rounded corners=2mm,
+%%                         fill=white, text=black
+%%                       },
+%%                       tool/.style = {
+%%                         fill=white, text=black, text width=3cm,
+%%                         text centered
+%%                       },
+%%                       daemon/.style = {
+%%                         rectangle, text width=50mm, text centered,
+%%                         rounded corners=2mm, minimum height=15mm,
+%%                         top color=guixorange1,
+%%                         bottom color=guixyellow,
+%%                         text=black
+%%                       },
+%%                       builders/.style = {
+%%                         draw=guixorange1, very thick, dashed,
+%%                         fill=black, text=white, text width=5cm,
+%%                         rounded corners=2mm,
+%%                       },
+%%                       builder/.style = {
+%%                         draw=guixred2, thick, rectangle,
+%%                         fill=black, text=white,
+%%                         rotate=90
+%%                       }]
+%%     \matrix[row sep=3mm, column sep=1cm] {
+%%       \node(builders)[builders, text height=5cm]{}
+%%           node[fill=black, text=white] at (0, 2) {\large{\textbf{build 
processes}}}
+%%           node[fill=black, text=white] at (0, 1.5) {chroot, separate UIDs}
+%%           node[builder] at (-1,-0.5) {\alert{Guile}, make, etc.}
+%%           node[builder] at ( 0,-0.5) {\alert{Guile}, make, etc.}
+%%           node[builder] at ( 1,-0.5) {\alert{Guile}, make, etc.}; &
+%%       \node[tools]{}
+%%           node[fill=white, text=black] 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}}}; &
+%%       &
+%%       \\
+%%     };
+%%   \end{tikzpicture}
+
+%%   \begin{tikzpicture}[overlay]
+%%     \path[very thick, draw=guixorange1]
+%%       (client.south) edge [out=-90, in=0, ->] node[below, sloped]{RPCs} 
(daemon.east);
+%%     \path[->, very thick, draw=guixorange1]
+%%       (daemon) edge (builders);
+%%   \end{tikzpicture}
+%% \end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue2}
+\begin{frame}
+  \Huge{\textbf{Unification\\beyond the ``distro''.}}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\begin{frame}[fragile]
+  \frametitle{Nix \& string interpolation}
+
+  {
+    \begin{semiverbatim}
+\{ \tikz[baseline]{\node[anchor=base](formalparams){fetchurl, stdenv};} 
\}\tikz[baseline]{\node[anchor=base](colon){:};}
+
+\tikz[baseline]{\node[anchor=base](stdenv){stdenv};}.\tikz[baseline]{\node[anchor=base](funcall){\alert<1>{mkDerivation}};}
 \{
+  name = "hello-2.3";
+  src = fetchurl \{
+    url = mirror://gnu/hello/hello-2.3.tar.bz2;
+    sha256 = "0c7vijq8y68...";
+  \};
+ \uncover<2->{\tikz[baseline]{\node[anchor=base](bash){preCheck = \alert{"echo 
'Test suite coming up!'"};};}}
+  meta = \{
+    description = "Produces a friendly greeting";
+    homepage = http://www.gnu.org/software/hello/;
+    license = "GPLv3+";
+  \};
+\}
+    \end{semiverbatim}
+    }
+
+  \begin{textblock}{5}(10, 3)
+    \tikz{\node<1>(labelcolon)[fill=white, text=black]{function definition};}
+  \end{textblock}
+
+  \begin{textblock}{5}(11, 6)
+    \tikz{\node<1>(labelfuncall)[fill=white, text=black]{function call};}
+  \end{textblock}
+
+  \begin{textblock}{5}(11, 9)
+    \tikz{\node<2>(labelbash)[fill=white, text=black]{Bash snippet};}
+  \end{textblock}
+
+  \begin{tikzpicture}[overlay]
+    \path[->, thick]<1>(labelcolon) edge (colon);
+    \path[->, thick]<1>(labelfuncall) edge (funcall);
+    \path[->, thick]<2>(labelbash) edge (bash);
+  \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot{images/nix-shell-escapes}
+\setbeamercolor{normal text}{bg=black}
+
+\begin{frame}[fragile]{The Initial RAM Disk}
+  \pause
+  \begin{semiverbatim}
+(expression->initrd
+ (\alert{with-imported-modules} (source-module-closure
+                         '((gnu build linux-boot)
+                           (guix build utils)))
+   \alert{\tikz[baseline]{\node[anchor=base](tilde){#~};}}(begin
+       (\alert{use-modules} (gnu build linux-boot)
+                    (guix build utils))
+
+       (boot-system #:mounts '\alert{#$}file-systems
+                    #:linux-modules '\alert{#$}linux-modules
+                    #:linux-module-directory '\alert{#$}kodir)))
+  \end{semiverbatim}
+
+  \begin{textblock}{4}(7, 3)
+    \tikz{\node<3->(labeltilde)[fill=white, text=black]{\large{\textbf{code 
staging}}};}
+  \end{textblock}
+
+  \begin{tikzpicture}[overlay]
+    \path[->, thick]<3-> (labeltilde) edge (tilde);
+  \end{tikzpicture}
+\end{frame}
+
+\begin{frame}
+  \begin{overlayarea}{\textwidth}{8cm}
+  \begin{tikzpicture}[kernel/.style = {
+                        text width=10cm, minimum height=1.4cm,
+                        text centered,
+                        rounded corners=2mm,
+                        fill=white, text=black
+                      },
+                      userland/.style = {
+                        draw=guixorange1, very thick,
+                        fill=white, text=black, text width=6cm,
+                        rounded corners=2mm, minimum height=1.4cm,
+                        text centered
+                      }]
+    \matrix[row sep=6mm, column sep=1cm] {
+      \node(kernel)[kernel]{\textbf{\Large{Linux-libre}}};
+      \\
+
+      \node<2->(initrd)[userland]{\textbf{\Large{initial RAM disk}}};
+      \\
+
+      \node<4->(shepherd)[userland]{\textbf{\Large{PID 1: GNU Shepherd}}
+        \\ services...};
+      \\
+
+      \node<6->(user)[userland, dashed]{\textbf{\Large{applications}}};
+      \\
+    };
+
+    \path[->, very thick, draw=guixred1]<2->
+      (kernel) edge (initrd);
+    \path[->, very thick, draw=guixred1]<4->
+      (initrd) edge (shepherd);
+    \path[->, very thick, draw=guixred1]<6->
+      (shepherd) edge (user);
+    
+  \end{tikzpicture}
+  \end{overlayarea}
+
+  \begin{tikzpicture}[overlay,
+                      guile/.style = {
+                         fill=guixyellow, text=black, rotate=30,
+                         rounded corners=4mm, text width=3cm,
+                         opacity=.75, text opacity=1, text centered,
+                         minimum height=1.3cm
+                      }]
+    \node<3->(labelinitrd) [guile] at (initrd.east) {%
+      \Large{Guile}
+    };
+    \node<5->(labelinitrd) [guile] at (shepherd.east) {%
+      \Large{Guile}
+    };
+  \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[fragile]{System Services}
+  \begin{semiverbatim}
+;; \textsl{Service definition for the GNU Shepherd (PID 1)}
+;; \textsl{embedded in GuixSD.}
+
+(\alert{shepherd-service}
+  (provision '(mysql))
+  (documentation "Run the MySQL server.")
+  (start (let ((my.cnf (mysql-configuration-file config)))
+           \alert{#~}(make-forkexec-constructor
+              (list (string-append \alert{#$}mysql "/bin/mysqld")
+                    (string-append "--defaults-file="
+                                   \alert{#$}my.cnf))
+              #:user "mysql" #:group "mysql")))
+  (stop \alert{#~}(make-kill-destructor)))
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+;; Shepherd service to mount/unmount a file system.
+
+(\alert{with-imported-modules} '((gnu build file-systems))
+  (\alert{shepherd-service}
+    (provision '(file-system-/home))
+    (start \alert{#~}(lambda ()
+               (mount "/dev/foo" "/home" "ext4")))
+    (stop \alert{#~}(lambda ()
+              (umount "/home")))))
+  \end{semiverbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{semiverbatim}
+;; Shepherd service for the BitlBee IRC gateway daemon.
+\uncover<2->{(\alert{with-imported-modules} '((gnu build linux-container))}
+  (\alert{shepherd-service}
+    (provision '(bitlbee))
+    (requirement '(loopback))
+    (start 
\alert{#~}(\alert<2>{make-forkexec-constructor\uncover<2->{/container}}
+              (list \alert{#$}(file-append bitlbee "/sbin/bitlbee")
+                    \textrm{...})))
+    (stop  \highlight{#~}(make-kill-destructor)))\uncover<2->{)}
+  \end{semiverbatim}
+
+  \begin{tikzpicture}[overlay]
+    \node<2->[rounded corners=4, text centered,
+          fill=guixorange1, text width=4cm,
+          inner sep=3mm, rotate=5, opacity=.75, text opacity=1,
+          drop shadow={opacity=0.5}] at (9, 0) {
+            \large{\textbf{containerized service!}}
+          };
+  \end{tikzpicture}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixblue2}
+\begin{frame}
+  \Huge{\textbf{Wrap-up.}}
+\end{frame}
+\setbeamercolor{normal text}{fg=white,bg=black}
+
+\begin{frame}{}
+  \LARGE{
+  \begin{itemize}
+  \item distro \& tools as a \highlight{Scheme library}
+  \item \highlight{hackability} through uniformity
+  \item \highlight{code staging} techniques to glue it all
+  \end{itemize}
+  }
+\end{frame}
+
+\begin{frame}{Join us now, share the parens!}
+  \vspace{0.7cm}
+  \Large{
+    \begin{itemize}
+    \item \textbf{install the distribution}
+    \item \textbf{use it}, report bugs, add packages
+    \item share your \textbf{ideas}!
+    \end{itemize}
+  }
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[plain]
+
+\vfill{
+  \vspace{1.5cm}
+  \center{\includegraphics[width=0.3\textwidth]{images/Guix-white}}\\[1.0cm]
+  address@hidden://gnu.org/software/guix/}}}
+}
+
+\end{frame}
+
+\begin{frame}{}
+
+  \begin{textblock}{12}(2, 8)
+    \tiny{
+      Copyright \copyright{} 2010, 2012--2019 Ludovic Courtès address@hidden
+      GNU Guix logo, CC-BY-SA 4.0, \url{https://gnu.org/s/guix/graphics}
+
+      Buffet picture under CC-BY-SA 2.0 by Matt @ PEK,
+      
\url{https://commons.wikimedia.org/wiki/File:Buffet_brekafast_(5078306699).jpg}.\\
+      GNU~Guix Reference Card under GFDL~1.3+.
+
+      Copyright of other images included in this document is held by
+      their respective owners.
+      \\[3.0mm]
+      This work is licensed under the \alert{Creative Commons
+        Attribution-Share Alike 3.0} License.  To view a copy of this
+      license, visit
+      \url{http://creativecommons.org/licenses/by-sa/3.0/} or send a
+      letter to Creative Commons, 171 Second Street, Suite 300, San
+      Francisco, California, 94105, USA.
+      \\[2.0mm]
+      At your option, you may instead copy, distribute and/or modify
+      this document under the terms of the \alert{GNU Free Documentation
+        License, Version 1.3 or any later version} published by the Free
+      Software Foundation; with no Invariant Sections, no Front-Cover
+      Texts, and no Back-Cover Texts.  A copy of the license is
+      available at \url{http://www.gnu.org/licenses/gfdl.html}.
+      \\[2.0mm]
+      % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
+      The source of this document is available from
+      \url{http://git.sv.gnu.org/cgit/guix/maintenance.git}.
+    }
+  \end{textblock}
+\end{frame}
+
+\end{document}
+
+% Local Variables:
+% coding: utf-8
+% comment-start: "%"
+% comment-end: ""
+% ispell-local-dictionary: "american"
+% compile-command: "rubber --pdf talk.tex"
+% End:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]