[rb-general] auto-analyzing indeterminism
Ximin Luo
infinity0 at debian.org
Fri Sep 22 19:17:00 CEST 2017
Bernhard M. Wiedemann:
> On 2017-07-18 15:00, Ximin Luo wrote:
>> Very nice! Could you explain a bit how your "bisect" algorithm works? I'm not very good at reading perl..
>>
>> Does "0 0 1 0 1 0" mean the package was unreproducible with either
>>
>> - only the third variation, or
>> - only the fifth variation,
>
> Yes.
> It was reproducible when omitting the third and fifth variation together.
>
> In general 0 here means we apply more variation (=disabled tweak to
> reduce indeterminism) and 1 means less variation (=enabled tweak).
>
> So packages that are already fully reproducible get a result of
> 0 0 0 0 0 0
> and packages that remain unreproducible even with all tweaks applied get
> 1 1 1 1 1 1
>
> My 'stupid_bisect' algorithm implemented atm, starts with
> $cur = $max = 1 1 1 1 1 1
> goes through the list of tweaks (from right to left), disables one bit,
> and if it finds that the package stops building reproducibly, it keeps
> the tweak-bit on for the following loop iteration.
>
>
> Since the tweaks are not fully orthogonal, ordering has a slight
> influence. E.g. a man-page date could be normalized by using my
> reproducible-faketools-date, by not varying the build VM's date or by
> applying strip-nondeterminism (not sure here) so only 1 bit might remain
> set (the leftmost one).
>
>> So I was leaning towards just testing {1}, {2}, {3}, ... etc each individually. I'm not sure if that's what you implemented though.
>
> it is similar to that.
>
I've implemented this algorithm in reprotest git, people can try it out with:
$ reprotest --diffoscope-arg=--exclude-directory-metadata --auto-build 'env > lol' lol
X
--
GPG: ed25519/56034877E1F87C35
GPG: rsa4096/1318EFAC5FBBDBCE
https://github.com/infinity0/pubkeys.git
More information about the rb-general
mailing list