Welcome to the second report in 2025 from the Reproducible Builds project. Our monthly reports outline what we’ve been up to over the past month, and highlight items of news from elsewhere in the increasingly-important area of software supply-chain security. As usual, however, if you are interested in contributing to the Reproducible Builds project, please visit our Contribute page on our website.
Table of contents:
- Reproducible Builds at FOSDEM 2025
- Reproducible Builds at PyCascades 2025
- Does Functional Package Management Enable Reproducible Builds at Scale?
- reproduce.debian.net updates
- Upstream patches
- Distribution work
- diffoscope & strip-nondeterminism
- Website updates
- Reproducibility testing framework
Reproducible Builds at FOSDEM 2025
Similar to last year’s event, there was considerable activity regarding Reproducible Builds at FOSDEM 2025, held on on 1st and 2nd February this year in Brussels, Belgium. We count at least four talks related to reproducible builds. (You can also read our news report from last year’s event in which Holger Levsen presented in the main track.)
Jelle van der Waa, Holger Levsen and kpcyrd presented in the Distributions track on A Tale of several distros joining forces for a common goal. In this talk, three developers from two different Linux distributions (Arch Linux and Debian), discuss this goal — which is, of course, reproducible builds. The presenters discuss both what is shared and different between the two efforts, touching on the history and future challenges alike. The slides of this talk are available to view, as is the full video (30m02s). The talk was also discussed on Hacker News.
Zbigniew Jędrzejewski-Szmek presented in the ever-popular Python track a on Rewriting .pyc
files for fun and reproducibility, i.e. the bytecode files generated by Python in order to speed up module imports: “It’s been known for a while that those are not reproducible: on different architectures, the bytecode for exactly the same sources ends up slightly different.” The slides of this talk are available, as is the full video (28m32s).
In the Nix and NixOS track, Julien Malka presented on the Saturday asking How reproducible is NixOS: “We know that the NixOS ISO image is very close to be perfectly reproducible thanks to reproducible.nixos.org, but there doesn’t exist any monitoring of Nixpkgs as a whole. In this talk I’ll present the findings of a project that evaluated the reproducibility of Nixpkgs as a whole by mass rebuilding packages from revisions between 2017 and 2023 and comparing the results with the NixOS cache.” Unfortunately, no video of the talk is available, but there is a blog and article on the results.
Lastly, Simon Tournier presented in the Open Research track on the confluence of GNU Guix and Software Heritage: Source Code Archiving to the Rescue of Reproducible Deployment. Simon’s talk “describes design and implementation we came up and reports on the archival coverage for package source code with data collected over five years. It opens to some remaining challenges toward a better open and reproducible research.” The slides for the talk are available, as is the full video (23m17s).
Reproducible Builds at PyCascades 2025
Vagrant Cascadian presented at this year’s PyCascades conference which was held on February 8th and 9th February in Portland, OR, USA. PyCascades is a regional instance of PyCon held in the Pacific Northwest. Vagrant’s talk, entitled Re-Py-Ducible Builds caught the audience’s attention with the following abstract:
Crank your Python best practices up to 11 with Reproducible Builds! This talk will explore Reproducible Builds by highlighting issues identified in Python projects, from the simple to the seemingly inscrutable. Reproducible Builds is basically the crazy idea that when you build something, and you build it again, you get the exact same thing… or even more important, if someone else builds it, they get the exact same thing too.
More info is available on the talk’s page.
“Does Functional Package Management Enable Reproducible Builds at Scale?”
On our mailing list last month, Julien Malka, Stefano Zacchiroli and Théo Zimmermann of Télécom Paris’ in-house research laboratory, the Information Processing and Communications Laboratory (LTCI) announced that they had published an article asking the question: Does Functional Package Management Enable Reproducible Builds at Scale? (PDF).
This month, however, Ludovic Courtès followed up to the original announcement on our mailing list mentioning, amongst other things, the Guix Data Service and how that it shows the reproducibility of GNU Guix over time, as described in a GNU Guix blog back in March 2024.
reproduce.debian.net updates
The last few months have seen the introduction of reproduce.debian.net. Announced first at the recent Debian MiniDebConf in Toulouse, reproduce.debian.net is an instance of rebuilderd operated by the Reproducible Builds project.
Powering this work is rebuilderd, our server which monitors the official package repositories of Linux distributions and attempt to reproduce the observed results there. This month, however, Holger Levsen:
-
Split packages that are not specific to any architecture away from amd64.reproducible.debian.net service into a new all.reproducible.debian.net page.
-
Increased the number of
riscv64
nodes to a total of 4, and added a newamd64
node added thanks to our (now 10-year sponsor), IONOS. -
Discovered an issue in the Debian build service where some new ‘incoming’ build-dependencies do not end up historically archived.
-
Uploaded the
devscripts
package, incorporating changes from Jochen Sprickerhof to thedebrebuild
script — specifically to fix the handling theRules-Requires-Root
header in Debian source packages. -
Uploaded a number of Rust dependencies of rebuilderd (
rust-libbz2-rs-sys
,rust-actix-web
,rust-actix-server
,rust-actix-http
,rust-actix-server
,rust-actix-http
,rust-actix-web-codegen
andrust-time-tz
) after they were prepared by kpcyrd :
Jochen Sprickerhof also updated the sbuild
package to:
- Obey requests from the user/developer for a different temporary directory.
- Use the root/superuser for some values of
Rules-Requires-Root
. - Don’t pass
--root-owner-group
to old versions of dpkg.
… and additionally requested that many Debian packages are rebuilt by the build servers in order to work around bugs found on reproduce.debian.net. […][[…][…]
Lastly, kpcyrd has also worked towards getting rebuilderd packaged in NixOS, and Jelle van der Waa picked up the existing pull request for Fedora support within in rebuilderd and made it work with the existing Koji rebuilderd script. The server is being packaged for Fedora in an unofficial ‘copr’ repository and in the official repositories after all the dependencies are packaged.
Upstream patches
The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where appropriate. This month, we wrote a large number of such patches, including:
-
Andrea Manzini:
rust-i8n
(randomHashMap
order)starship/shadow
-
Andreas Stieger:
-
Bernhard M. Wiedemann:
-
Chris Lamb:
- #1095209 filed against
python-assertpy
. - #1096188 filed against
terminaltables3
. - #1098249 filed against
acme.sh
. - #1098251 filed against
node-svgdotjs-svg.js
. - #1098253 filed against
onevpl-intel-gpu
. - #1098350 filed against
rocdbgapi
. - #1098895 filed against
siege
. - #1098945 filed against
pkg-rocm-tools
.
- #1095209 filed against
-
Christian Goll:
warewulf4
(embeds CPU core count)
-
Jay Adddison:
-
Jochen Sprickerhof:
-
kpcyrd:
-
Leonidas Spyropoulos:
-
Robin Candau (Antiz):
highlight
(timestamp)arch-wiki-lite
(timestamp)f3d
(timestamp)jacktrip
(timestamp)prometheus
(timestamp)
-
Wolfgang Frisch:
-
Hongxu Jia:
go
(clear GOROOT for func ldShared when -trimpath is used)
Distribution work
There as been the usual work in various distributions this month, such as:
In Debian, 17 reviews of Debian packages were added, 6 were updated and 8 were removed this month adding to our knowledge about identified issues.
Fedora developers Davide Cavalca and Zbigniew Jędrzejewski-Szmek gave a talk on Reproducible Builds in Fedora (PDF), touching on SRPM-specific issues as well as the current status and future plans.
Thanks to an investment from the Sovereign Tech Agency, the FreeBSD project’s work on unprivileged and reproducible builds continued this month. Notable fixes include:
pkg
(hash ordering)makefs
(source filesystem inode number leakage)FreeBSD base system packages
(timestamp)
The Yocto Project has been struggling to upgrade to the latest Go and Rust releases due to reproducibility problems in the newer versions. Hongxu Jia tracked down the issue with Go which meant that the project could upgrade from the 1.22 series to 1.24, with the fix being submitted upstream for review (see above). For Rust, however, the project was significantly behind, but has made recent progress after finally identifying the blocking reproducibility issues. At time of writing, the project is at Rust version 1.82, with patches under review for 1.83 and 1.84 and fixes being discussed with the Rust developers. The project hopes to improve the tests for reproducibility in the Rust project itself in order to try and avoid future regressions.
Yocto continues to maintain its ability to binary reproduce all of the recipes in OpenEmbedded-Core, regardless of the build host distribution or the current build path.
Finally, Douglas DeMaio published an article on the openSUSE blog on announcing that the Reproducible-openSUSE (RBOS) Project Hits [Significant] Milestone. In particular:
The Reproducible-openSUSE (RBOS) project, which is a proof-of-concept fork of openSUSE, has reached a significant milestone after demonstrating a usable Linux distribution can be built with 100% bit-identical packages.
This news was also announced on our mailing list by Bernhard M. Wiedemann, who also published another report for openSUSE as well.
diffoscope & strip-nondeterminism
diffoscope is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made the following changes, including preparing and uploading versions 288
and 289
to Debian:
- Add
asar
toDIFFOSCOPE_FAIL_TESTS_ON_MISSING_TOOLS
in order to address Debian bug#1095057
) […] - Catch a
CalledProcessError
when callinghtml2text
. […] - Update the minimal Black version. […]
Additionally, Vagrant Cascadian updated diffoscope in GNU Guix to version 287 […][…] and 288 […][…] as well as submitted a patch to update to 289 […]. Vagrant also fixed an issue that was breaking reprotest on Guix […][…].
strip-nondeterminism is our sister tool to remove specific non-deterministic results from a completed build. This month version 1.14.1-2
was uploaded to Debian unstable by Holger Levsen.
Website updates
There were a large number of improvements made to our website this month, including:
-
Bernhard M. Wiedemann fixed an issue on the Commandments of reproducible builds fixing a link to the
readdir
component of Bernhard’s own Unreproducible Package. […] -
Holger Levsen clarified the name of a link to our old Wiki pages on the History page […] and added a number of new links to the Talks & Resources page […][…].
-
James Addison update the website’s own
README
file to document a couple of additional dependencies […][…], as well as did more work on a future Getting Started guide page […][…].
Reproducibility testing framework
The Reproducible Builds project operates a comprehensive testing framework running primarily at tests.reproducible-builds.org in order to check packages and other artifacts for reproducibility. In January, a number of changes were made by Holger Levsen, including:
-
reproduce.debian.net-related:
- Add a helper script to manually schedule packages. […][…][…][…][…]
- Fix a link in the website footer. […]
- Strip the “💠🍥♻” emojis from package names on the manual rebuilder in order to ease copy-and-paste. […]
- On the various statistics pages, provide the number of affected source packages […][…] as well as provide various totals […][…].
- Fix graph labels for the various architectures […][…] and make them clickable too […][…][…].
- Break the displayed HTML in blocks of 256 packages in order to address rendering issues. […][…]
- Add monitoring jobs for
riscv64
archicture nodes and integrate them elsewhere in our infrastructure. […][…] - Add
riscv64
architecture nodes. […][…][…][…][…] - Update much of the documentation. […][…][…]
- Make a number of improvements to the layout and style. […][…][…][…][…][…][…]
- Remove direct links to JSON and database backups. […]
- Drop a Blues Brothers reference from frontpage. […]
-
Debian-related:
-
FreeBSD-related:
- Switch to run latest branch of FreeBSD. […]
-
Misc:
In addition:
-
kpcyrd fixed the
/all/api/
API endpoints on reproduce.debian.net by altering the nginx configuration. […] -
James Addison updated reproduce.debian.net to display the so-called ‘bad’ reasons hyperlink inline […] and merged the “Categorized issues” links into the “Reproduced builds” column […].
-
Jochen Sprickerhof also made some reproduce.debian.net-related changes, adding support for detecting a bug in the
mmdebstrap
package […] as well as updating some documentation […]. -
Roland Clobus continued their work on reproducible ‘live’ images for Debian, making changes related to new clustering of jobs in openQA. […]
And finally, both Holger Levsen […][…][…] and Vagrant Cascadian performed significant node maintenance. […][…][…][…][…]
If you are interested in contributing to the Reproducible Builds project, please visit our Contribute page on our website. However, you can get in touch with us via:
-
IRC:
#reproducible-builds
onirc.oftc.net
. -
Mastodon: @reproducible_builds@fosstodon.org
-
Mailing list:
rb-general@lists.reproducible-builds.org
-
Twitter/X: @ReproBuilds