<{\_\}>
setheron[discord]: do the derivations that are reproducible change to fixed output ?
<{\_\}>
setheron[discord]: (intensional store)
<{\_\}>
NobbZ[discord]: Why would you make them FOD? That would only increase the burden of maintanence when updating.
<{\_\}>
setheron[discord]: Isn't that the point of reproducible builds ?
<{\_\}>
setheron[discord]: Without seeing a FOD, I would expect the derivation is not reproducible.
<{\_\}>
setheron[discord]: The benefit is also all the stuff laid out in the intensional store; you can avoid rebuilding deep chains when you make minor changes to dependencies
<qyliss>
FODs are horrible
<qyliss>
you have no way of knowing when the hash needs to be changed
<qyliss>
but they're orthogonal to the intensional store
<simpson>
Yes. I've asked a bunch of questions, all basically unanswered over the years, which have boiled down to: I'm building a language and toolchain. How do I make my language interact well with Nix, given that I *know*, and we *prove* automatically, that certain code artifacts are reproducible.
<simpson>
And there's not yet been a good answer. FODs are a terrible answer.
<{\_\}>
setheron[discord]: Why are FOD a terrible answer ?
<{\_\}>
setheron[discord]: I think they make sense; they are very explicit about what the output hash is -- that must be stored somewhere.
<{\_\}>
setheron[discord]: otherwise ... it's not guaranteed reproducible lol.
<{\_\}>
setheron[discord]: The fact that certain artifacts double store it (i.e. rubygems) is meaningless; that's the problem bundix solves
<{\_\}>
NobbZ[discord]: A god might break once you bump injected dependencies, as they might change how bytecode is generated. Therefore it will break any override or overrideAtrrs you might want to throw at something. Therefore you don't make things FOD unless you really have to, to circumvent the sandbox
<{\_\}>
NobbZ[discord]: A FOD might break once you bump injected dependencies, as they might change how bytecode is generated. Therefore it will break any override or overrideAtrrs you might want to throw at something. Therefore you don't make things FOD unless you really have to, to circumvent the sandbox
<simpson>
Right. It's not *that* hard to prove that the compiler function from source code to bytecode is pure, but Nix doesn't understand what that proof is trying to say.
<{\_\}>
setheron[discord]: i mean it's not reproducible if the bytecode is changing lol
<{\_\}>
setheron[discord]: FOD should be for **reproducible** builds
<{\_\}>
setheron[discord]: 🙂
<simpson>
But, *is* the bytecode changing? I think that it's relatively common, at least in principle, to have bytecode compilers which only depend on the source code and the compiler; they don't require any true randomness from the OS or etc.
<simpson>
I agree with qyliss that the problem is mostly Nix-side ergonomics.