snape pushed a commit to branch master in repository maintenance. commit 2c68353f07562fb885681a64328113744d1aff42 Author: Clément Lassieur <clem...@lassieur.org> Date: Wed Mar 20 11:03:37 2019 +0100
talks: Add Fund The Code talk. * talks/fundthecode-2019: New directory. --- talks/fundthecode-2019/images/Guix_logo.svg.png | Bin 0 -> 56485 bytes talks/fundthecode-2019/talk.html | 372 ++++++++++++++++++++++++ talks/fundthecode-2019/talk.org | 183 ++++++++++++ 3 files changed, 555 insertions(+) diff --git a/talks/fundthecode-2019/images/Guix_logo.svg.png b/talks/fundthecode-2019/images/Guix_logo.svg.png new file mode 100644 index 0000000..1e44567 Binary files /dev/null and b/talks/fundthecode-2019/images/Guix_logo.svg.png differ diff --git a/talks/fundthecode-2019/talk.html b/talks/fundthecode-2019/talk.html new file mode 100644 index 0000000..d489c07 --- /dev/null +++ b/talks/fundthecode-2019/talk.html @@ -0,0 +1,372 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"/> +<title>GNU Guix</title> +<meta name="author" content="Clément Lassieur & Mathieu Othacehe"/> +<style type="text/css"> +.underline { text-decoration: underline; } +</style> +<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/reveal.css"/> + +<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/theme/night.css" id="theme"/> + +<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/css/zenburn.css"/> +<!-- If the query includes 'print-pdf', include the PDF print sheet --> +<script> + if( window.location.search.match( /print-pdf/gi ) ) { + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = 'http://cdn.jsdelivr.net/reveal.js/3.0.0/css/print/pdf.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + } +</script> +</head> +<body> +<div class="reveal"> +<div class="slides"> +<section id="sec-title-slide"> +<h1 class="title">GNU Guix</h1><h2 class="author">Clément Lassieur & Mathieu Othacehe</h2><p class="date">Created: 2019-03-19 mar. 17:32</p> +</section> + +<section> +<section id="slide-org9120439"> +<h2 id="org9120439"><span class="section-number-2">1</span> Gestion de paquets sous GNU/Linux</h2> +<div class="outline-text-2" id="text-1"> +</div> +</section> +<section id="slide-orge64bef8"> +<h3 id="orge64bef8"><span class="section-number-3">1.1</span> Un écosystème complexe</h3> +<ul> +<li class="fragment appear">Les distributions historiques sont en perte de vitesse</li> +<li class="fragment appear">Chaque language implémente son propre "package manager" : pip, +Cargo, Cabal, npm</li> +<li class="fragment appear">D'autres types d'outils apparaissent</li> + +</ul> +<ul> +<li class="fragment appear">Pour les développeurs : VirtualEnv, Spack, EasyBuild</li> +<li class="fragment appear">Pour les administrateurs : Ansible, Puppet, Propellor</li> +<li class="fragment appear">Pour tous : Flatpak, snap, Docker, Vagrant</li> + +</ul> + +</section> +<section id="slide-org8ab3449"> +<h3 id="org8ab3449"><span class="section-number-3">1.2</span> Qui ne répond pas à tous les problèmes</h3> +<ul> +<li class="fragment appear"><p> +Tout conteneuriser ? +</p> +<div class="org-src-container"> + +<pre><code class="" bash >“Debian and other distributions +are going to be that thing you +run docker on, little more.” + Jos Poortvliet, développeur ownCloud +</code></pre> +</div></li> +<li class="fragment appear">Qualité des paquets</li> +<li class="fragment appear">Opacité, manque de flexibilité</li> +<li class="fragment appear">Manque d'outils de développement</li> + +</ul> +</section> +<section id="slide-orgef08ac1"> +<h3 id="orgef08ac1"><span class="section-number-3">1.3</span> Sommes-nous fichus ?</h3> +</section> +<section id="slide-org7192e6c" data-background="./images/Guix_logo.svg.png" data-background-size="800px"> +<h3 id="org7192e6c"><span class="section-number-3">1.4</span> Non !</h3> + +</section> +</section> +<section> +<section id="slide-orga21ab7d"> +<h2 id="orga21ab7d"><span class="section-number-2">2</span> Guix</h2> +<ul> +<li class="fragment appear">Peut être vu comme un package manager</li> +<li class="fragment appear">Ensemble d'outils pour faire du déploiement de logiciels et de systèmes</li> + +</ul> + +</section> +<section id="slide-orgb9ea19f"> +<h3 id="orgb9ea19f"><span class="section-number-3">2.1</span> Paquets</h3> +<ul> +<li class="fragment appear"><p> +Pas besoin d'être root +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix package -i gcc-toolchain openmpi hwloc +</code></pre> +</div></li> +<li class="fragment appear"><p> +Transactionnel +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix package --roll-back +</code></pre> +</div></li> +<li class="fragment appear"><p> +Permet d'expérimenter +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix package --profile=./experiment -i gcc-toolchain@5.5 hwloc@1 +</code></pre> +</div></li> +<li class="fragment appear"><p> +Gestion des paquets (version control) +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix package --manifest=my-packages.scm +</code></pre> +</div> +<div class="org-src-container"> + +<pre><code class="" scheme >(specifications->manifest + '("gcc-toolchain" + "emacs" + "guile" + "emacs-geiser")) +</code></pre> +</div></li> + +</ul> + +</section> +<section id="slide-org6c5d276"> +<h3 id="org6c5d276"><span class="section-number-3">2.2</span> Environnement</h3> +<div class="outline-text-3" id="text-2-2"> +</div> +</section> +<section id="slide-org09eca3b"> +<h4 id="org09eca3b"><span class="section-number-4">2.2.1</span> Reproduction</h4> +<ul> +<li class="fragment appear"><p> +Je me fais mon environnement de travail +</p> +<div class="org-src-container"> + +<pre><code class="" bash >bob@laptop$ guix package --manifest=my-packages.scm +</code></pre> +</div></li> +<li class="fragment appear"><p> +Quelle version de Guix j'utilise ? +</p> +<div class="org-src-container"> + +<pre><code class="" bash >bob@laptop$ guix describe + guix cabba9e + repository URL: https://git.sv.gnu.org/git/guix.git + commit: cabba9e15900d20927c1f69c6c87d7d2a62040fe +</code></pre> +</div></li> +<li class="fragment appear"><p> +Alice peut le reproduire exactement +</p> +<div class="org-src-container"> + +<pre><code class="" bash >alice@laptop$ guix pull --commit=cabba9e +alice@laptop$ guix package --manifest=my-packages.scm +</code></pre> +</div></li> + +</ul> + +</section> +<section id="slide-orga134cfc"> +<h4 id="orga134cfc"><span class="section-number-4">2.2.2</span> Facile de hacker GNU hello</h4> +<ul> +<li class="fragment appear"><p> +On le télécharge +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix build -S hello +/gnu/store/...-hello-2.10.tar.gz +</code></pre> +</div></li> +<li class="fragment appear"><p> +'guix environment' donne tous les outils nécessaires pour le compiler (gcc, make…) +</p> +<div class="org-src-container"> + +<pre><code class="" bash >~/hello-2.10$ guix environment hello +</code></pre> +</div></li> +<li class="fragment appear"><p> +On compile +</p> +<div class="org-src-container"> + +<pre><code class="" bash >~/hello-2.10$ ./configure && make +</code></pre> +</div></li> + +</ul> + +</section> +<section id="slide-org58b15d5"> +<h4 id="org58b15d5"><span class="section-number-4">2.2.3</span> Tester un paquet Python sans rien installer</h4> +<ul> +<li class="fragment appear"><p> +On se met dans le bon environnement +</p> +<div class="org-src-container"> + +<pre><code class="" bash >~$ guix environment --ad-hoc python python-numpy +</code></pre> +</div></li> +<li class="fragment appear"><p> +Et on fait notre test +</p> +<div class="org-src-container"> + +<pre><code class="" bash >~$ python3 +>>> import numpy +</code></pre> +</div></li> + +</ul> + +</section> +<section id="slide-orgc892f10"> +<h3 id="orgc892f10"><span class="section-number-3">2.3</span> Système</h3> +<ul> +<li class="fragment appear"><p> +On déclare tout ce qu'on veut avoir dans notre système +</p> +<div class="org-src-container"> + +<pre><code class="" scheme >(operating-system + (host-name "schememachine") + (timezone "Europe/Paris") + (locale "fr_FR.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))) +</code></pre> +</div></li> +<li class="fragment appear"><p> +Et on instancie, un peu à la Ansible +</p> +<div class="org-src-container"> + +<pre><code class="" bash >guix system build config.scm +guix system vm config.scm +guix system container config.scm +guix system reconfigure config.scm +</code></pre> +</div></li> +<li class="fragment appear">On peut déployer ça n'importe où</li> + +</ul> + +</section> +<section id="slide-org324e2ce"> +<h3 id="org324e2ce"><span class="section-number-3">2.4</span> Liberté, Sécurité</h3> +<ul> +<li class="fragment appear">Builds reproductibles +<ul> +<li>On veut que le binaire corresponde à sa source</li> +<li>On veut pouvoir recompiler le logiciel</li> +<li>Guix fournit des outils comme 'guix challenge'</li> + +</ul></li> +<li class="fragment appear">Bootstrappable builds +<ul> +<li>On évite de dépendre de gros binaires opaques</li> + +</ul></li> + +</ul> + +</section> +</section> +<section> +<section id="slide-org0a616b0"> +<h2 id="org0a616b0"><span class="section-number-2">3</span> L'avenir de GNU Guix</h2> +<ul> +<li class="fragment appear">Version 1.0</li> +<li class="fragment appear">De nouveaux paquets, importeurs, updaters</li> +<li class="fragment appear">Un installateur graphique</li> +<li class="fragment appear">Un installateur vraiment graphique</li> +<li class="fragment appear">Une interface utilisateur améliorée</li> +<li class="fragment appear">La modification de paquets depuis l'interface en ligne de commande</li> +<li class="fragment appear">Une ferme de compilation plus robuste</li> +<li class="fragment appear">Un meilleur support d'ARM et d'autres architectures</li> + +</ul> +</section> +</section> +<section> +<section id="slide-org3883b61"> +<h2 id="org3883b61"><span class="section-number-2">4</span> Facilité de contribuer</h2> +</section> +</section> +<section> +<section id="slide-orgaed687f"> +<h2 id="orgaed687f"><span class="section-number-2">5</span> Le financement de GNU Guix</h2> +<ul> +<li class="fragment appear">Dons via la FSF</li> +<li class="fragment appear">Hébergement, maintenance et amélioration de la ferme de compilation</li> + +</ul> +</section> +</section> +</div> +</div> +<script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js"></script> +<script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"></script> +<script> +// Full list of configuration options available here: +// https://github.com/hakimel/reveal.js#configuration +Reveal.initialize({ + +controls: true, +progress: true, +history: false, +center: true, +slideNumber: 'c', +rollingLinks: false, +keyboard: true, +mouseWheel: false, +fragmentInURL: false, +pdfSeparateFragments: true, + +overview: true, + +theme: Reveal.getQueryHash().theme, // available themes are in /css/theme +transition: Reveal.getQueryHash().transition || 'page', // default/cube/page/concave/zoom/linear/fade/none +transitionSpeed: 'default', +multiplex: { + secret: '', // null if client + id: '', // id, obtained from socket.io server + url: '' // Location of socket.io server +}, + +// Optional libraries used to extend on reveal.js +dependencies: [ + { src: 'http://cdn.jsdelivr.net/reveal.js/3.0.0/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }] +}); +</script> +</body> +</html> diff --git a/talks/fundthecode-2019/talk.org b/talks/fundthecode-2019/talk.org new file mode 100644 index 0000000..c29a97b --- /dev/null +++ b/talks/fundthecode-2019/talk.org @@ -0,0 +1,183 @@ +#+AUTHOR: Clément Lassieur & Mathieu Othacehe +#+EMAIL: clem...@lassieur.org, m.othac...@gmail.com +#+TITLE: GNU Guix +#+OPTIONS: toc:nil + +#+REVEAL_ROOT: http://cdn.jsdelivr.net/reveal.js/3.0.0/ +#+REVEAL_TRANS: page +#+REVEAL_PLUGINS: (highlight) +#+REVEAL_THEME: night + +# https://video.fosdem.org/2019/K.3.401/gnu_guix_new_approach_to_software_distribution.webm + +* Gestion de paquets sous GNU/Linux +** Un écosystème complexe +#+ATTR_REVEAL: :frag (appear) +- Les distributions historiques sont en perte de vitesse +- Chaque language implémente son propre "package manager" : pip, + Cargo, Cabal, npm +- D'autres types d'outils apparaissent +#+ATTR_REVEAL: :frag (appear) + * Pour les développeurs : VirtualEnv, Spack, EasyBuild + * Pour les administrateurs : Ansible, Puppet, Propellor + * Pour tous : Flatpak, snap, Docker, Vagrant + +** Qui ne répond pas à tous les problèmes +#+ATTR_REVEAL: :frag (appear) + - Tout conteneuriser ? + #+begin_src bash + “Debian and other distributions + are going to be that thing you + run docker on, little more.” + Jos Poortvliet, développeur ownCloud + #+end_src + - Qualité des paquets + - Opacité, manque de flexibilité + - Manque d'outils de développement +** Sommes-nous fichus ? +** Non ! + :PROPERTIES: + :reveal_background: ./images/Guix_logo.svg.png + :reveal_background_size: 800px + :END: + +* Guix +#+ATTR_REVEAL: :frag (appear) +- Peut être vu comme un package manager +- Ensemble d'outils pour faire du déploiement de logiciels et de systèmes + +** Paquets +#+ATTR_REVEAL: :frag (appear) +- Pas besoin d'être root + #+begin_src bash +guix package -i gcc-toolchain openmpi hwloc + #+end_src +- Transactionnel + #+begin_src bash +guix package --roll-back + #+end_src +- Permet d'expérimenter + #+begin_src bash +guix package --profile=./experiment -i gcc-toolchain@5.5 hwloc@1 + #+end_src +- Gestion des paquets (version control) + #+begin_src bash +guix package --manifest=my-packages.scm + #+end_src + #+begin_src scheme + (specifications->manifest + '("gcc-toolchain" + "emacs" + "guile" + "emacs-geiser")) + #+end_src + +** Environnement +*** Reproduction + +#+ATTR_REVEAL: :frag (appear) +- Je me fais mon environnement de travail + #+begin_src bash +bob@laptop$ guix package --manifest=my-packages.scm + #+end_src +- Quelle version de Guix j'utilise ? + #+begin_src bash +bob@laptop$ guix describe + guix cabba9e + repository URL: https://git.sv.gnu.org/git/guix.git + commit: cabba9e15900d20927c1f69c6c87d7d2a62040fe + #+end_src +- Alice peut le reproduire exactement + #+begin_src bash +alice@laptop$ guix pull --commit=cabba9e +alice@laptop$ guix package --manifest=my-packages.scm + #+end_src + +*** Facile de hacker GNU hello + +#+ATTR_REVEAL: :frag (appear) +- On le télécharge + #+begin_src bash +guix build -S hello +/gnu/store/...-hello-2.10.tar.gz + #+end_src +- 'guix environment' donne tous les outils nécessaires pour le compiler (gcc, make...) + #+begin_src bash +~/hello-2.10$ guix environment hello + #+end_src +- On compile + #+begin_src bash +~/hello-2.10$ ./configure && make + #+end_src + +*** Tester un paquet Python sans rien installer + +#+ATTR_REVEAL: :frag (appear) +- On se met dans le bon environnement + #+begin_src bash +~$ guix environment --ad-hoc python python-numpy + #+end_src +- Et on fait notre test + #+begin_src bash +~$ python3 +>>> import numpy + #+end_src + +** Système +#+ATTR_REVEAL: :frag (appear) +- On déclare tout ce qu'on veut avoir dans notre système + #+begin_src scheme + (operating-system + (host-name "schememachine") + (timezone "Europe/Paris") + (locale "fr_FR.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_src +- Et on instancie, un peu à la Ansible + #+begin_src bash +guix system build config.scm +guix system vm config.scm +guix system container config.scm +guix system reconfigure config.scm + #+end_src +- On peut déployer ça n'importe où + +** Liberté, Sécurité +#+ATTR_REVEAL: :frag (appear) +- Builds reproductibles + * On veut que le binaire corresponde à sa source + * On veut pouvoir recompiler le logiciel + * Guix fournit des outils comme 'guix challenge' +- Bootstrappable builds + * On évite de dépendre de gros binaires opaques + +* L'avenir de GNU Guix +#+ATTR_REVEAL: :frag (appear) +- Version 1.0 +- De nouveaux paquets, importeurs, updaters +- Un installateur graphique +- Un installateur vraiment graphique +- Une interface utilisateur améliorée +- La modification de paquets depuis l'interface en ligne de commande +- Une ferme de compilation plus robuste +- Un meilleur support d'ARM et d'autres architectures +* Facilité de contribuer +* Le financement de GNU Guix +#+ATTR_REVEAL: :frag (appear) +- Dons via la FSF +- Hébergement, maintenance et amélioration de la ferme de compilation