Compilations reproductibles Permettre le lien entre un binaire et sa - - PowerPoint PPT Presentation

compilations reproductibles
SMART_READER_LITE
LIVE PREVIEW

Compilations reproductibles Permettre le lien entre un binaire et sa - - PowerPoint PPT Presentation

Compilations reproductibles Permettre le lien entre un binaire et sa source Lunar lunar@debian.org Lunar (Debian) Compilations reproductibles 1 / 101 Compilation reproductible? Le principe de compilation reproductible permet


slide-1
SLIDE 1

Compilations reproductibles

Permettre le lien entre un binaire et sa source Lunar lunar@debian.org

Lunar (Debian) Compilations reproductibles 1 / 101

slide-2
SLIDE 2

Compilation reproductible? Le principe de « compilation reproductible » permet à quiconque de reproduire, des binaires identiques à partir de la même source

Lunar (Debian) Compilations reproductibles 2 / 101

slide-3
SLIDE 3

Avoir confiance dans la compilation?

source binaire

compilation

logiciel libre

liberté d’étudier liberté d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

slide-4
SLIDE 4

Avoir confiance dans la compilation?

source binaire

compilation

logiciel libre

liberté d’étudier liberté d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

slide-5
SLIDE 5

Avoir confiance dans la compilation?

source binaire

compilation

logiciel libre

liberté d’étudier liberté d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

slide-6
SLIDE 6

Avoir confiance dans la compilation?

source binaire

compilation

logiciel libre

liberté d’étudier liberté d’éxecuter

peut-être vérifié peut-être utilisé

comment avoir confiance ?

Lunar (Debian) Compilations reproductibles 3 / 101

slide-7
SLIDE 7

Point de vue du dév.

« Je suis au courant de ce qu’il y a dans le binaire, c’est moi qui l’ai compilé !” « Je prends toute les précautions possibles ! La machine de compilation est ultra-sécurisée ! » « Pourquoi est-ce que je devrais m’embêter avec des risques hypothétiques ? »

Lunar (Debian) Compilations reproductibles 4 / 101

slide-8
SLIDE 8

Sans blague

Pendant une conférence de la CIA en 2012 : Source : The Intercept, 2015-03-10

Lunar (Debian) Compilations reproductibles 5 / 101

slide-9
SLIDE 9

Une backdoor, c’est petit comment?

OpenSSH 3.0.2 (CVE-2002-0083) – trou de sécurité (avec élévation de privilèges : accès root à distance)

{ Channel *c;

  • if (id < 0 || id > channels_alloc) {

+ if (id < 0 || id >= channels_alloc) { log("channel_lookup: %d: bad id", id); return; }

Lunar (Debian) Compilations reproductibles 6 / 101

slide-10
SLIDE 10

Correction du bug (en assembleur)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp) js 16 js 16 mov 0x4,%eax mov 0x4,%eax cmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp) jle 30 jl 30 mov 0x8(%ebp),%eax mov 0x8(%ebp),%eax mov %eax,0x4(%esp) mov %eax,0x4(%esp) movl $0x4c,(%esp) movl $0x4c,(%esp) call 25 call 25

Lunar (Debian) Compilations reproductibles 7 / 101

slide-11
SLIDE 11

Correction du bug (en assembleur)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp) js 16 js 16 mov 0x4,%eax mov 0x4,%eax cmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp) jle 30 jl 30 mov 0x8(%ebp),%eax mov 0x8(%ebp),%eax mov %eax,0x4(%esp) mov %eax,0x4(%esp) movl $0x4c,(%esp) movl $0x4c,(%esp) call 25 call 25

Lunar (Debian) Compilations reproductibles 7 / 101

slide-12
SLIDE 12

Différence au niveau du binaire

Quelle est la différence entre if (a > b) et if (a >= b) en assembleur x86? assembleur :

JLE JL

  • pcode :

0x7E 0x7C

binaire :

01111110 01111100

Un seul bit !

C’est aussi le cas pour d’autres opcodes.

Lunar (Debian) Compilations reproductibles 8 / 101

slide-13
SLIDE 13

Correction du bug (en héxadécimal)

Vulnérable Corrigé

55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7e 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7c 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35

Taille totale du fichier : approx. 500 kB

Lunar (Debian) Compilations reproductibles 9 / 101

slide-14
SLIDE 14

Correction du bug (en héxadécimal)

Vulnérable Corrigé

55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7e 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7c 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35

Taille totale du fichier : approx. 500 kB

Lunar (Debian) Compilations reproductibles 9 / 101

slide-15
SLIDE 15

Vérification indépendante

environnement de compilation + code source = binaire Si tout le monde obtient le même résultat, il n’y a pas eu de malversations.

Lunar (Debian) Compilations reproductibles 10 / 101

slide-16
SLIDE 16

Comment je m’y suis mis?

Lunar (Debian) Compilations reproductibles 11 / 101

slide-17
SLIDE 17

La motivation pour Bitcoin

Des modifications malveillantes des binaires pourraient permettre des transferts non-désirés et irrévocables de bitcoins. Des dév. pourraient être tenu·e·s pour responsables. Comment croire que c’est leur machine qui a été piratée? La compilation reproductible permet de protéger les devs!

Lunar (Debian) Compilations reproductibles 12 / 101

slide-18
SLIDE 18

Rien de neuf

From: Martin Uecker <muecker@gmx.de> Cc: debian-devel@lists.debian.org Date: Sun, 23 Sep 2007 23:32:59 +0200

I think it would be really cool if the Debian policy required that packages could be rebuild bit-identical from source. At the moment, it is impossible to independly verify the integricity of binary packages.

https://lists.debian.org/debian-devel/2007/09/msg00746.html

Lunar (Debian) Compilations reproductibles 13 / 101

slide-19
SLIDE 19

Pourquoi Debian?

Debian est la plus grande collection de logiciels libres Plus de 22 000 paquets sources « Nos priorités sont nos utilisateur·ice·s et les logiciels libres »

Lunar (Debian) Compilations reproductibles 14 / 101

slide-20
SLIDE 20

Comment on fait?

Enregistrer l’environnement de compilation Reproduire l’environnement de compilation Éliminer les variations inutiles

Lunar (Debian) Compilations reproductibles 15 / 101

slide-21
SLIDE 21

Approches possibles pour l’environnement

Recompiler l’environnement

◮ Coreboot, OpenWrt, Bazel

Image système et script de configuration

◮ Gitian (Bitcoin, Tor Browser), Docker (Mozilla), Vagrant

Enregistrement des paquets et réinstallation ultérieure

◮ Debian ◮ (OpenSuse Build Service)

Lunar (Debian) Compilations reproductibles 16 / 101

slide-22
SLIDE 22

Recompiler l’environnement

Une recette permet de reproduire l’environnement à partir des sources Un fichier (ex. Makefile) décrit la version à récupérer Dans le cas de Bazel, mettre l’intégralité des sources dans un système de gestion de versions. Bonus : les changements dans les outils de compilation ont le même processus que des changements sur le code.

Lunar (Debian) Compilations reproductibles 17 / 101

slide-23
SLIDE 23

Image système et paquets

Conteneur ou machine virtuelle Installation d’une distribution de base (e.g. Ubuntu) Script d’installation de l’environnement Ça fonctionne avec des distributions stables ou alors des recompilations depuis des sources.

Lunar (Debian) Compilations reproductibles 18 / 101

slide-24
SLIDE 24

Enregistrement des paquets utilisés

Les fichiers *.buildinfo sont en passe d’être ajoutés dans Debian afin d’enregistrer : La version des dépendances de compilations

◮ … et celles de toutes leurs dépendances

Une somme de contrôle pour le paquet source Une somme de contrôle pour les paquets binaires

Lunar (Debian) Compilations reproductibles 19 / 101

slide-25
SLIDE 25

Un exemple de *.buildinfo

Format: 1.9 Build-Architecture: amd64 Source: txtorcon Binary: python-txtorcon Architecture: all Version: 0.11.0-1 Build-Path: /usr/src/debian/txtorcon-0.11.0-1 Checksums-Sha256: a26549d9…7b 125910 python-txtorcon_0.11.0-1_all.deb 28f6bcbe…69 2039 txtorcon_0.11.0-1.dsc Build-Environment: base-files (= 8), base-passwd (= 3.5.37), bash (= 4.3-11+b1), …

Lunar (Debian) Compilations reproductibles 20 / 101

slide-26
SLIDE 26

Réinstaller les paquets originaux

snapshot.debian.org archive tous les états de l’archive

Debian 29 Tio de données sur 17 million de fichiers (2015-05-25)

Lunar (Debian) Compilations reproductibles 21 / 101

slide-27
SLIDE 27

srebuild

Script qui permet de reproduire une compilation à partir d’un buildinfo Trouve la sauvegarde de l’archive qui correspond Installe les paquets listés dans le fichier .buildinfo Lance la compilation Prototype : #774415

Lunar (Debian) Compilations reproductibles 22 / 101

slide-28
SLIDE 28

Éliminer les variations

Il faut rendre le processus de compilation déterministe : Même entrée = Même sortie

Lunar (Debian) Compilations reproductibles 23 / 101

slide-29
SLIDE 29

Approche générale

Gitian (Bitcoin, Tor Browser) :

◮ Utiliser une machine virtuelle (même noyau, même utilisateur,

même chemin, …)

◮ libfaketime

Debian :

◮ Corriger les outils ◮ Corriger les systèmes de compilations ◮ Bidouiller en dernier recours

Lunar (Debian) Compilations reproductibles 24 / 101

slide-30
SLIDE 30

Comprendre les différences

diff

OpenSUSE build-compare debbindiff

Lunar (Debian) Compilations reproductibles 25 / 101

slide-31
SLIDE 31

debbindiff

Examine deux fichiers Sort les différences au format HTML ou texte Décompresse les archives de façon récursive Cherche la lisibilité :

◮ décompresse les PDF ◮ désassemble les binaires ◮ réassemble les fichiers Gettext ◮ … facile à étendre pour de nouveaux formats de fichiers

Reviens à la comparaison binaire pour tout le reste

Lunar (Debian) Compilations reproductibles 26 / 101

slide-32
SLIDE 32

Comment trouver les différences?

Compiler la source Recompiler la source dans un environnement différent Comparer les résultast

Lunar (Debian) Compilations reproductibles 27 / 101

slide-33
SLIDE 33

reproducible.debian.net

Système de tests en continu piloté par Jenkins Grosse machine sponsorisée par ProfitBricks Vérifie en moyenne autour de 1300 paquets Debian par jour Résultats accessibles via la web Ajoutés récemment : Coreboot et OpenWrt

Lunar (Debian) Compilations reproductibles 28 / 101

slide-34
SLIDE 34

Variations testées pour les paquets Debian

La deuxième compilation est différente sur : l’heure le fuseau horaire l’ordre des fichiers l’ordre des processus le nombre de cœurs alloués

Lunar (Debian) Compilations reproductibles 29 / 101

slide-35
SLIDE 35

Variations testées pour les paquets Debian

le nom de la machine et son nom de domaine le nom du compte, ainsi que uid et gid le umask la locale (LC_ALL) et la langue (LANG) la version du noyau le PATH

Lunar (Debian) Compilations reproductibles 30 / 101

slide-36
SLIDE 36

Variations en projet

la date (mais on triche avec les fuseaux horaires)

/proc/cpuinfo

le système de fichiers Peut-être qu’il manque encore d’autres variations à ajouter…

Lunar (Debian) Compilations reproductibles 31 / 101

slide-37
SLIDE 37

Problèmes identifiés

L’horodatage (timestamp) L’ordre des fichiers Du (pseudo-)aléatoire :

◮ Les chemins de fichiers temporaires ◮ UUID ◮ Les protections contre les attaques de complexité

Lunar (Debian) Compilations reproductibles 32 / 101

slide-38
SLIDE 38

Problèmes identifiés (suite)

Lié au processour ou à la mémoire :

◮ Des optimisations de code liées au type de processeur ◮ L’écriture d’adresses mémoires

Le chemin du dossier de compilation Et bien d’autres… (par exemple les options de localisation)

Lunar (Debian) Compilations reproductibles 33 / 101

slide-39
SLIDE 39

Problèmes identifiés (suite)

Examples

Horodatage par le système de compilation

Lunar (Debian) Compilations reproductibles 34 / 101

slide-40
SLIDE 40

Horodatage dans les en-têtes gzip

Lunar (Debian) Compilations reproductibles 35 / 101

slide-41
SLIDE 41

Horodatage par Maven

Lunar (Debian) Compilations reproductibles 36 / 101

slide-42
SLIDE 42

Horodatage dans des Makefile générés

Lunar (Debian) Compilations reproductibles 37 / 101

slide-43
SLIDE 43

Horodatage dans des en-têtes C

Lunar (Debian) Compilations reproductibles 38 / 101

slide-44
SLIDE 44

Horodatage par PyQt4

Lunar (Debian) Compilations reproductibles 39 / 101

slide-45
SLIDE 45

Horodatage par le compilateur Erlang

Lunar (Debian) Compilations reproductibles 40 / 101

slide-46
SLIDE 46

Horodatage dans les binaires au format PE

Windows, UEFI, Mono…

Lunar (Debian) Compilations reproductibles 41 / 101

slide-47
SLIDE 47

Horodatage dans les bibliothèques ADA

Lunar (Debian) Compilations reproductibles 42 / 101

slide-48
SLIDE 48

Horodatage dans les gemspec Ruby

Lunar (Debian) Compilations reproductibles 43 / 101

slide-49
SLIDE 49

Horodatage dans le registre PHP

Lunar (Debian) Compilations reproductibles 44 / 101

slide-50
SLIDE 50

Horodatage par Cheetah

Lunar (Debian) Compilations reproductibles 45 / 101

slide-51
SLIDE 51

Horodatage dans la version d’un module

Lunar (Debian) Compilations reproductibles 46 / 101

slide-52
SLIDE 52

Problèmes identifiés (suite)

Examples

Les archives

Lunar (Debian) Compilations reproductibles 47 / 101

slide-53
SLIDE 53

Horodatage dans le bibliothèques statiques

Lunar (Debian) Compilations reproductibles 48 / 101

slide-54
SLIDE 54

Horodatage dans le bibliothèques statiques

Lunar (Debian) Compilations reproductibles 49 / 101

slide-55
SLIDE 55

Horodatage dans les archives ZIP

Lunar (Debian) Compilations reproductibles 50 / 101

slide-56
SLIDE 56

Horodatage dans les .jar Java

En fait, ce sont des archives ZIP.

Lunar (Debian) Compilations reproductibles 51 / 101

slide-57
SLIDE 57

Horodatage dans les archives Tar

Lunar (Debian) Compilations reproductibles 52 / 101

slide-58
SLIDE 58

Login and groupe dans les archives Tar

Lunar (Debian) Compilations reproductibles 53 / 101

slide-59
SLIDE 59

Ordre aléatoire dans les archives Tar

Lunar (Debian) Compilations reproductibles 54 / 101

slide-60
SLIDE 60

Problème identifiés (suite)

Examples

Horodatage dans la doc

Lunar (Debian) Compilations reproductibles 55 / 101

slide-61
SLIDE 61

Horodatage par Doxygen

Lunar (Debian) Compilations reproductibles 56 / 101

slide-62
SLIDE 62

Horodatage par docbook-to-man

Lunar (Debian) Compilations reproductibles 57 / 101

slide-63
SLIDE 63

Horodatage par Groovydoc

Lunar (Debian) Compilations reproductibles 58 / 101

slide-64
SLIDE 64

Horodatage par Epydoc

Lunar (Debian) Compilations reproductibles 59 / 101

slide-65
SLIDE 65

Horodatage par Sphinx

Lunar (Debian) Compilations reproductibles 60 / 101

slide-66
SLIDE 66

Horodatage par Ghostscript

Lunar (Debian) Compilations reproductibles 61 / 101

slide-67
SLIDE 67

Horodatage par LaTeX

Lunar (Debian) Compilations reproductibles 62 / 101

slide-68
SLIDE 68

Horodatage par texi2html

Lunar (Debian) Compilations reproductibles 63 / 101

slide-69
SLIDE 69

Horodatage par texi2html (suite)

Lunar (Debian) Compilations reproductibles 64 / 101

slide-70
SLIDE 70

Horodatage par help2man

Lunar (Debian) Compilations reproductibles 65 / 101

slide-71
SLIDE 71

Horodatage par GNU groff

Lunar (Debian) Compilations reproductibles 66 / 101

slide-72
SLIDE 72

Horodatage par Javadoc

Lunar (Debian) Compilations reproductibles 67 / 101

slide-73
SLIDE 73

Horodatage par man2html

Lunar (Debian) Compilations reproductibles 68 / 101

slide-74
SLIDE 74

Horodatage par LaTeX (.dvi)

Lunar (Debian) Compilations reproductibles 69 / 101

slide-75
SLIDE 75

Problèmes identifiés (suite)

Examples

« Compilé le/sur/par »

Lunar (Debian) Compilations reproductibles 70 / 101

slide-76
SLIDE 76

Horodatage par macros du préprocesseur C

Lunar (Debian) Compilations reproductibles 71 / 101

slide-77
SLIDE 77

Horodatage par macros du préprocesseur C

Lunar (Debian) Compilations reproductibles 72 / 101

slide-78
SLIDE 78

Horodatage via Makefile

Lunar (Debian) Compilations reproductibles 73 / 101

slide-79
SLIDE 79

Nom de machine enregistré via ./configure

Lunar (Debian) Compilations reproductibles 74 / 101

slide-80
SLIDE 80

Horodotage via ./configure

Lunar (Debian) Compilations reproductibles 75 / 101

slide-81
SLIDE 81

Macros m4 pour autoconf (horodatage)

Lunar (Debian) Compilations reproductibles 76 / 101

slide-82
SLIDE 82

Macros m4 pour autoconf (login)

Lunar (Debian) Compilations reproductibles 77 / 101

slide-83
SLIDE 83

Macros m4 pour autoconf (nom de machine)

Lunar (Debian) Compilations reproductibles 78 / 101

slide-84
SLIDE 84

Version du noyau

Lunar (Debian) Compilations reproductibles 79 / 101

slide-85
SLIDE 85

Points bonus

Lunar (Debian) Compilations reproductibles 80 / 101

slide-86
SLIDE 86

Problèmes identifiés (suite)

Examples

Aléatoire

Lunar (Debian) Compilations reproductibles 81 / 101

slide-87
SLIDE 87

Ordre aléatoire des hash Perl

  • cf. Algorithmic complexity attacks perlsec(1).

Lunar (Debian) Compilations reproductibles 82 / 101

slide-88
SLIDE 88

Numéro de série aléatoire dans les flux Ogg

Lunar (Debian) Compilations reproductibles 83 / 101

slide-89
SLIDE 89

Ordre aléatoire des imports dans du Python

Lunar (Debian) Compilations reproductibles 84 / 101

slide-90
SLIDE 90

Nom de fichiers temporaire avec ocamlc

Lunar (Debian) Compilations reproductibles 85 / 101

slide-91
SLIDE 91

Problèmes identifiés (suite)

Examples

Toujours plus d’horodatage !

Lunar (Debian) Compilations reproductibles 86 / 101

slide-92
SLIDE 92

Horodatage dans les EPUB

Lunar (Debian) Compilations reproductibles 87 / 101

slide-93
SLIDE 93

Horodatage dans les PNG

Even images!

Lunar (Debian) Compilations reproductibles 88 / 101

slide-94
SLIDE 94

Horodatage dans les polices TrueType

And fonts!

Lunar (Debian) Compilations reproductibles 89 / 101

slide-95
SLIDE 95

Problèmes identifiés (suite)

Chemin du dossier de compilation Enregistrement de l’environnement (par exemple le PATH) Permissions des fichiers Signature cryptographique Et il en manque de nombreux autres…

Lunar (Debian) Compilations reproductibles 90 / 101

slide-96
SLIDE 96

Comment corriger?

Horodatage :

◮ Préférer une référence précise au code en train d’être compilé

(numéro de version, hash du commit git)

◮ Utiliser une date de référence (dernière modification du code) ◮ Utiliser le fuseau horaire UTC

Ordre aléatoire :

◮ Trier les clés ou les fichiers

Lunar (Debian) Compilations reproductibles 91 / 101

slide-97
SLIDE 97

Comment corriger? (suite)

Chemins :

◮ Utiliser toujours le même dossier

Noyau, processeur, login, … :

◮ Ne pas enregistrer d’informations inutiles dans les binaires

On peut aussi nettoyer a posteriori.

Lunar (Debian) Compilations reproductibles 92 / 101

slide-98
SLIDE 98

strip-nondeterminism

Normalise divers formats de fichiers Gère pour l’instant :

◮ Archives ar (.a) ◮ gzip ◮ Java jar ◮ Javadoc HTML ◮ Maven pom.properties ◮ PNG ◮ Archives ZIP

Écrit en Perl (tout comme dpkg-dev)

Lunar (Debian) Compilations reproductibles 93 / 101

slide-99
SLIDE 99

Où en est-on dans Debian?

Lunar (Debian) Compilations reproductibles 94 / 101

slide-100
SLIDE 100

Pour celles et ceux dans le fond

82%

plus de 18 000 paquets sources ! (dans notre environnement de test)

Lunar (Debian) Compilations reproductibles 95 / 101

slide-101
SLIDE 101

Pour celles et ceux dans le fond

82%

plus de 18 000 paquets sources ! (dans notre environnement de test)

Lunar (Debian) Compilations reproductibles 95 / 101

slide-102
SLIDE 102

Toujours en phase expérimentale

Il n’est pas encore possible de recompiler de façon reproductible des paquets livrés par Debian. On teste et raffine des changements sur les outils de compilation dans un dépôt à part. Prochaines étapes :

◮ Permettre les .buildinfo dans l’archive (#763822) ◮ Faire rentrer les changements pour dpkg ◮ Avoir les .buildinfo sur les miroirs ◮ Terminer le script srebuild (#774415)

Lunar (Debian) Compilations reproductibles 96 / 101

slide-103
SLIDE 103

D’autres distributions

Fedora

http://securityblog.redhat.com/2013/09/18/ reproducible-builds-for-fedora/

OpenSUSE build-compare

https://build.opensuse.org/package/show/openSUSE: Factory/build-compare

NixOS

http://lists.science.uu.nl/pipermail/nix-dev/2013-June/ 011357.html

FreeBSD

https://wiki.freebsd.org/ReproducibleBuilds and https://wiki.freebsd.org/PortsReproducibleBuilds

OpenWrt

https://lists.openwrt.org/pipermail/openwrt-devel/ 2015-March/032136.html

Lunar (Debian) Compilations reproductibles 97 / 101

slide-104
SLIDE 104

Partout ailleurs?

Venez discuter!

Lunar (Debian) Compilations reproductibles 98 / 101

slide-105
SLIDE 105

Partout ailleurs?

La compilation reproductible doit devenir la norme. On peut aider à faire du test en continu. La documentation sur le wiki de Debian souhaite être utile à tout le monde.

Lunar (Debian) Compilations reproductibles 99 / 101

slide-106
SLIDE 106

Merci

Asheesh Laroia, Holger Levsen, Reiner Herrmann, Mattia Rizzolo, Daniel Kahn Gilmor, et tellement d’autres… Mike Perry et Seth Schoen pour le talk au 31C3 ProfitBricks pour le sponser de jenkins.debian.net Globalsign pour les certificats X.509 Les designers des icônes Tango Toutes celles et ceux qui nous soutiennent!

Lunar (Debian) Compilations reproductibles 100 / 101

slide-107
SLIDE 107

Des questions? Des commentaires?

?

https://wiki.debian.org/ReproducibleBuilds https://reproducible.debian.net/ #debian-reproducible on OFTC

Lunar

0603 CCFD 9186 5C17 E88D 4C79 8382 C95C 2902 3DF9

Lunar (Debian) Compilations reproductibles 101 / 101