Hi! Some time ago, I started to look into NetBSD's success after reaching reproducibility for at least two ports. Being both a VAX enthusiast and somebody running CI builds for NetBSD current, I used that infrastructure to work on reproducibility for VAX, as a cross-build target building on a Linux host. That was extended to build all port/arch combinations listed in src/build.sh . After a pile of additional patches, all buildable port/arch combinations could be build reproducible on Linux, a few patches later also on NetBSD. These days, I'm chasing differences between Linux- and NetBSD-built release artifacts. TL;DR: There are two remaining generic issues and probably a small number of remaining port-specific differences. 1. Building install ISOs with `makefs` doesn't result in identical filesystem images, as the ISOs contain a large number of files _not_ listed in the manifest. These files retain their host's user/group identity. https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58196 2. Some ports use CTF debugging data, which is (due to n unknown root cause) different when created with NetBSD compared to CTF data generated on a Linux host. (I suspect that data is sorted somewhere, but that sort isn't stable for elements considered "equal".) https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58197 A third problem was that my local tarballs of generated release artifacts wasn't stable, too, but an update from GNU tar 1.34 -> 1.35 seems to have solved this issue. Here is a table of current build results (NetBSD current as of a few days ago, plus a small number of patches that still need to be reviewed, submitted & merged): mostly ok: If checked [x], there are no differences within the release files, except the ISO images. If checked [!], there are known differences that need to be checked. (May be CTF-related, though.) CTF: If checked [!], this arch (aarch64, i386, amd64, earm) uses non-reproducible CTF debug infos. If checked [-], this arch does not use CTF debug infos. ISO: If checked [!], the ISO file contain differences (due to ISO9660 owner/group), but the actual content files are okay. If checked [-], this port does not build ISO images. If checked [x], this ISO(s) are bit-identical! perfect: If checked [x], a tarball from result artifact created on a Linux build host is identical to a tarball created from NetBSD-built artifacts. Not tested for many ports/archs as it was pointless with GNU tar 1.34. mst ok CTF ISO perfect acorn32-earmv4 [!] [!] [!] [ ] algor-mips64el [x] [-] [-] [x] algor-mipsel [!] [-] [ ] [ ] Minimal differences in algor/binary/kernel/netbsd-P5064.gz / algor/binary/sets/kern-P5064.tgz alpha-alpha [x] [-] [!] [ ] amd64-x86_64 [!] [!] [!] [ ] amiga-m68k [x] [-] [!] [ ] amigappc-powerpc [x] [-] [-] [ ] arc-mips64el [ ] [ ] [ ] [ ] Fails to build: mipsel--netbsd-gcc: not found: No such file or directory (calling 32bit GCC while only 64bit is configured) arc-mipsel [x] [-] [!] [ ] atari-m68k [x] [-] [!] [ ] bebox-powerpc [x] [-] [-] [ ] cats-earmv4 [!] [!] [!] [ ] cesfic-m68k [x] [-] [-] [ ] cobalt-mips64el [x] [-] [!] [ ] cobalt-mipsel [x] [-] [!] [ ] dreamcast-sh3el [!] [-] [!] [ ] Minimal differences in dreamcast/binary/kernel/netbsd-GENERIC_MD{.bin,}.gz (like algor-mipsel) emips-mipseb [x] [-] [!] [ ] epoc32-earmv4 [!] [!] [!] [ ] evbarm-aarch64 [!] [!] [-] [ ] evbarm-aarch64eb [!] [!] [-] [ ] evbarm-earmv4 [!] [!] [-] [ ] evbarm-earmv4eb [!] [!] [-] [ ] evbarm-earmv5 [ ] [ ] [ ] [ ] Fails to build evbarm-earmv5eb [ ] [ ] [ ] [ ] Fails to build evbarm-earmv5hf [ ] [ ] [ ] [ ] Fails to build evbarm-earmv5hfeb [ ] [ ] [ ] [ ] Fails to build evbarm-earmv6 [!] [!] [-] [ ] evbarm-earmv6eb [!] [!] [-] [ ] evbarm-earmv6hf [!] [!] [-] [ ] evbarm-earmv6hfeb [!] [!] [-] [ ] evbarm-earmv7 [!] [!] [-] [ ] evbarm-earmv7eb [!] [!] [-] [ ] evbarm-earmv7hf [!] [!] [-] [ ] evbarm-earmv7hfeb [!] [!] [-] [ ] evbcf-coldfire [ ] [ ] [ ] [ ] Fails to build: checking target system type... Invalid configuration `m5407--netbsdelf': machine `m5407-' not recognized evbmips-mips64eb [x] [-] [!] [ ] evbmips-mips64el [x] [-] [!] [ ] evbmips-mipseb [!] [-] [-] [ ] evbmips-mipsel [!] [-] [-] [ ] evbmips-mipsn64eb [x] [-] [!] [ ] evbmips-mipsn64el [x] [-] [!] [ ] evbppc-powerpc [!] [-] [!] [ ] evbppc-powerpc64 [x] [-] [!] [ ] evbsh3-sh3eb [x] [-] [!] [ ] evbsh3-sh3el [x] [-] [!] [ ] ews4800mips-mipseb [x] [-] [!] [ ] hp300-m68k [x] [-] [!] [ ] hpcarm-earmv4 [!] [!] [-] [ ] hpcmips-mipsel [x] [-] [!] [ ] hpcsh-sh3el [x] [-] [!] [ ] hppa-hppa [!] [-] [!] [ ] i386-i386 [!] [!] [!] [ ] ia64-ia64 [x] [-] [!] [ ] ibmnws-powerpc [x] [-] [!] [ ] iyonix-earm [!] [!] [-] [ ] landisk-sh3el [x] [-] [-] [ ] luna68k-m68k [x] [-] [!] [ ] mac68k-m68k [x] [-] [!] [ ] macppc-powerpc [x] [-] [!] [ ] macppc-powerpc64 [x] [-] [!] [ ] mipsco-mipseb [x] [-] [!] [ ] mmeye-sh3eb [x] [-] [!] [ ] mvme68k-m68k [x] [-] [!] [ ] mvmeppc-powerpc [x] [-] [!] [ ] netwinder-earmv4 [!] [!] [!] [ ] news68k-m68k [x] [-] [!] [ ] newsmips-mipseb [x] [-] [!] [ ] next68k-m68k [x] [-] [!] [ ] ofppc-powerpc [x] [-] [!] [ ] ofppc-powerpc64 [ ] [ ] [ ] [ ] Failed to build (fails to link 32 vs 64 bit code) or1k-or1k [ ] [ ] [ ] [ ] Failed to build (No rule to make target `/var/lib/laminar/run/netbsd-or1k-or1k/31/NetBSD-src/tools/gcc/../../external/gpl3/gcc.old/dist/gcc/config/or1k/or1k.md') playstation2-mipsel [ ] [ ] [ ] [ ] Failed to build (/root/NetBSD-src/usr.sbin/crash/obj/mips/mutex.h:50:2: error: unknown type name 'ipl_cookie_t') pmax-mips64el [x] [-] [!] [ ] pmax-mipsel [x] [-] [!] [ ] prep-powerpc [x] [-] [!] [ ] riscv-riscv32 [!] [-] [!] [ ] Diff in [base]/lib/libc.so.12.221 (.eh_frame_hdr) riscv-riscv64 [!] [-] [!] [ ] Diff in base{,32}.tgz rs6000-powerpc [x] [-] [-] [ ] sandpoint-powerpc [x] [-] [!] [ ] sbmips-mips64eb [x] [-] [-] [x] sbmips-mips64el [x] [-] [-] [x] sbmips-mipseb [x] [-] [-] [x] sbmips-mipsel [!] [-] [-] [ ] Diff in sbmips/binary/kernel/netbsd-GENERIC.gz, sbmips/binary/sets/kern-GENERIC.tgz sgimips-mips64eb [ ] [ ] [ ] [ ] Failed to build: nbmake[4]: don't know how to make netbsd-INSTALL64_IP2x.gz. Stop sgimips-mipseb [x] [-] [!] [ ] shark-earmv4 [!] [!] [-] [ ] sparc-sparc [!] [-] [!] [ ] Diff in sparc/installation/bootfs/instfs.tgz, rootfs.tgz sparc64-sparc64 [x] [-] [!] [ ] sun2-m68000 [!] [-] [!] [ ] Diff in sun2/binary/kernel/netbsd-RAMDISK.gz sun3-m68k [!] [-] [!] [ ] Diff in sun3/binary/kernel/netbsd-RAMDISK3X.gz, netbsd-RAMDISK.gz vax-vax [x] [-] [!] [ ] virt68k-m68k [x] [x] [-] [x] x68k-m68k [x] [-] [!] [ ] zaurus-earm [!] [!] [!] [ ] Diff in x11 (date in docs) Ignoring needed fixes for ISO and CTF generation, NetBSD is on a good track reaching reproducible build results even on quite different build operating systems! That's a nice outcome! Thanks, Jan-Benedict PS: Special thanks to Christos and other people who had a look at my occasional GNATS PRs! --
Attachment:
signature.asc
Description: PGP signature