Hi, Attila Lendvai skribis: > start GEXP's of services are loaded into unnamed modules. the definitions from (shepherd support) are visible in these unnamed modules. see the attached rerpoducer. It’s more than (shepherd support): --8<---------------cut here---------------start------------->8--- shepherd[1]: Starting service reproducer... shepherd[1]: *** reproducer gexp speaking, current module: #, mor face (oop goops) 7f2cf8a89c80> # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #), ringbuffer: # --8<---------------cut here---------------end--------------->8--- > is this indended? i.e. part of the shepherd API? It’s not really intended. In Guix, ‘shepherd-service’ instances have a ‘modules’ field. Many, like the one for mcron, have (shepherd support) there because they need it for one thing or another. Now, your ‘reproducer’ service has a default ‘modules’ field so why does it see those modules anyway? First, note that (current-module) called from the ‘start’ method does *not* return the module where that ‘start’ method was defined. Still, what we see here is that the module in which the shepherd config file is evaluated has way more imports than expected. This stems from the way services get loaded on Guix System, in ‘shepherd-configuration-file’: (register-services (parameterize ((current-warning-port (%make-void-port "w"))) (map load-compiled '#$(map scm->go files)))) Thus, each one of ‘files’ augments the imports of the current module, eventually leading to this import soup. This is a Guix bug we can fix by loading each service file in a fresh module: