@article{emse-2026-nix-repro,
  author = {Julien Malka and Stefano Zacchiroli and Théo Zimmermann},
  title = {A Decade of Software Reproducibility in the Nix Package Ecosystem},
  abstract = {We report a large-scale empirical study of two aspects of software reproducibility—rebuildability and bitwise reproducibility—in the Nix package ecosystem. Using 29 evenly spaced historical snapshots over a decade of history of the nixpkgs repository (2015–2024) we attempted to rebuild and bitwise-compare the build outputs of tens of thousands of packages per snapshot. Our experiment produced a dataset of build metadata and logs for 1'321'000 package builds and preserved 166'523 diffoscopes for unreproducible outputs. We find that functional package management enables extremely high rebuildability over time (near-universal ability to reconstitute historical build environments and rebuild software packages), while bitwise reproducibility has steadily improved and reaches a high point in recent years (up to 93% in 2024). Early years show substantially lower bitwise reproducibility, indicating that functional package management alone does not guarantee bitwise-identical outputs, and that the observed high level of bitwise reproducibility is not solely due to the package management approach. Common causes of unreproducibility, both in the rebuildability and bitwise reproducibility dimensions, include management of dates in build and test processes; we quantify their prevalence and other common causes using manual analysis of logs of rebuild failures and automated analysis of diffoscopes. Our dataset (build logs, metadata, and diffoscopes) and analysis scripts are released to support future research on debugging, repairing, and tracking reproducibility at scale. We discuss implications for package managers, distribution maintainers, and reproducible-builds practitioners, and identify actionable mitigations to increase reproducibility across large software distributions.},
  publisher = {Springer},
  year = {2026},
  issn = {1382-3256},
  journal = {Empirical Software Engineering},
}
