Reproducible images

agreed points:

  • docker image, vagrant box, etc. are all just “packages”

  • which container/VM does not matter for reproducibility
  • it does matter for ease of use/setup

  • perfect buildinfo is the goal
  • intermediate steps can be useful


  • bazel, build only from directly available sources, no net, into docker
  • fdroid, vagrant to build up on VirtualBox
  • mozilla/nix, build up images per task, never use a base image

  • docker, AWS image, VirtualBox

  • basel builds up debian/ubuntu docker images
  • all source code, local and upstream, are checked into local source repo
  • 5 base images, security and legal reviewed

  • nix could do base images, but don’t see the need yet.
  • could be used for caching to speed things up

  • with certain compilers (e.g. javac), wide variations can produce the same thing
  • can’t be a buildinfo dependency, too hard to deal with problems

  • tools for specifying buildinfo
  • blaze forces central build infrastructure, so forces standard build envs
  • nix is a build tool first, and incidentally a package manager

  • Debian images can be reproducible using snapshots, specify date to snapshots in /etc/apt/sources.list

  • it is possible to not require full buildinfo in advance, if there is a reproducible base image that builds against user input, and it reproduces any given user submitted build, then that can also generate the buildinfo

what are the benefits of bit-perfect reproducible

  • more effective caching
  • security audits, easy to track binaries to find original source
  • catching bugs by finding unexpected changes