Hi Simon, zimoun skribis: > On Sun, 28 Jun 2020 at 22:29, Ludovic Courtès wrote: > >> Most likely the problem with non-reproducible .go files is that the fix >> for was incomplete. In particular, I think >> that gensyms are not reproducible when building things in parallel, >> because the gensym depends on what’s loaded vs. interpreted. > > Thank you for the pointer. > > How can I test the "hypothesis" of "building things in parallel"? > > guix describe -f channels > /tmp/chan.scm > guix pull -C /tmp/chan.scm --cores=1 -p /tmp/repull1 > > guix build --check --no-grafts --cores=1 \ > $(guix gc --derivers \ > $(readlink -f /tmp/repull1/lib/guix/package.cache)) > The following profile hook will be built: > /gnu/store/qbrgxbnx0hi13xm36a6a0zijzc1rcz22-guix-package-cache.drv I realize I was a bit off-topic: I was commenting on the more general issue of .go non-reproducibility. The problem with the package cache seems to be different. Sorry for the confusion! After --check, we can compare both caches like this: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (define a (load-compiled "/gnu/store/0yd3kaar87zyxhbrjqjypp5rar3zj4gb-guix-package-cache/lib/guix/package.cache")) scheme@(guile-user)> (define b (load-compiled "/gnu/store/0yd3kaar87zyxhbrjqjypp5rar3zj4gb-guix-package-cache-check/lib/guix/package.cache")) scheme@(guile-user)> (length a) $2 = 13949 scheme@(guile-user)> (length b) $3 = 13949 scheme@(guile-user)> ,use(srfi srfi-1) scheme@(guile-user)> (lset= equal? a b) $4 = #f scheme@(guile-user)> (car (lset-difference equal? a b)) $5 = #("python2" "2.7.17" (gnu packages python) python-2 ("out" "tk") #t #f "gnu/packages/python.scm" 107 2) --8<---------------cut here---------------end--------------->8--- So, surprisingly, it’s not just an ordering issue: the caches do contain different pieces of information. This patch solves the ordering issue: