Skip to content

minimal-bootstrap: Hook up with stdenv#479322

Merged
philiptaron merged 7 commits intoNixOS:stagingfrom
Gskartwii:minimal-bootstrap-stdenv
Jan 28, 2026
Merged

minimal-bootstrap: Hook up with stdenv#479322
philiptaron merged 7 commits intoNixOS:stagingfrom
Gskartwii:minimal-bootstrap-stdenv

Conversation

@Gskartwii
Copy link
Contributor

@Gskartwii Gskartwii commented Jan 12, 2026

This PR builds upon #459002 to bootstrap x86_64-linux and i686-linux glibc and musl stdenvs from the minimal hex0 seed.

Things done

  • Built on platform:
    • x86_64-linux (glibc and musl)
    • i686-linux (glibc: yes, and works; musl: perl is broken?)
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • Tested, as applicable:
  • Ran nixpkgs-review on this PR. See nixpkgs-review usage.
  • Tested basic functionality of all binary files, usually in ./result/bin/.
  • Nixpkgs Release Notes
    • Package update: when the change is major or breaking. Hmm... might required a mention, since stdenv.bootstrapTools is removed on affected platforms?
  • NixOS Release Notes
    • Module addition: when adding a new NixOS module.
    • Module update: when the change is significant.
  • Fits CONTRIBUTING.md, pkgs/README.md, maintainers/README.md and other READMEs.

Add a 👍 reaction to pull requests you find important.

@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from c9d1c3b to d471874 Compare January 12, 2026 12:22
@nixpkgs-ci nixpkgs-ci bot added the 2.status: merge conflict This PR has merge conflicts with the target branch label Jan 12, 2026
@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from d471874 to ae9fd4a Compare January 12, 2026 13:32
@nixpkgs-ci nixpkgs-ci bot removed the 2.status: merge conflict This PR has merge conflicts with the target branch label Jan 12, 2026
@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch 2 times, most recently from 699b700 to e0cd0e3 Compare January 12, 2026 15:22
@nixpkgs-ci nixpkgs-ci bot added 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-linux-stdenv This PR causes stdenv to rebuild on Linux and must target a staging branch. 11.by: package-maintainer This PR was created by a maintainer of all the package it changes. 10.rebuild-linux: 5001+ This PR causes many rebuilds on Linux and must target the staging branches. 6.topic: stdenv Standard environment labels Jan 12, 2026
@Gskartwii Gskartwii changed the base branch from master to staging January 12, 2026 20:08
@nixpkgs-ci nixpkgs-ci bot closed this Jan 12, 2026
@github-project-automation github-project-automation bot moved this to Done in Stdenv Jan 12, 2026
@nixpkgs-ci nixpkgs-ci bot reopened this Jan 12, 2026
github-actions[bot]

This comment was marked as resolved.

@github-project-automation github-project-automation bot moved this from Done to In Progress in Stdenv Jan 12, 2026
@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from e0cd0e3 to c39cdb6 Compare January 12, 2026 20:09
@github-actions github-actions bot dismissed their stale review January 12, 2026 20:10

All good now, thank you!

@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from c39cdb6 to 5787f79 Compare January 13, 2026 07:41
@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from 5787f79 to b166aeb Compare January 15, 2026 13:21
}
else
throw "Musl libc only supports 64-bit Linux systems.";
throw "Musl libc only supports 64-bit Linux systems, and i686-linux.";
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perl seems to be broken on i686-linux-musl. But maybe it could be worth working towards support for this platform?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was able to build pkgsCross.musl32.perl , is it broken?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, it seems to work on cross. But through pkgsMusl.pkgsi686Linux, I didn't manage to build stdenv. I will try again now with the new staging, in case it makes a difference.

@Gskartwii Gskartwii marked this pull request as ready for review January 15, 2026 16:50
@pyrox0
Copy link
Member

pyrox0 commented Jan 15, 2026

note: this is from my run without the change, I'm confirming that the changes work now.

nixpkgs-review result

Generated using nixpkgs-review.

Command: nixpkgs-review pr 479322 --package tests.stdenv --package pkgsi686Linux.tests.stdenv
Commit: b166aeb1132c934f5a5cf38d283ecccdf8bcf141


x86_64-linux

❌ 4 packages failed to build:
  • pkgsi686Linux.tests.stdenv.hooks.patch-shebangs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.patch-shebangs
  • tests.stdenv.hooks.patch-shebangs
  • tests.stdenv.structuredAttrsByDefault.hooks.patch-shebangs
✅ 170 packages built:
  • pkgsi686Linux.tests.stdenv.ensure-no-execve-in-setup-sh
  • pkgsi686Linux.tests.stdenv.hooks.compress-man-pages
  • pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative (pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative.out2)
  • pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative.out2.out2
  • pkgsi686Linux.tests.stdenv.hooks.move-docs
  • pkgsi686Linux.tests.stdenv.hooks.move-lib64
  • pkgsi686Linux.tests.stdenv.hooks.move-sbin
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.prune-libtool-files
  • pkgsi686Linux.tests.stdenv.hooks.reproducible-builds
  • pkgsi686Linux.tests.stdenv.hooks.set-source-date-epoch-to-latest
  • pkgsi686Linux.tests.stdenv.outputs-no-out
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.compress-man-pages
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-docs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-lib64
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-sbin
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.prune-libtool-files
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.reproducible-builds
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.set-source-date-epoch-to-latest
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info (pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.info, pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.man)
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man (pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.info, pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.man)
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-concat-strings-sep
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-concat-to
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-golden-example-structuredAttrs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-prepend-append-to-var
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-structured-env-attrset
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info (pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info.info, pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info.man)
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man (pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man.info, pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man.man)
  • pkgsi686Linux.tests.stdenv.test-concat-strings-sep
  • pkgsi686Linux.tests.stdenv.test-concat-to
  • pkgsi686Linux.tests.stdenv.test-env-attrset
  • pkgsi686Linux.tests.stdenv.test-inputDerivation
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-allowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-allowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-disallowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-disallowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-fixed-output
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-allowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-allowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-disallowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-disallowedRequisites
  • pkgsi686Linux.tests.stdenv.test-prepend-append-to-var
  • pkgsi686Linux.tests.stdenv.test-structured-env-attrset
  • tests.stdenv.ensure-no-execve-in-setup-sh
  • tests.stdenv.hooks.compress-man-pages
  • tests.stdenv.hooks.make-symlinks-relative
  • tests.stdenv.hooks.make-symlinks-relative.out2 (tests.stdenv.hooks.make-symlinks-relative.out2.out2)
  • tests.stdenv.hooks.move-docs
  • tests.stdenv.hooks.move-lib64
  • tests.stdenv.hooks.move-sbin
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.hooks.prune-libtool-files
  • tests.stdenv.hooks.reproducible-builds
  • tests.stdenv.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.outputs-no-out
  • tests.stdenv.structuredAttrsByDefault.hooks.compress-man-pages
  • tests.stdenv.structuredAttrsByDefault.hooks.move-docs
  • tests.stdenv.structuredAttrsByDefault.hooks.move-lib64
  • tests.stdenv.structuredAttrsByDefault.hooks.move-sbin
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.prune-libtool-files
  • tests.stdenv.structuredAttrsByDefault.hooks.reproducible-builds
  • tests.stdenv.structuredAttrsByDefault.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.structuredAttrsByDefault.test-concat-strings-sep
  • tests.stdenv.structuredAttrsByDefault.test-concat-to
  • tests.stdenv.structuredAttrsByDefault.test-golden-example-structuredAttrs
  • tests.stdenv.structuredAttrsByDefault.test-prepend-append-to-var
  • tests.stdenv.structuredAttrsByDefault.test-structured-env-attrset
  • tests.stdenv.test-cc-wrapper-substitutions
  • tests.stdenv.test-cc-wrapper-substitutions.info (tests.stdenv.test-cc-wrapper-substitutions.info.info, tests.stdenv.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.test-cc-wrapper-substitutions.man (tests.stdenv.test-cc-wrapper-substitutions.man.info, tests.stdenv.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.test-concat-strings-sep
  • tests.stdenv.test-concat-to
  • tests.stdenv.test-env-attrset
  • tests.stdenv.test-inputDerivation
  • tests.stdenv.test-inputDerivation-allowedReferences
  • tests.stdenv.test-inputDerivation-allowedRequisites
  • tests.stdenv.test-inputDerivation-disallowedReferences
  • tests.stdenv.test-inputDerivation-disallowedRequisites
  • tests.stdenv.test-inputDerivation-fixed-output
  • tests.stdenv.test-inputDerivation-structured
  • tests.stdenv.test-inputDerivation-structured-allowedReferences
  • tests.stdenv.test-inputDerivation-structured-allowedRequisites
  • tests.stdenv.test-inputDerivation-structured-disallowedReferences
  • tests.stdenv.test-inputDerivation-structured-disallowedRequisites
  • tests.stdenv.test-prepend-append-to-var
  • tests.stdenv.test-structured-env-attrset

@pyrox0
Copy link
Member

pyrox0 commented Jan 15, 2026

Above commit fixes building the 4 failing tests from my nixpkgs-review run, however it and several other tests from this set fail.

@Gskartwii
Copy link
Contributor Author

Thanks a lot! I'll try and look into this.

@Gskartwii
Copy link
Contributor Author

I believe the test previously passed because bootstrapTools had all tools in the same ${bootstrapTools}/bin/ directory. Since this is no longer true for minimal-bootstrap, bash was no longer in PATH and then patchShebangs would fail to patch the shebang. Might be wrong.

@Gskartwii
Copy link
Contributor Author

nixpkgs-review result

Generated using nixpkgs-review.

Command: nixpkgs-review pr 479322 --package tests.stdenv --package pkgsi686Linux.tests.stdenv
Commit: 9af441a48f88e609e7440a1b353897c4abfbb8c9


x86_64-linux

✅ 174 packages built:
  • pkgsi686Linux.tests.stdenv.ensure-no-execve-in-setup-sh
  • pkgsi686Linux.tests.stdenv.hooks.compress-man-pages
  • pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative
  • pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative.out2 (pkgsi686Linux.tests.stdenv.hooks.make-symlinks-relative.out2.out2)
  • pkgsi686Linux.tests.stdenv.hooks.move-docs
  • pkgsi686Linux.tests.stdenv.hooks.move-lib64
  • pkgsi686Linux.tests.stdenv.hooks.move-sbin
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • pkgsi686Linux.tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • pkgsi686Linux.tests.stdenv.hooks.patch-shebangs
  • pkgsi686Linux.tests.stdenv.hooks.prune-libtool-files
  • pkgsi686Linux.tests.stdenv.hooks.reproducible-builds
  • pkgsi686Linux.tests.stdenv.hooks.set-source-date-epoch-to-latest
  • pkgsi686Linux.tests.stdenv.outputs-no-out
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.compress-man-pages
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-docs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-lib64
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.move-sbin
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.patch-shebangs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.prune-libtool-files
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.reproducible-builds
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.hooks.set-source-date-epoch-to-latest
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info (pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.info, pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.man)
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man (pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.info, pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.man)
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-concat-strings-sep
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-concat-to
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-golden-example-structuredAttrs
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-prepend-append-to-var
  • pkgsi686Linux.tests.stdenv.structuredAttrsByDefault.test-structured-env-attrset
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info (pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info.info, pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.info.man)
  • pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man (pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man.info, pkgsi686Linux.tests.stdenv.test-cc-wrapper-substitutions.man.man)
  • pkgsi686Linux.tests.stdenv.test-concat-strings-sep
  • pkgsi686Linux.tests.stdenv.test-concat-to
  • pkgsi686Linux.tests.stdenv.test-env-attrset
  • pkgsi686Linux.tests.stdenv.test-inputDerivation
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-allowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-allowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-disallowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-disallowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-fixed-output
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-allowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-allowedRequisites
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-disallowedReferences
  • pkgsi686Linux.tests.stdenv.test-inputDerivation-structured-disallowedRequisites
  • pkgsi686Linux.tests.stdenv.test-prepend-append-to-var
  • pkgsi686Linux.tests.stdenv.test-structured-env-attrset
  • tests.stdenv.ensure-no-execve-in-setup-sh
  • tests.stdenv.hooks.compress-man-pages
  • tests.stdenv.hooks.make-symlinks-relative (tests.stdenv.hooks.make-symlinks-relative.out2)
  • tests.stdenv.hooks.make-symlinks-relative.out2.out2
  • tests.stdenv.hooks.move-docs
  • tests.stdenv.hooks.move-lib64
  • tests.stdenv.hooks.move-sbin
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.hooks.patch-shebangs
  • tests.stdenv.hooks.prune-libtool-files
  • tests.stdenv.hooks.reproducible-builds
  • tests.stdenv.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.outputs-no-out
  • tests.stdenv.structuredAttrsByDefault.hooks.compress-man-pages
  • tests.stdenv.structuredAttrsByDefault.hooks.move-docs
  • tests.stdenv.structuredAttrsByDefault.hooks.move-lib64
  • tests.stdenv.structuredAttrsByDefault.hooks.move-sbin
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.patch-shebangs
  • tests.stdenv.structuredAttrsByDefault.hooks.prune-libtool-files
  • tests.stdenv.structuredAttrsByDefault.hooks.reproducible-builds
  • tests.stdenv.structuredAttrsByDefault.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.structuredAttrsByDefault.test-concat-strings-sep
  • tests.stdenv.structuredAttrsByDefault.test-concat-to
  • tests.stdenv.structuredAttrsByDefault.test-golden-example-structuredAttrs
  • tests.stdenv.structuredAttrsByDefault.test-prepend-append-to-var
  • tests.stdenv.structuredAttrsByDefault.test-structured-env-attrset
  • tests.stdenv.test-cc-wrapper-substitutions
  • tests.stdenv.test-cc-wrapper-substitutions.info (tests.stdenv.test-cc-wrapper-substitutions.info.info, tests.stdenv.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.test-cc-wrapper-substitutions.man (tests.stdenv.test-cc-wrapper-substitutions.man.info, tests.stdenv.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.test-concat-strings-sep
  • tests.stdenv.test-concat-to
  • tests.stdenv.test-env-attrset
  • tests.stdenv.test-inputDerivation
  • tests.stdenv.test-inputDerivation-allowedReferences
  • tests.stdenv.test-inputDerivation-allowedRequisites
  • tests.stdenv.test-inputDerivation-disallowedReferences
  • tests.stdenv.test-inputDerivation-disallowedRequisites
  • tests.stdenv.test-inputDerivation-fixed-output
  • tests.stdenv.test-inputDerivation-structured
  • tests.stdenv.test-inputDerivation-structured-allowedReferences
  • tests.stdenv.test-inputDerivation-structured-allowedRequisites
  • tests.stdenv.test-inputDerivation-structured-disallowedReferences
  • tests.stdenv.test-inputDerivation-structured-disallowedRequisites
  • tests.stdenv.test-prepend-append-to-var
  • tests.stdenv.test-structured-env-attrset

@nixos-discourse
Copy link

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/introducing-determinate-secure-packages/74300/6

Copy link
Member

@Pandapip1 Pandapip1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: I see ${earlyBash}/bin/bash is used in several places. Is there a reason meta.mainProgram isn't set in pkgs/os-specific/linux/minimal-bootstrap/bash/common.nix and the usage replaced with lib.getExe earlyBash?

@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from 9af441a to adce18e Compare January 17, 2026 14:20
@Gskartwii
Copy link
Contributor Author

Nitpick: I see ${earlyBash}/bin/bash is used in several places. Is there a reason meta.mainProgram isn't set in pkgs/os-specific/linux/minimal-bootstrap/bash/common.nix and the usage replaced with lib.getExe earlyBash?

Thanks, this makes sense. I've updated the usage in the last commit for this.

Copy link
Member

@Pandapip1 Pandapip1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like a few got missed

preHook = ''
# Don't patch #!/interpreter because it leads to retained
# dependencies on the bootstrapTools in the final stdenv.
dontPatchShebangs=1
${commonPreHook}
'';
shell = "${bootstrapTools}/bin/bash";
initialPath = [ bootstrapTools ];
shell = "${stage0.bash}/bin/bash";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
shell = "${stage0.bash}/bin/bash";
shell = lib.getExe stage0.bash;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, this is interesting. We have to be careful with stage0.bash: for instance on *-darwin and aarch64-linux, this package is actually just bootstrapTools, which also contains coreutils, diffutils and various other binaries, alongside bash.

Copy link
Member

@Pandapip1 Pandapip1 Jan 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about

Suggested change
shell = "${stage0.bash}/bin/bash";
shell = lib.getExe' stage0.bash "bash";

That being said, it probably makes sense for whatever defines stage0.bash to at the very least override the mainProgram to bash with lib.overrideDerivation

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we should not set meta.mainProgram in that derivation, and we should use lib.getExe' stage0.bash "bash" for any user affected by this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe stage0.bash should override its own meta.mainProgram. That's e.g. what the netcat package does.

@@ -407,7 +351,7 @@ assert bootstrapTools.passthru.isFromBootstrapFiles or false; # sanity check
# Historically, the wrapper didn't use runtimeShell, so the used shell had to be changed explicitly
# (or stdenvNoCC.shell would be used) which happened in stage4.
binutils = super.binutils.override {
runtimeShell = "${bootstrapTools}/bin/bash";
runtimeShell = "${stage0.bash}/bin/bash";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
runtimeShell = "${stage0.bash}/bin/bash";
runtimeShell = lib.getExe stage0.bash;

PATH = "${pkgs.strace}/bin:${stdenv.bootstrapTools}/bin";
initialPath = [
stdenv.bootstrapTools
builder = "${initialBash}/bin/bash";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
builder = "${initialBash}/bin/bash";
builder = lib.getExe initialBash;

make-symlinks-relative =
(derivation {
name = "test-make-symlinks-relative";
system = stdenv.system;
builder = "${bootstrapTools}/bin/bash";
initialPath = "${bootstrapTools}";
builder = "${initialBash}/bin/bash";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
builder = "${initialBash}/bin/bash";
builder = lib.getExe initialBash;

@Gskartwii Gskartwii force-pushed the minimal-bootstrap-stdenv branch from adce18e to 3b2053b Compare January 26, 2026 19:45
@nixpkgs-ci nixpkgs-ci bot added the 8.has: package (new) This PR adds a new package label Jan 26, 2026
@philiptaron
Copy link
Contributor

I'm going to do a build overnight of the stdenv tests. What attributes, other than the ones you've already tested, would be good to look at?

@philiptaron
Copy link
Contributor

Everything came up roses. Time for merge.

@philiptaron philiptaron added this pull request to the merge queue Jan 28, 2026
@pyrox0
Copy link
Member

pyrox0 commented Jan 28, 2026

Thank you, philip!

Merged via the queue into NixOS:staging with commit 31ad153 Jan 28, 2026
39 of 41 checks passed
@github-project-automation github-project-automation bot moved this from In Progress to Done in Stdenv Jan 28, 2026
@nixos-discourse
Copy link

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/a-full-source-bootstrap-for-nixos/74801/4

@llakala
Copy link
Contributor

llakala commented Mar 2, 2026

I've bisected, and this PR seems to have caused a meaningful regression in eval stats. These are the stats from before this PR for evaluating pkgs.firefox:

{
  "cpuTime": 0.18691299855709076,
  "envs": {
    "bytes": 3404768,
    "elements": 237289,
    "number": 188307
  },
  "gc": {
    "cycles": 1,
    "heapSize": 402915328,
    "totalBytes": 40377200
  },
  "list": {
    "bytes": 491928,
    "concats": 2895,
    "elements": 61491
  },
  "nrAvoided": 210007,
  "nrExprs": 100441,
  "nrFunctionCalls": 176146,
  "nrLookups": 99160,
  "nrOpUpdateValuesCopied": 1046448,
  "nrOpUpdates": 13566,
  "nrPrimOpCalls": 87447,
  "nrThunks": 204223,
  "sets": {
    "bytes": 23685976,
    "elements": 1440982,
    "number": 26261
  },
  "sizes": {
    "Attr": 16,
    "Bindings": 24,
    "Env": 8,
    "Value": 16
  },
  "symbols": {
    "bytes": 379841,
    "number": 40460
  },
  "time": {
    "cpu": 0.18691299855709076,
    "gc": 0.003,
    "gcFraction": 0.016050248100234074
  },
  "values": {
    "bytes": 9913600,
    "number": 619600
  }
}

And after:

{
  "cpuTime": 0.23173899948596954,
  "envs": {
    "bytes": 4403392,
    "elements": 309401,
    "number": 241023
  },
  "gc": {
    "cycles": 1,
    "heapSize": 402915328,
    "totalBytes": 47616448
  },
  "list": {
    "bytes": 680344,
    "concats": 3408,
    "elements": 85043
  },
  "nrAvoided": 282334,
  "nrExprs": 111836,
  "nrFunctionCalls": 222780,
  "nrLookups": 131452,
  "nrOpUpdateValuesCopied": 1081021,
  "nrOpUpdates": 31391,
  "nrPrimOpCalls": 109830,
  "nrThunks": 266123,
  "sets": {
    "bytes": 25548440,
    "elements": 1521326,
    "number": 50301
  },
  "sizes": {
    "Attr": 16,
    "Bindings": 24,
    "Env": 8,
    "Value": 16
  },
  "symbols": {
    "bytes": 381967,
    "number": 40657
  },
  "time": {
    "cpu": 0.23173899948596954,
    "gc": 0.003,
    "gcFraction": 0.012945598309539749
  },
  "values": {
    "bytes": 11084448,
    "number": 692778
  }
}

While I'm certainly a fan of minimal bootstrapping, I'd appreciate if some effort could be put in to minimize this regression. Anecdotally, this has caused an ~25% regression to the eval times of my personal package set, which I expect to be representative of the penalty at scale.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

6.topic: stdenv Standard environment 8.has: package (new) This PR adds a new package 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 5001+ This PR causes many rebuilds on Linux and must target the staging branches. 10.rebuild-linux-stdenv This PR causes stdenv to rebuild on Linux and must target a staging branch. 11.by: package-maintainer This PR was created by a maintainer of all the package it changes.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants