Is nixos.iso_gnome.x86_64-linux Reproducible?

Tracking the build closure for nixos.iso_gnome.x86_64-linux in the nixos-unstable branch on x86_64-linux.

To run the check build manually:

nix-build /nix/store/???.drv --check --keep-failed
And to find out why a derivation is part of the build closure, use:
git clone
cd nixpkgs
git checkout 0e74ca98a74bc7270d28838369593635a5db3260
nix-store -q --tree $(nix-instantiate nixos/release-combined.nix -A nixos.iso_gnome.x86_64-linux)

1327 out of 1334 (99.48%)

paths in the nixos.iso_gnome.x86_64-linux build closure are reproducible! 1 paths remained unchecked

unreproduced paths

These derivations produced a different result compared to the official cache, revealing a reproducibility problem. See the Project for progress on fixing those, or add an issue for those that are not tracked yet.

  • qemu-host-cpu-only-8.2.1.drv out (diffoscope)
  • libcamera-0.2.0.drv out (diffoscope)
  • loupe-45.3.drv out (diffoscope)
  • ibus-1.5.28.drv out (diffoscope)
  • pipewire-1.0.3.drv doc (diffoscope)

  • unchecked paths

    How are these tested?

    Each build is run twice, at different times, on different hardware running different kernels.

    How confident can we be in the results?

    Fairly. We don't currently inject randomness at the filesystem layer, but many of the reproducibility issues are being exercised already. It isn't possible to guarantee a package is reproducible, just like it isn't possible to prove software is bug-free. It is possible there is nondeterminism in a package source, waiting for some specific circumstance.

    This is why we run these tests: to track how we are doing over time, to submit bug fixes for nondeterminism when we find them.

    How can I help?

    How can we do better?

    There are further steps we could take. For example, the next likely step is using disorderfs which injects additional nondeterminism by reordering directory entries.

    How can I test my patches?

    Nix has built-in support for checking a path is reproducible. There are two routes.

    Pretending you are debugging a nondeterminism bug in hello. To check it, you build the package, and then build it again with --check --keep-failed. This will provide the differing output in a separate directory which you can use diffoscope on.

    $ nix-build . -A hello
    $ nix-build . -A hello --check --keep-failed
    error: derivation '/nix/store/...hello.drv' may not be deterministic:
    output '/nix/store/...-hello' differs from '/nix/store/...hello.check'
    $ diffoscope /nix/store/...hello /nix/store/...hello.check

    Note: the .check output is not a valid store path, and will automatically be deleted on the next run of the Nix garbage collector.

    There is support for an automatic diff-hook in Nix 2, but it is much more complicated to set up. If you would like to work on this, or need help setting it up, contact us on Matrix. We can work together to write docs on how to use it.

    Generated at 2024-02-23 11:31:59.013712324 UTC from (heavily based on