Does Functional Package Management Enable Reproducible Builds at Scale? Yes
Julien Malka, Stefano Zacchiroli, Théo Zimmermann
TL;DR
The study demonstrates that functional package management enables scalable bitwise reproducible builds in a large, real-world repository (nixpkgs), rebuilding 709,816 packages across 2017–2023 to show bitwise reproducibility rates of 69%–91% and rebuildability above 99%. Using a large Diffoscope-based dataset, the authors identify embedded build dates as a major reproducibility pitfall (~15%) and reveal that most fixes are incidental rather than intentional optimizations. The work provides a public dataset of build statuses, logs, and diffoscopes, and argues for infrastructure investments (binary caches, attestations, verification) to realize RB at scale. It also reports substantial ecosystem-level variability in reproducibility and discusses QA monitoring as a practical lever to improve sustained reproducibility across large package sets.
Abstract
Reproducible Builds (R-B) guarantee that rebuilding a software package from source leads to bitwise identical artifacts. R-B is a promising approach to increase the integrity of the software supply chain, when installing open source software built by third parties. Unfortunately, despite success stories like high build reproducibility levels in Debian packages, uncertainty remains among field experts on the scalability of R-B to very large package repositories. In this work, we perform the first large-scale study of bitwise reproducibility, in the context of the Nix functional package manager, rebuilding 709 816 packages from historical snapshots of the nixpkgs repository, the largest cross-ecosystem open source software distribution, sampled in the period 2017-2023. We obtain very high bitwise reproducibility rates, between 69 and 91% with an upward trend, and even higher rebuildability rates, over 99%. We investigate unreproducibility causes, showing that about 15% of failures are due to embedded build dates. We release a novel dataset with all build statuses, logs, as well as full ''diffoscopes'': recursive diffs of where unreproducible build artifacts differ.
