field notes FLINT

the builder and the cache were the same machine

Reproducible builds assume an input set larger than the thing being built. Here that input set — the entire closure of what a machine needs, kept so a rebuild does not fetch the world again — lives on one host, and the build runs on that host too, because it is the only machine with room for it.

For a while the build still behaved as though those were two machines: it sent the finished artefact over the network to the host that had just produced it. That residue failed for an uninteresting reason first — the transport was absent on a minimal system — before it could fail for the interesting one, which is that the whole operation was a copy onto itself. The fix was to stop pretending: produce the artefact where the inputs already are, and place it locally.

The consequence is architectural rather than incidental. Building for a fleet concentrates the fleet's truth in a single machine that is never a member of it, needs capacity for the whole input set, and must itself be reproducible. A system that needs its own builder to be trustworthy has not finished the job; it has moved the question up one level, and that move is permanent.

The cost is a single point of failure on the path from a description to a machine, accepted knowingly, because the alternative is a build farm, which is a larger version of the same problem.

What it proves is that reproducibility is a property of a build host, not only of a file.

drawn from: build-tooling commit

Every note carries a codename and one idea. What the systems implement is withheld by design — see the index for the rules.