While working on [reproducible builds](https://reproducible-builds.org/) for [openSUSE](https://en.opensuse.org/openSUSE:Reproducible_Builds), I found that our ocaml-dune package varies through non-determinism from filesystem readdir order. <!-- Thank you for filing an issue to help us improve Dune! --> ## Expected Behavior dune build should be reproducible ## Actual Behavior ```diff --- strings RPMS.1/usr/bin/dune +++ strings RPMS.2/usr/bin/dune [...] padding.0 -sha1_do_chunk sha512_do_chunk +sha1_do_chunk scanmult shutdown_happened ``` Maybe related: ocaml-dune-3.12.2/_boot/source_files produced by `./.duneboot.exe --verbose` also has order variations. ## Reproduction build on two different filesystems or use disorderfs or randomize readdir order ## Specifications - Version of `dune` (output of `dune --version`): ocaml-dune-3.12.2 with #9735 - Version of `ocaml` (output of `ocamlc --version`) ocaml-4.14.1 - Operating system (distribution and version): openSUSE Tumbleweed
While working on reproducible builds for openSUSE, I found that our ocaml-dune package varies through non-determinism from filesystem readdir order.
Expected Behavior
dune build should be reproducible
Actual Behavior
Maybe related: ocaml-dune-3.12.2/_boot/source_files produced by
./.duneboot.exe --verbosealso has order variations.Reproduction
build on two different filesystems or use disorderfs or randomize readdir order
Specifications
dune(output ofdune --version): ocaml-dune-3.12.2 with boot: remove single-command bootstrap #9735ocaml(output ofocamlc --version) ocaml-4.14.1