Controlling the build environment

45-minute + 10 minute session on day 1

Testing that a piece of software is reproducible means having the ability to control the environment to perform variations that could later be found in the wild. A project could also decide to making a piece of software reproducible by specifying precisely in which environment it should be build. Both approaches basically require the same set of tools, it’s just when that differs.

Non-exhaustive list of variations: username, hostname, build path, timezone, cpu, locale, filesystem ordering

Every project can approach differently:

For Debian:

On FreeBSD:

For single projects:

Qubes:

Google:

OS X:

Faking CPU can be tricky. One solution is to tell kvm to stop exposing the host CPU.

disorderfs, implemented with FUSE, allow to test for issues tied to filesystem ordering. By default it will return results of readdir(3) backward. It could be modified to always returned readdir(3) in a sorted order to implement a normalized environment.

Archive creation tools:

Things we could do: