Hi Pierre, Pierre Neidhardt <m...@ambrevar.xyz> skribis:
> Hmm, reading myself again I realize this was poorly phrased. Allow me > to explain that again. In > > ./pre-inst-env guix gc --references > /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 > /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib > /gnu/store/a0rffysgyr66q5fjgm1iibjm4ma1jbk3-next-1.3.1-lib > /gnu/store/h2j8gy8d2yrmrklavrik1y864zg7qwqd-sbcl-1.5.6 > /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28 > /gnu/store/nq4lsyipmfb0q7g26ra45rwwqrh3x8zw-zlib-1.2.11 > /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 > > we see that next-1.3.1-lib is a dependency, which holds references to > all the other libraries. > > So my question is, why would `guix gc` collect sqlite, libfixposix, > etc. if they are indirect dependencies? > > In other words? Wasn't I right to check for dependencies with `guix > size` (or `guix gc -R`) instead of `guix gc --references`? ‘guix size’ and ‘guix gc -R’ show you the whole closure of the store item, so you might not realize that some of the things that ought to be direct dependencies are now in fact indirect dependencies. If sqlite ought to be a direct dependency and is now, in fact, an indirect dependency, things won’t break right away: sqlite won’t be deleted as long as next is live. But you’ll already run into problems: grafting will yield a broken next, as in <https://issues.guix.gnu.org/issue/33848>. Furthermore, sqlite might eventually vanish entirely from the closure of next, as a consequence of changes in a dependency, and at that point running the GC may remove sqlite and thus break next. ‘guix pack’ would also produce an incomplete pack. To draw a parallel, it’s as if SBCL’s GC were unable to see some of the pointers to the heap, unpredictably: your code might keep running for a while, but sooner or later, it’ll break badly. :-) HTH, Ludo’.