| 22 Apr 2026 |
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 |
raitobezarius | If Lix can produce a list of attribute keys for pkgs.pkgsExtraHardening but CppNix cannot, either Lix is making up keys that cannot be calculated or CppNix is not lazy enough with respect to the attrset spine thingie | 12:29:58 |
Sergei Zimmerman (xokdvium) | Maybe easier to compare Lix 2.93/94? | 12:30:35 |
Sergei Zimmerman (xokdvium) | Those should differ too and it might be easier to gauge whether those differ intentionally | 12:30:56 |