Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reproducible builds

Reproducible builds

A talk about reproducible builds in Open Source world given at 13th Linux Session in Wrocław.

Language: Polish

Bartłomiej Piotrowski

April 03, 2016
Tweet

More Decks by Bartłomiej Piotrowski

Other Decks in Programming

Transcript

  1. „Ale to ja napisałem ten kod!” „Wiem co jest w

    pliku binarnym, bo sam go zbudowałem.”
  2. „Ale to ja napisałem ten kod!” „Wiem co jest w

    pliku binarnym, bo sam go zbudowałem.” „Nie jestem ciekawym celem ataku.”
  3. „Ale to ja napisałem ten kod!” „Wiem co jest w

    pliku binarnym, bo sam go zbudowałem.” „Nie jestem ciekawym celem ataku.” „Mój serwer do kompilacji jest bezpieczny.”
  4. Jak mały może być backdoor? OpenSSH 3.0.2 (CVE-2002-0083) przekroczenie uprawnień

    { Channel *c; - if (id < 0 || id > channels_alloc) { + if (id < 0 || id >= channels_alloc) { log("channel_lookup: %d: bad id", id); return; }
  5. cmpl $0x0, 0x8(%ebp) js 16 mov 0x4, %eax cmp %eax,

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

    0x8(%ebp) jle 30 mov 0x8(%ebp), %eax mov %eax, 0x4(%esp) movl $0x4c, (%esp) call 25 cmpl $0x0, 0x8(%ebp) js 16 mov 0x4, %eax cmp %eax, 0x8(%ebp) jl 30 mov 0x8(%ebp), %eax mov %eax, 0x4(%esp) movl $0x4c, (%esp) call 25
  7. From: Edmund GRIMLEY EVANS <[email protected]> Date: Wed, 22 Nov 2000

    09:18:56 +0000 Do Debian's autobuilders compile repeatedly until the system converges? If so, how do they detect convergence?
  8. From: Martin Uecker <[email protected]> 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.
  9. Eliminacja wariacji • Budowa pakietu #1 • Zmiana środowiska •

    Budowa pakietu #2 • Porównanie obu pakietów
  10. 87%

  11. 0%

  12. Stałe początkowe wartości zmiennych static int write_binary (FILE *out, FILE

    *in, struct bimg_header *hdr) { static uint8_t file_buf[MAX_RECORD_BYTES]; struct bimg_data_header data_hdr; size_t n_written; data_hdr.dest_addr = hdr->entry_addr; …
  13. Stałe początkowe wartości zmiennych static int write_binary (FILE *out, FILE

    *in, struct bimg_header *hdr) { static uint8_t file_buf[MAX_RECORD_BYTES]; struct bimg_data_header data_hdr = {0}; size_t n_written; data_hdr.dest_addr = hdr->entry_addr; …
  14. • Stała kolejność argumentów • Jawna inicjalizacja wartości • Deterministyczne

    wersjonowanie • Locale – sortowanie – format daty I czasu – domyślne kodowanie
  15. • Czas utworzenia/modyfikacji plików – SOURCE_DATE_EPOCH – Libfaketime • Strefa

    czasowa – Unit tests fail when run in Australia (Bug #5017 w angular.js)
  16. • Czas utworzenia/modyfikacji plików – SOURCE_DATE_EPOCH – Libfaketime • Strefa

    czasowa – Unit tests fail when run in Australia (Bug #5017 w angular.js) • Sortowanie słowników