| 22 Apr 2026 |
Randy Eckenrode | * It fails again, but it doesn’t look like it’s my fault this time.
https://gist.github.com/reckenrode/f2b2a8b6d079e66edbef12e193a41344
| 12:03:25 |
Vladimír Čunát | Yes, there were multiple issues in the meantime, unfortunately. | 12:07:46 |
Vladimír Čunát | https://github.com/NixOS/nixpkgs/pull/510907 | 12:08:17 |
raitobezarius | on my side, I see: https://bin.hubrecht.ovh/?2b4ded4a9c12972e#BUuCq1fnzB3qgHj9wk4HqPvZkvU39YkJKQwF6LfUFi33 | 12:08:18 |
raitobezarius | i will look if i don't have a fucked up store right now | 12:08:48 |
raitobezarius | that being said, attribute '__bootPackages' missing can only mean that pkgs.stdenv is the root stdenv or a fucked-up stage no? | 12:10:31 |
raitobezarius | All intermediate stdenv stages always have __bootPackages | 12:10:45 |
raitobezarius | If Lix's pointer equality update cause this, the most obvious cause would be that a conditional if some_attr_set_containing_funs == another_set_containing_funs differs between CppNix and Lix | 12:11:17 |
raitobezarius | and cause a different attrset or value to be returned in the stdenv machinery | 12:11:26 |
raitobezarius | cppnix still cannot Ctrl-C evaluations in REPL I see :D… | 12:13:35 |
Sergei Zimmerman (xokdvium) | In reply to @raitobezarius:matrix.org on my side, I see: https://bin.hubrecht.ovh/?2b4ded4a9c12972e#BUuCq1fnzB3qgHj9wk4HqPvZkvU39YkJKQwF6LfUFi33 I don’t think does eval with Lix in that case, since it’s using cppnix inside the derivation? | 12:14:04 |
raitobezarius | correct | 12:14:33 |
raitobezarius | still remains weird… | 12:14:39 |
Sergei Zimmerman (xokdvium) | Anyway that nixpkgs source path is in cno, I just substituted it | 12:14:48 |
raitobezarius | okie | 12:14:59 |
raitobezarius | f =
pkgs: prev:
if !pkgs.stdenv.hostPlatform.isDarwin || pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin" then
prev.darwin.sourceRelease
else
f pkgs.stdenv.__bootPackages pkgs;
bootstrapSourceRelease = f pkgs pkgs;
| 12:18:10 |
raitobezarius | f pkgs pkgs → f pkgs.stdenv.__bootPackages pkgs → f (pkgs.stdenv.__bootPackages).stdenv.__bootPackages pkgs.stdenv.__bootPackages → ... until we find a pkgs` for which the host platform is not Darwin (i.e. cross compilation mode) OR we found the root stage0 of Darwin, that's the intent right? | 12:19:14 |
raitobezarius | and prev.darwin.sourceRelease is a function | 12:20:57 |
raitobezarius | why the trace is in pkgsExtraHardening ? | 12:22:06 |
raitobezarius | … while evaluating the attribute 'stdenv.__bootPackages'
at /nix/store/phggf546c3ig9x349z4rf0qr4ckdci62-source/pkgs/top-level/variants.nix:161:11:
160| pkgsExtraHardening = super';
161| stdenv = super'.withDefaultHardeningFlags (
| ^
162| super'.stdenv.cc.defaultHardeningFlags
error: attribute '__bootPackages' missing
at /nix/store/phggf546c3ig9x349z4rf0qr4ckdci62-source/pkgs/os-specific/darwin/by-name/av/AvailabilityVersions/package.nix:17:9:
16| else
17| f pkgs.stdenv.__bootPackages pkgs;
| ^
18| bootstrapSourceRelease = f pkgs pkgs;
| 12:22:14 |
raitobezarius | that top frame is evaluating a stdenv of the new top level pkgsExtraHardening | 12:22:25 |
raitobezarius | is this used in the Darwin bootstrapping? | 12:22:31 |
raitobezarius | ok | 12:23:37 |
raitobezarius | I found a shorter reproducer on CppNix | 12:23:42 |
raitobezarius | pkgs.pkgsExtraHardening on CppNix | 12:23:47 |
raitobezarius | OK, I think I understand what is going on | 12:27:42 |
raitobezarius | Lix won't fail on evaluating pkgs.pkgsExtraHardening but will fail on pkgs.pkgsExtraHardening.stdenv | 12:27:57 |
raitobezarius | Looks like a forcing/laziness issue somewhere | 12:28:11 |
raitobezarius | So, first of all, withDefaultHardeningFlags do not return a correctly formed stdenv with __bootPackages and that's arguably a pkgsExtraHardening bug | 12:28:43 |
raitobezarius | Second, I think we need to rule out should Lix force more thunks here or should CppNix force less thunks | 12:29:07 |