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

Avatar for Bartłomiej Piotrowski

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