[bootstrappable] Re: diverse double compilation: using $ORIGIN?

  • From: ludo@xxxxxxx (Ludovic Courtès)
  • To: Chris Marusich <cmmarusich@xxxxxxxxx>
  • Date: Sat, 11 Nov 2017 22:56:13 +0100

Chris Marusich <cmmarusich@xxxxxxxxx> skribis:

Ricardo Wurmus <rekado@xxxxxxxxxxx> writes:

Since the GCC build procedure is performed at least two
times (once with the bootstrap compiler, and then again with the GCC
variant this produces), the resulting GCC binaries should be identical.

Except that they are not.  One of the reasons is that the binaries
that Guix produces embed the target output directories.  This means
that the two compiler binaries that result from diverse double
compilation will *always* differ in at least the embedded paths, such
as paths to itself (e.g. to binaries in the libexec directory) and
paths to.

What ever happened to the intensional model (i.e., a content-addressed
store)?  If derivation outputs were content-addressed, this would not be
a problem, right?

Indeed.

Dolstra's thesis presented some ideas for how to rewrite self-references
in derivation outputs under the intensional model.  I've casually looked
into what happened with the intensional model since his thesis was
written, but I don't really know why it hasn't been implemented.  All I
know is that Dolstra and the Nix devs seem to have moved away from that
idea; I never really learned the reason(s) why.

One problem is that it requires 100% reproducible builds; if something
doesn’t build reproducibly, you cannot get substitutes.

Another problem is… migration.  :-)

Now, fixed-output derivations are one way to retrofit bits of the
intensional model in the extensional model.  Perhaps we could do more in
that direction?

Ludo’.


Other related posts: