Collaborative Working Sessions - The Ten Commandments

original draft:

Commandments by the church of reproducible builds
  1. Thou shall not record the name of thy maker nor the place of thy making (username, hostname)
  2. Thou shall not record the date nor time of thy making, unless you respect the holy SDE spec (date+time)
  3. Thou shall not use memory without initialization or use memory addresses to decide outcomes (ASLR)
  4. Thou shall do all your work in order - not use filesystem-readdir-order nor random order of hash elements
  5. Thou shall not (gamble and) record random numbers (UUID, private/public key, hash-seed, ASLR)
  6. Thou shall only do one thing at a time or ensure races do no harm (parallelism)
  7. Thou shall not look at build machine processor capabilities
  8. Thou shall not look at build machine benchmarks for optimizations
  9. Thou shall be careful with profile-guided-optimization for it can amplify any sin (non-determinism)
  10. Thou shall keep your workspace env clean of timezones, locales and umasks or ensure they do no harm
  11. Thou shall not access the internet during build (servers can be down, contents can change)
  12. Thou shall take note of your build inputs (versions and/or hashes)

Notes

will slightly re-order existing entries to cover most common problems first reword 11th to “allow offline builds”

drop soften 12th because that is what distributions do in SBOMs “only if you distribute binaries yourself”

#8 and #9 are different, because PGO can be done deterministically and is different from benchmarking

not cover BUILD_PATH_PREFIX as builders can use a constant build path with current container tech

raw notes