Remove the empty share directory left behind after pruning installed coreutils documentation. The stage0 bootstrap path only needs the single static coreutils binary and symlink entry points.
Size impact against the previous trimmed output:
- coreutils-static closure: 2,250,112 B -> 2,249,944 B (-168 B)
Assisted-by: codex with gpt-5.5-high
Remove installed shell completion, documentation, and man page. The stage0 bootstrap path only needs the static patchelf binary.
Size impact after the compiler-reference cleanup:
- patchelf-static closure: 1.237 MiB -> 1.225 MiB (-0.012 MiB)
Assisted-by: codex with gpt-5.5-high
Remove the installed man page. The stage0 bootstrap path only needs the static patch binary.
Size impact against upstream/staging:
- gnupatch-static closure: 0.273 MiB -> 0.241 MiB (-0.032 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed documentation. The stage0 bootstrap path only needs the static sed binary.
Size impact against upstream/staging:
- gnused-static closure: 0.480 MiB -> 0.276 MiB (-0.204 MiB)
Assisted-by: codex with gpt-5.5-high
Remove installed info and man pages. The stage0 bootstrap path only needs the static gzip binary.
Size impact against upstream/staging:
- gzip-static closure: 0.249 MiB -> 0.175 MiB (-0.073 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed documentation plus the remote tape helper. The stage0 bootstrap path only needs the static tar binary.
Size impact against upstream/staging:
- gnutar-static closure: 3.772 MiB -> 0.826 MiB (-2.946 MiB)
Assisted-by: codex with gpt-5.5-high
Install the single bzip2 binary with bunzip2 and bzcat symlinks instead of duplicate binaries, and skip unused recovery tools, headers, libraries, scripts, and man pages. The smoke test covers compression plus both decompression entry points.
Size impact against upstream/staging:
- bzip2-static closure: 0.665 MiB -> 0.159 MiB (-0.505 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed documentation after keeping only the grep binary. The existing egrep and fgrep pruning remains in place.
Size impact against upstream/staging:
- gnugrep-static closure: 0.546 MiB -> 0.381 MiB (-0.165 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed documentation from the static diffutils output. The bootstrap path keeps the diff, cmp, diff3, and sdiff binaries.
Size impact against upstream/staging:
- diffutils-static closure: 0.896 MiB -> 0.661 MiB (-0.235 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed headers and documentation. The bootstrap path only needs the static make binary.
Size impact against upstream/staging:
- gnumake-static closure: 0.963 MiB -> 0.325 MiB (-0.638 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and keep only the bootstrap-relevant find and xargs tools. Drop locate, updatedb, frcode, documentation, locale data, and the var directory.
Size impact against upstream/staging:
- findutils-static closure: 2.830 MiB -> 0.592 MiB (-2.237 MiB)
Assisted-by: codex with gpt-5.5-high
Disable optional gawk features not used by the bootstrap path and prune installed helper files, headers, libraries, documentation, locale data, and awk library scripts. The smoke test now covers a simple awk program, not only --version.
Size impact against upstream/staging:
- gawk-static closure: 6.001 MiB -> 1.549 MiB (-4.453 MiB)
Assisted-by: codex with gpt-5.5-high
Drop unused installed libraries and headers, avoid building unused gprof/libctf components, and replace duplicate target-prefixed tools with symlinks while keeping the conventional paths available.
Size impact against upstream/staging:
- binutils-static closure: 42.482 MiB -> 21.093 MiB (-21.389 MiB)
Assisted-by: codex with gpt-5.5-high
Disable NLS and remove installed documentation from the static bash used in stage0. The bootstrap path keeps bash and the sh symlink only.
Size impact against upstream/staging:
- bash-static closure: 9.643 MiB -> 1.333 MiB (-8.310 MiB)
Assisted-by: codex with gpt-5.5-high
Force the xz build through a static libtool link, disallow the musl runtime reference, and remove unused installed libraries, headers, docs, and auxiliary decoder tools.
Size impact against upstream/staging:
- xz-static closure: 26.517 MiB -> 0.277 MiB (-26.239 MiB)
Assisted-by: codex with gpt-5.5-high
Static patchelf does not need build-compiler paths in debug or source metadata. Add deterministic compiler flags and disallow references to the bootstrap compiler.
Size impact against upstream/staging:
- patchelf-static closure: 167.634 MiB -> 1.237 MiB (-166.397 MiB)
Assisted-by: codex with gpt-5.5-high
Split minimal-bootstrap.test into bootstrap-chain, static-tools, and compiler aggregate tests. This keeps the full aggregate while allowing static-tool edits to be verified without rebuilding unrelated compiler checks.
Assisted-by: codex with gpt-5.5-high
According to the message in the patch that introduced LIST_HARDENED [1],
DEBUG_LIST was not optimized for performance in production and presents
a significant performance hit in hot paths in some workloads. Use the
new LIST_HARDENED option instead on >= 6.6 for better performance.
[1]: https://git.kernel.org/torvalds/c/aebc7b0d8d91bbc69e976909963046bc48bca4fd
GNU Make's release tarball contains pregenerated Autotools files and
depends on archive mtimes to keep them newer than their inputs.
The Mes-built gnutar used by gnumake-musl does not preserve those mtimes.
That can make configure.ac and m4 files appear newer than aclocal.m4 or
Makefile.in, causing make to try to run aclocal/automake during the
minimal bootstrap build.
Use gnutar-musl here, which is already documented as preserving mtimes for
pregenerated files.
Assisted-by: OpenAI Codex (GPT-5.5)
Reorganize the passthru.tests to be able to comment out/disable
individual tests that were previously hidden in an attrset.
Also comment out tests that are currently broken on master. Once this is
merged, the tests in passthru.nixosTests serve as a hard quality gate
for merging changes to systemd as per the newly addded README that lives
next to the systemd derivation. These tests were only commented out
because I believe they are still valuable and should be fixed. However,
actually fixing them is out of scope for this change.
This removed the `installer-systemd-stage-1` tests because they were to
costly to evaluate and build for normal maintainers. We also don't have
all the other installer tests here. All tests use systemd, but we need
to balance the executability in a sensible timescale with test coverage.