Subject: Re: bug#76698: Activations interfere with each other modules

From: Ludovic Courtès <[email-masked]>
Date: Mon, 17 Mar 2025 20:55:53 +0100

Hello,

Hilton Chain <[email-masked]> skribis:

> Activation scripts are already ‘program-file’s, but unfortunately
> (gnu build activation) and (guix build utils) are implicit dependencies.  This
> is hard to change at the moment.
>
> I have sent a patch which might partially address your issue:
>
> [PATCH v2 3/3] services: activation: Continue on exceptions.
> https://issues.guix.gnu.org/73494#26
>
> It executes activation scripts by ‘invoke’, so they won't change the
> environment.

Activation snippets all run in the same Guile process so far, mostly out
of a concern to be more efficient than running each one in a separate
process as you suggest.

The downside is what Tomas found out: the load path is global to the
entire set of activation snippets.

Now, maybe we could have the best of both worlds: instead of
‘activation-script’ doing

  (for-each primitive-load '#$actions)

it could do something like:

  (for-each (lambda (action)
              (guard …   ;like Hilton suggests
                (save-module-excursion
                  (lambda ()
                    (set-current-module (resolve-module '(guile-user)))
                    (primitive-load action)))))
            '#$actions)

Thoughts?

Ludo’.