| 22 Apr 2026 |
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 |
raitobezarius | Meh I'm sure we will fall in the pointer tagging change and this won't help me understanding what is going on | 12:31:03 |
raitobezarius | I will try analyzing the forcing logic just by reading the frames | 12:31:31 |
raitobezarius | and if I fail, I will think about something else | 12:31:35 |
raitobezarius | found a nicer reproducer | 12:49:45 |
raitobezarius | nix-instantiate --eval -E 'import ./. { system = "x86_64-darwin"; allowAliases = false; overlays = [ (self: super: { stdenv = super.stdenv.override {}; }) ]; }' | 12:49:50 |
raitobezarius | CppNix explodes immediately, Lix produces a result | 12:49:57 |
emily | (nothing better than a language without semantics) | 12:51:55 |
raitobezarius | let's be even more precise | 12:52:06 |
raitobezarius | nix-instantiate --eval -E 'import ./. { system = "x86_64-darwin"; allowAliases = false; overlays = [ (self: super: { stdenv = super.stdenv // { __bootPackages = throw "bye"; }; }) ]; }' also differs in evaluation | 12:52:10 |
raitobezarius | it feels like what trips up the __bootPackages is the series of asserts inside the darwin/default.nix entrypoint | 12:52:40 |
raitobezarius | but I don't know if this needs to be forced to know the list of package names | 12:52:58 |
raitobezarius | On a conceptual level, no package name depends on the actual state of stdenv | 12:53:48 |
raitobezarius | There's no true evaluation bug because CppNix and Lix agrees that pkgs.pkgsExtraHardening.stdenv is cooked | 12:54:11 |
raitobezarius | I don't have time to go deeper right now to pinpoint why the potential assert are thunked somehow in the eval machinery in Lix | 12:54:44 |
raitobezarius | I will open an issue on the Lix side and pass it to the rest of the core team | 12:54:53 |
raitobezarius | I suggest that override is repaired and is tested wrt to presence of __bootPackages or that AvailabilityVersions do not assume its existence in stdenv because overridden stdenv exist | 12:55:16 |
raitobezarius | This unblocks the current failure in Hydra | 12:55:32 |
raitobezarius | release-checks should add something about .stdenv to the package set being evaluated | 12:55:48 |
raitobezarius | This will make Lix flag this also unless we deem it to be a bug on our side and will converge to CppNix's evaluation behaviors | 12:56:04 |
raitobezarius | but if I read https://edolstra.github.io/pubs/laziness-ldta2008-final.pdf | 12:56:46 |
raitobezarius | I read "maximal laziness" | 12:56:48 |
raitobezarius | if Lix can produce a result here out of maximal laziness… :P | 12:56:55 |
raitobezarius | * if Lix can produce a (correct) result here out of maximal laziness… :P | 12:57:13 |
raitobezarius | you can follow our discussions in https://zulip.lix.systems/#narrow/channel/6-Eval/topic/Laziness.20difference.20in.20Lix.202.2E94.2B.20vs.2E.20Lix.202.2E93/near/9924 | 12:59:34 |
| * raitobezarius goes away | 13:00:24 |
Randy Eckenrode | I added a test for __bootPackages in my attempted fix PR. Once we get a fix in, then this can all go away on staging where I tear out this stuff that was only there to avoid rebuilds on master. | 13:07:29 |
raitobezarius | Awesome, tysm! | 13:07:39 |