Subject: bug#20272: Support reproducible builds

From: [email-masked] (Ludovic Courtès)
Date: Wed, 14 Dec 2016 17:25:38 +0100

Hello Jan!

Jan Nieuwenhuizen <[email-masked]> skribis:

> I have been building quite some versions of Guile the past week.  There
> re a couple of .go files that keep giving me problems wrt
> nondeterminism:
>
>     web/server/http.go
>
> (define *timer* (gettimeofday)) seemed suspect, but seems harmless.
>
>     rnrs/arithmetic/fixnums.go
>
> make-implementation-restriction-violation seemed suspect, but commenting
> it out does not seem to help.
>
> After commenting out all of http.scm and fixnums.scm, yesterday I had 3
> Guix builds on two machines (GuixSD and one Ubuntu+Guix) that were
> bit-identical, but one build showed differences in
>
>     system/repl/commands.go
>
> Apparently most of the time this file builds deterministicly, but some
> times it does not!?  Ideas?

Did you look at these differences with diffoscope?  That would be
useful.

> In the mean time, one more obviously correct and trivial patch attatched
> that removes a build time stamp.

I’ve committed something similar but that honors ‘SOURCE_DATE_EPOCH’.
So by default there’s no difference compared to the previous behavior,
but if ‘SOURCE_DATE_EPOCH’ is given, then it is used as the build date.

Thanks!

Ludo’.