maintenance/talks/fundthecode-2019/talk.html

373 lines
11 KiB
HTML
Raw Permalink Normal View History

<!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 &amp; 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&#x2026;)
</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>