maintenance/talks/fundthecode-2019/talk.html

373 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>