Lukas Gradl writes: > ludo@gnu.org (Ludovic Courtès) writes: > >> Lukas Gradl skribis: >> >>> ludo@gnu.org (Ludovic Courtès) writes: >>> >>>> Leo Famulari skribis: >>>> >>>>> I _think_ that `gc --references` works by querying the database for a >>>>> list of references in the store item you give it as an argument. I think >>>>> that the information in the database is created after building, by >>>>> scanning the files of the package's output in /gnu/store, looking for >>>>> strings that appear to be paths in /gnu/store. I say "I think" because I >>>>> am not sure. I don't understand that part of the code very well yet. >>>> >>>> That’s 100% correct! :-) Namely, ‘guix gc --references’ makes an RPC to >>>> the daemon, which then looks things up in the database (see the ‘Refs’ >>>> table in nix/libstore/schema.sql.) >>>> >>>> Scanning for references indeed happens at the end of a successful build, >>>> in ‘scanForReferences’ in libstore/references.cc. Since scanning is >>>> expensive (I/O-intensive), the result is stored in the database. >>> >>> Sorry, this might be a dumb question, I don't quite understand the >>> concept of these references. Why are references important? Shouldn't >>> every store item know which other store-items are related to it from the >>> "inputs"-field in its definition? Why is it necessary to keep track of >>> the references? >> >> The “references” of a store item are its run-time dependencies, a subset >> of the ‘inputs’ etc. fields, which are themselves the compile-time >> dependencies. >> >> If those run-time dependencies were not inferred automatically by the >> daemon, we’d have to maintain them individually, and this would be >> error-prone and imprecise. >> >> Run-time dependency information is what allows Guix to know which >> substitutes need to be downloaded when installing from substitutes, and >> it’s what allows the garbage collector to determine which store items >> are “live”, and which ones are not. >> > > OK, Thank you for the explanation, this makes more sense to me now! > > Best, > Lukas If you are curious, there is a more detailed explanation of "references" in Eelco Dolstra's PhD thesis, "The Purely Functional Software Deployment Model", available here: https://nixos.org/%7Eeelco/pubs/phd-thesis.pdf You'll find more information about Nix here, much of which applies to Guix also: http://nixos.org/docs/papers.html You'll find more links about Guix here: https://www.gnu.org/software/guix/contribute/ And this repo contains talks etc. about Guix: http://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/ -- Chris