80
Reproducible builds everywhere eg. in Debian, OpenWrt and LEDE Bit by bit identical binaries from a given source Alexander ’lynxis’ Couzens Holger ’h01ger’ Levsen OpenWrt Summit in Berlin, Germany 2016-10-13

Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

  • Upload
    others

  • View
    45

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Reproducible builds everywhereeg. in Debian, OpenWrt and LEDE

Bit by bit identical binariesfrom a given source

Alexander ’lynxis’ CouzensHolger ’h01ger’ Levsen

OpenWrt Summit in Berlin, Germany2016-10-13

Page 2: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

about h01gerB8BF 5413 7B09 D35C F026 FE9D 091A B856 069A AA1CDebian user since 1995Debian contributor since 2001OpenWrt user since 2006Debian developer since 2007DebConf organizer, founded the DebConf video team

I http://video.debian.netDebian-Edu (Debian for education)Debian QA (quality assurance)

I https://piuparts.debian.orgI https://jenkins.debian.net ( 1200 jobs continously testing Debian)

Debian Reproducible builds team memberI since April 2015 funded by the Linux Foundation

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 2 / 52

Page 3: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

about lynxis

390D CF78 8BF9 AA50 4F8F F1E2 C29E 9DA6 A0DF 8604Debian user since 2003OpenWrt user since 2006LEDE founding membercoreboot hackertests.reproducible-builds.org contributorCCC member

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 3 / 52

Page 4: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

about OpenWrt and LEDE

In this talk we’ll ignore the distinction between the two:when we say ”OpenWrt” me mean ”LEDE and OpenWrt”,when we say ”LEDE” me mean ”OpenWrt and LEDE”,when we say ”OpenWrt and LEDE” we mean ”LEDE and OpenWrt”.

They are two projects though and when there are differences we’llmention them.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 4 / 52

Page 5: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

about OpenWrt and LEDE

In this talk we’ll ignore the distinction between the two:when we say ”OpenWrt” me mean ”LEDE and OpenWrt”,when we say ”LEDE” me mean ”OpenWrt and LEDE”,when we say ”OpenWrt and LEDE” we mean ”LEDE and OpenWrt”.They are two projects though and when there are differences we’llmention them.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 4 / 52

Page 6: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Who are you?

Seen a talk about reproducible builds?Contributed to the effort?Uses Debian or a Debian based system?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 5 / 52

Page 7: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Who are you?

Seen a talk about reproducible builds?

Contributed to the effort?Uses Debian or a Debian based system?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 5 / 52

Page 8: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Who are you?

Seen a talk about reproducible builds?Contributed to the effort?

Uses Debian or a Debian based system?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 5 / 52

Page 9: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Who are you?

Seen a talk about reproducible builds?Contributed to the effort?Uses Debian or a Debian based system?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 5 / 52

Page 10: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Debian reproducible builds teamakiraAlexis BienvenüeAndrew AyerAsheesh LaroiaCeridwenChris LambChris WestChristoph BergDaniel Kahn GillmorDaniel ShahafDavid SuarezDholeDrew FisherEmmanuel BourgEmanuel BronshteinEsa Peuha

Fabian WolffGuillem JoverHans-Christoph SteinerHelmut GrohneHolger LevsenHW42IntrigeriJelmer VernooijjoschJuan PiccaLunarMathieu BridonMattia RizzoloNicolas BoulenguezNiels ThykierNiko Tyni

Paul WisePeter De WachterPhilip RinnReiner HerrmannSantiago VilaSascha SteinbissSatyam ZodeScarlett ClarkStefano RiveraStéphane GlonduSteven ChamberlainTom FitzhenryValerie YoungValentin LorentzWookeyXimin Luo

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 6 / 52

Page 11: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Debian reproducible builds teamakiraAlexis BienvenüeAndrew AyerAsheesh LaroiaCeridwenChris LambChris WestChristoph BergDaniel Kahn GillmorDaniel ShahafDavid SuarezDholeDrew FisherEmmanuel BourgEmanuel BronshteinEsa Peuha

Fabian WolffGuillem JoverHans-Christoph SteinerHelmut GrohneHolger LevsenHW42IntrigeriJelmer VernooijjoschJuan PiccaLunarMathieu BridonMattia RizzoloNicolas BoulenguezNiels ThykierNiko Tyni

Paul WisePeter De WachterPhilip RinnReiner HerrmannSantiago VilaSascha SteinbissSatyam ZodeScarlett ClarkStefano RiveraStéphane GlonduSteven ChamberlainTom FitzhenryValerie YoungValentin LorentzWookeyXimin Luo

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 6 / 52

Page 12: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

jenkins.debian.net.git contributorsakiraAlexander CouzensLevente ’anthraxx’ PolyakAntonio TerceiroAxel BeckertBryan NewboldChris LambDaniel Kahn GillmorGabriele GiaconeHans-Christoph SteinerHelmut GrohneHolger LevsenHW42James McCoyJoachim Breitner

Johannes ’josch’ SchauerJérémy BobbioMattia RizzoloNiels ThykierPaul WisePetter ReinholdtsenPhilip HandsReiner HerrmannSamuel ThibaultSteven ChamberlainTails developersUlrike UhligWolfgang SchweerWouter Verhelst

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 7 / 52

Page 13: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

jenkins.debian.net.git contributorsakiraAlexander CouzensLevente ’anthraxx’ PolyakAntonio TerceiroAxel BeckertBryan NewboldChris LambDaniel Kahn GillmorGabriele GiaconeHans-Christoph SteinerHelmut GrohneHolger LevsenHW42James McCoyJoachim Breitner

Johannes ’josch’ SchauerJérémy BobbioMattia RizzoloNiels ThykierPaul WisePetter ReinholdtsenPhilip HandsReiner HerrmannSamuel ThibaultSteven ChamberlainTails developersUlrike UhligWolfgang SchweerWouter Verhelst

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 7 / 52

Page 14: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 15: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

The problem

Available on media.ccc.de, 31c3h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 9 / 52

Page 16: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

A few examples from that 31c3 talk

CVE-2002-0083: remote root exploit in sshd, a single bit differencein the binary

31c3 talk had a live demo with a kernel module modifying sourcecode in memory onlyHow can you be sure what’s running on your machine or on a builddaemon network connected to the net? Do you ever leave yourcomputers physically alone?Huge financial incentives to crack developer machines or a project’sbuild infrastructure…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 10 / 52

Page 17: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

A few examples from that 31c3 talk

CVE-2002-0083: remote root exploit in sshd, a single bit differencein the binary31c3 talk had a live demo with a kernel module modifying sourcecode in memory only

How can you be sure what’s running on your machine or on a builddaemon network connected to the net? Do you ever leave yourcomputers physically alone?Huge financial incentives to crack developer machines or a project’sbuild infrastructure…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 10 / 52

Page 18: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

A few examples from that 31c3 talk

CVE-2002-0083: remote root exploit in sshd, a single bit differencein the binary31c3 talk had a live demo with a kernel module modifying sourcecode in memory onlyHow can you be sure what’s running on your machine or on a builddaemon network connected to the net? Do you ever leave yourcomputers physically alone?

Huge financial incentives to crack developer machines or a project’sbuild infrastructure…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 10 / 52

Page 19: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

A few examples from that 31c3 talk

CVE-2002-0083: remote root exploit in sshd, a single bit differencein the binary31c3 talk had a live demo with a kernel module modifying sourcecode in memory onlyHow can you be sure what’s running on your machine or on a builddaemon network connected to the net? Do you ever leave yourcomputers physically alone?Huge financial incentives to crack developer machines or a project’sbuild infrastructure…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 10 / 52

Page 20: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

A few examples from that 31c3 talk

CVE-2002-0083: remote root exploit in sshd, a single bit differencein the binary31c3 talk had a live demo with a kernel module modifying sourcecode in memory onlyHow can you be sure what’s running on your machine or on a builddaemon network connected to the net? Do you ever leave yourcomputers physically alone?Huge financial incentives to crack developer machines or a project’sbuild infrastructure…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 10 / 52

Page 21: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Another example from real lifeAt a CIA conference in 2012:

firstlook.org/theintercept/2015/03/10/ispy-cia-campaign-steal-apples-secrets/

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 11 / 52

Page 22: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

The solution

Promise that anyone can always generate identicalbinary packages from a given source

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 12 / 52

Page 23: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

The solution

We call this:

“Reproducible builds”

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 13 / 52

Page 24: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Debian demo (skipped)

Build a package 5 times, get 5 .debs with different checksumsBuild a package 5 times, get 5 .debs with the same checksum

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 14 / 52

Page 25: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Debian demo (skipped)

Build a package 5 times, get 5 .debs with different checksumsBuild a package 5 times, get 5 .debs with the same checksumYes, it’s really this simple.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 14 / 52

Page 26: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

This should become thenorm.

We want to change the meaning of ”free software”:it’s only free software if it’s reproducible!

Page 27: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

This should become thenorm.

We want to change the meaning of ”free software”:it’s only free software if it’s reproducible!

Page 28: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

More benefits than ”just” security…

smaller deltas, thus faster updates possiblein Debian: lots of QA benefitsGoogle does reproducible builds, to save money…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 16 / 52

Page 29: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 30: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

reproducible-builds.orghttps://reproducible-builds.orggit repositories, IRC channels, mailinglists, webspace

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 18 / 52

Page 31: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Debugging problems:https://try.diffoscope.org

Examines differences in depth.Recursively unpacks archives, uncompresses PDFs, disassemblesbinaries, unpacks Gettext files, …Easy to extend to new file formats.Falls back to binary comparison.Outputs HTML or plain text with human readable differences.Available from git, PyPI, Debian,Arch Linux, Guix, Homebrew. Works on BSD.Maintainers in other distros wanted.https://diffoscope.org/

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 19 / 52

Page 32: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

diffoscope example (HTML output)

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 20 / 52

Page 33: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

diffoscope is ”just” for debugging

Reminder: diffoscope is for debugging”reproducible” according to our definition means: bit by bitidentical. So the tools for testing whether something is reproducibleare either diff or sha256sum!

https://try.diffoscope.org

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 21 / 52

Page 34: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

diffoscope is ”just” for debugging

Reminder: diffoscope is for debugging”reproducible” according to our definition means: bit by bitidentical. So the tools for testing whether something is reproducibleare either diff or sha256sum!https://try.diffoscope.org

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 21 / 52

Page 35: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

tests.reproducible-builds.orgContinuously testing Debian testing, unstable andexperimentalAlso testing: coreboot, OpenWrt, LEDE, NetBSD, FreeBSD, ArchLinux, Fedora and soon F-Droid too8-12 amd64 nodes, 150 cores and soon 500 GB RAM - thanks toProfitbricks.com!22 armhf nodes, 98 cores and 53 GB RAM329 jenkins jobs running on jenkins.debian.net43 scripts in Python and Bash, 283 lines of code in average37 contributors for jenkins.debian.net.git

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 22 / 52

Page 36: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Variations (when testing Debian)variation first build second buildhostname jenkins i-capture-the-hostnamedomainname debian.net i-capture-the-domainnameenv TZ GMT+12 GMT-14env LANG C fr_CH.UTF-8env LC_ALL not set fr_CH.UTF-8env USER pbuilder1 pbuilder2uid 1111 2222gid 1111 2222UTS namespace shared with the host modified using /usr/bin/unshare --utskernel version Linux 3.16 or 4.X on amd64 always varied, on armhf sometimesumask 0022 0002CPU type varied on i386

on armhf varied a bit, not on amd64filesystem same for both builds on amd64: (tmpfs), on armhf ext3/4

(and we have disorderfs, but the code is disabled)year, month, date on amd64: 398 days variation, on armhf not yethour, minute hour is usually the same… usually, the minute differs…everything else is likely the same…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 23 / 52

Page 37: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Common problems

time stampstimezoneslocalesbuild pathseverything else (seperated into known issues and the blurry rest)

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 24 / 52

Page 38: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Documentation about common problemshttps://reproducible-builds.org/docsLunar’s talk from CCCamp 2015 also on https://media.ccc.de

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 25 / 52

Page 39: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

SOURCE_DATE_EPOCH

Build date (timestamps) usually not useful for the userSOURCE_DATE_EPOCH is defined as the last modification of thesource, since the epoch (1970-01-01)can be used instead of current datecan also be used for random seeds etc.in Debian, set from the latest debian/changelog entrycan be set to the latest git commit too or the latest file modificationdate

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 26 / 52

Page 40: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

SOURCE_DATE_EPOCH

SOURCE_DATE_EPOCH spec available:https://reproducible-builds.org/specs/many upstreams support it alreadyhas been adopted by other distributions (OpenWrt, LEDE, NetBSD,FreeBSD, Arch Linux, coreboot, Guix, …) and many many upstreams(GCC, dpkg, rpm, mkisofs, ghostscript, libxslt, sphinx, texlive-bin, …)

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 27 / 52

Page 41: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 42: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Progress in Debian testing (”stretch”)

21,527 (91.2%) out of 23,597 source packages are reproduciblein our test framework on amd64

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 29 / 52

Page 43: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Progress in Debian unstable

18,898 (75.8%) out of 24,931 source packages are reproduciblein our test framework on amd64 (difference due to build path variations)

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 30 / 52

Page 44: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Progress in the Debian bug tracker

As a rule, we file bugs with patches.There are very few exceptions.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 31 / 52

Page 45: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Details on tests.reproducible-builds.org

https://reproducible.debian.net/$src43 package sets250 categorised distinct issues6,944 notes1,894 unreproducible packages in stretch (testing), but only 177without a note (5,777 in unstable but also only 277 without a note)maintained in notes.git by 47 contributorscurrently Debian only, but cross distro notes are planned

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 32 / 52

Page 46: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Summary / What’s left to do

This is a proof-of-concept, Debian is neither 91.2% reproducible nor75.8%. (and 10% > 2,300 sources packages!)

All our required changes are finally in Debian now, except dpkg and.buildinfo file support on the archive side.We hope that Debian 9, ”stretch”, will be partially reproducible in ameaningful way, in 2017.What’s beyond (rebuilding, .buildinfo file handling, user tools)still needs design and code.Will Debian 10, ”buster”, be 100% reproducible?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 33 / 52

Page 47: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Summary / What’s left to do

This is a proof-of-concept, Debian is neither 91.2% reproducible nor75.8%. (and 10% > 2,300 sources packages!)All our required changes are finally in Debian now, except dpkg and.buildinfo file support on the archive side.

We hope that Debian 9, ”stretch”, will be partially reproducible in ameaningful way, in 2017.What’s beyond (rebuilding, .buildinfo file handling, user tools)still needs design and code.Will Debian 10, ”buster”, be 100% reproducible?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 33 / 52

Page 48: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Summary / What’s left to do

This is a proof-of-concept, Debian is neither 91.2% reproducible nor75.8%. (and 10% > 2,300 sources packages!)All our required changes are finally in Debian now, except dpkg and.buildinfo file support on the archive side.We hope that Debian 9, ”stretch”, will be partially reproducible in ameaningful way, in 2017.What’s beyond (rebuilding, .buildinfo file handling, user tools)still needs design and code.

Will Debian 10, ”buster”, be 100% reproducible?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 33 / 52

Page 49: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Summary / What’s left to do

This is a proof-of-concept, Debian is neither 91.2% reproducible nor75.8%. (and 10% > 2,300 sources packages!)All our required changes are finally in Debian now, except dpkg and.buildinfo file support on the archive side.We hope that Debian 9, ”stretch”, will be partially reproducible in ameaningful way, in 2017.What’s beyond (rebuilding, .buildinfo file handling, user tools)still needs design and code.Will Debian 10, ”buster”, be 100% reproducible?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 33 / 52

Page 50: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Tell the world & collaborate

”We don’t care about Debian (only), we care about free and opensource software.”

Weekly reports since May 2015First Reproducible World Summit in December 2015 (Athens,Greece)

I 40 people from 16 projectsI reproducible.debian.net has become

tests.reproducible-builds.org

Second Reproducible World Summit in December 2016 in Berlin

I Talk to h01ger if you want to attend.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 34 / 52

Page 51: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Tell the world & collaborate

”We don’t care about Debian (only), we care about free and opensource software.”Weekly reports since May 2015

First Reproducible World Summit in December 2015 (Athens,Greece)

I 40 people from 16 projectsI reproducible.debian.net has become

tests.reproducible-builds.org

Second Reproducible World Summit in December 2016 in Berlin

I Talk to h01ger if you want to attend.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 34 / 52

Page 52: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Tell the world & collaborate

”We don’t care about Debian (only), we care about free and opensource software.”Weekly reports since May 2015First Reproducible World Summit in December 2015 (Athens,Greece)

I 40 people from 16 projectsI reproducible.debian.net has become

tests.reproducible-builds.org

Second Reproducible World Summit in December 2016 in Berlin

I Talk to h01ger if you want to attend.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 34 / 52

Page 53: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Tell the world & collaborate

”We don’t care about Debian (only), we care about free and opensource software.”Weekly reports since May 2015First Reproducible World Summit in December 2015 (Athens,Greece)

I 40 people from 16 projectsI reproducible.debian.net has become

tests.reproducible-builds.orgSecond Reproducible World Summit in December 2016 in Berlin

I Talk to h01ger if you want to attend.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 34 / 52

Page 54: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 55: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Skipping some…https://tests.r-b.org/coreboothttps://tests.r-b.org/netbsdhttps://tests.r-b.org/freebsdpaused: https://tests.r-b.org/archlinuxpaused: https://tests.r-b.org/fedoranot yet: https://tests.r-b.org/f-droid

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 36 / 52

Page 56: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Skipping some more…

Bitcoin (2011)Tor (2013)NixOS, Guix, ElectroBSDQubes, Tailsvery few commercial, propietary software (guess where!)?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 37 / 52

Page 57: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Skipping some more…

Bitcoin (2011)Tor (2013)NixOS, Guix, ElectroBSDQubes, Tailsvery few commercial, propietary software (gamblingmachines!)?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 37 / 52

Page 58: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

OpenWrt and LEDE tested for reproducible builds

https://tests.r-b.org/openwrthttps://tests.r-b.org/ledereproducible_(openwrt_common|openwrt|lede).sh scripts injenkins.debian.net.git1,073/1,089 packages and 12/1 (OpenWrt/LEDE) images testedeach weekvariations: TZ, LANG, LC_ALL, PATH, (umask), make -j, linux64–uname-2.6, CAPTURE_ENVIRONMENT

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 38 / 52

Page 59: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

OpenWrt and LEDE tested for reproducible builds

https://tests.r-b.org/openwrthttps://tests.r-b.org/ledereproducible_(openwrt_common|openwrt|lede).sh scripts injenkins.debian.net.git1,073/1,089 packages and 12/1 (OpenWrt/LEDE) images testedeach weekvariations: TZ, LANG, LC_ALL, PATH, (umask), make -j, linux64–uname-2.6, CAPTURE_ENVIRONMENT

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 38 / 52

Page 60: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Thanks to these OpenWrt / LEDE reproduciblebuilds contributors

Alexander CouzensBryan NewboldDirk NeukirchenFelix FietkauJonas GorskiJo-Philipp WichNathan HintzReiner Herrmann

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 39 / 52

Page 61: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

TODO for tests.r-b.org/(openwrt|lede)

we should add more variations (date, time, build path, hostname,domain, use disorderfs, CPU type, kernel, USER, HOME, SHELL,the base system).we should test more targets.

we could build other branches too…we could build OpenWrt + LEDE at least every day, thanks again toProfitbricks.com.we want to make you look at these pages every day!

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 40 / 52

Page 62: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

TODO for tests.r-b.org/(openwrt|lede)

we should add more variations (date, time, build path, hostname,domain, use disorderfs, CPU type, kernel, USER, HOME, SHELL,the base system).we should test more targets.we could build other branches too…we could build OpenWrt + LEDE at least every day, thanks again toProfitbricks.com.

we want to make you look at these pages every day!

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 40 / 52

Page 63: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

TODO for tests.r-b.org/(openwrt|lede)

we should add more variations (date, time, build path, hostname,domain, use disorderfs, CPU type, kernel, USER, HOME, SHELL,the base system).we should test more targets.we could build other branches too…we could build OpenWrt + LEDE at least every day, thanks again toProfitbricks.com.we want to make you look at these pages every day!

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 40 / 52

Page 64: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

TODO: design .buildinfo files for OpenWrt andLEDE

rfc822 formatneeds to define the environmentneeds to define the sources (input)needs to define the binaries (output)

Debian has only .deb files as output, while OpenWrt/LEDE havepackages and images…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 41 / 52

Page 65: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

TODO: design .buildinfo files for OpenWrt andLEDE

rfc822 formatneeds to define the environmentneeds to define the sources (input)needs to define the binaries (output)Debian has only .deb files as output, while OpenWrt/LEDE havepackages and images…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 41 / 52

Page 66: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 67: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Rebuilds and sharing signed checksums

Almost no work has been done here yet. We are just at the first step:being able to rebuild reproducibly…Different projects, different solutions?

I something like .buildinfo files (defining the environment, the input andthe output(s)) will be needed everywhere, but so far we only have them forDebian…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 43 / 52

Page 68: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Rebuilds and sharing signed checksums

Almost no work has been done here yet. We are just at the first step:being able to rebuild reproducibly…Different projects, different solutions?

I something like .buildinfo files (defining the environment, the input andthe output(s)) will be needed everywhere, but so far we only have them forDebian…

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 43 / 52

Page 69: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Rebuilders and sharing signed checksums, cont.

Individuelly signed checksums (think web of trust) could work in theDebian case (we have a gpg web of trust), but IMO won’t scale.Another idea: rebuilders, run by large organisations (ACLU, CCC,CERN, Deutsche Bank, EDF, EON, Greenpeace, NASA, NSA, XYZ).Fedora rebuilds Debian, Debian rebuilds OpenSUSE, OpenSUSErebuilds NetBSD, etc…Big customers could just rebuild everything themselves.

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 44 / 52

Page 70: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Integration in user tools

”Do you really want to install this unreproducible software (y/N)”

”Do you want to build those packages which have unconfirmedchecksums, before installing? (Y/n)””How many signed checksums do you require to call a package’reproducible’?” - and whom do you trust?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 45 / 52

Page 71: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Integration in user tools

”Do you really want to install this unreproducible software (y/N)””Do you want to build those packages which have unconfirmedchecksums, before installing? (Y/n)”

”How many signed checksums do you require to call a package’reproducible’?” - and whom do you trust?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 45 / 52

Page 72: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Integration in user tools

”Do you really want to install this unreproducible software (y/N)””Do you want to build those packages which have unconfirmedchecksums, before installing? (Y/n)””How many signed checksums do you require to call a package’reproducible’?” - and whom do you trust?

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 45 / 52

Page 73: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 74: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

As a software developer

Stop using build datesUse SOURCE_DATE_EPOCH insteadSee https://reproducible-builds.org/specs/

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 47 / 52

Page 75: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Form your reproducible builds team!

Why?I Every distribution should be reproducible!I Learn something new everydayI Change the (software) world!I https://tests.reproducible-builds.org/openwrt needs your helpI https://tests.reproducible-builds.org/lede needs your help

How to get started?I Build something twice, run diffoscope on the results.I Talk to lynxis or h01ger here or talk to us on IRC or via mail.I RTFM, there is lots of documentationI Experiment - learning by doing

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 48 / 52

Page 76: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

1 Motivation

2 Common ressources

3 Status Debian

4 Status Non-Debian World

5 Future work

6 Getting involved

7 Questions, comments, ideas?

Page 77: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Thanks to…! …and thank you, too!All “Reproducible Builds” contributors(you are just so awesome!)OpenWrt Summit and ELCE

[email protected] B8BF 5413 7B09 D35C F026FE9D 091A B856 069A AA1C

[email protected] 390D CF78 8BF9 AA50 4F8FF1E2 C29E 9DA6 A0DF 8604

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 50 / 52

Page 78: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Questions, comments, ideas?

https://reproducible-builds.org/#reproducible-builds on irc.OFTC.nethttps://lists.reproducible-builds.orgtwitter: @ReproBuild

Mike and Seth’s talk from 31c3 about motivationsLunar’s talk about fixing reproducible issues from CCCamp 15h01ger’s talk ”the Reproducible builds ecosystem” from FOSDEM 16

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 51 / 52

Page 79: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

Questions, comments, ideas?

https://reproducible-builds.org/#reproducible-builds on irc.OFTC.nethttps://lists.reproducible-builds.orgtwitter: @ReproBuildMike and Seth’s talk from 31c3 about motivationsLunar’s talk about fixing reproducible issues from CCCamp 15h01ger’s talk ”the Reproducible builds ecosystem” from FOSDEM 16

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 51 / 52

Page 80: Reproducible builds everywhere eg. in Debian, OpenWrt and ...holger/2016-10-13-OpenWrt-Summit.pdfVariations(whentestingDebian) variation firstbuild secondbuild hostname jenkins i-capture-the-hostname

h01ger and lynxis Reproducible builds everywhere OpenWrt Summit, Berlin 52 / 52

Copyright © 2014–2016Holger Levsen [email protected] and others.

Copyright of images included in this document are held by their respective owners.

This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. To view a copy of this license, visithttp://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300,San Francisco, California, 94105, USA.

The source of this document is available from https://anonscm.debian.org/git/reproducible/presentations.git.