Gothenburg 2026 - Day 2 - the remaining 1%
The remaining 1%
Which packages are not reproducible, and why?
- Profile guided optimization: systemd, gzip, gcc (see idea)
- Saves compile time
- Possible resolutions
- Disable it, 10% performance hit
- Make profile 100% deterministic (e.g. gzip)
-
Idea: Fuzzer that make a profile for the code.
- compilers: Haskell, mono, erlang, zig, nim, ocaml, llvm, …
- Timestamp
- Address space memory optimizations
- Idea: Fuzzer that “understands” the language, find inputs that are constant but non-deterministic output.
- output memory dump into result: Emacs lisp, scheme 48, Racket, Clisp, …
- This is done to improve startup time
- Linux, grub, xen
- Dynamic signing key of modules
- Building of images/vms
Thought: make the profile a different package, similar to the signing solution in Linux.
Idea: use a fuzzer to find an input that makes a test undeterministic. Fuzzer that make a profile for the code. Fuzzer that “understands” the language, find inputs that are constant but non-deterministic output.
Idea: Upstream instructions on how to perform a profiling run. Example: profile.sh which runs the program and outputs instrument binaries, providing profiling information and is determinstic.
