Subject: bug#55898: Services depending on new Shepherd features may fail until reboot

From: Maxime Devos <[email-masked]>
Date: Tue, 30 Aug 2022 11:35:34 +0200

On 30-08-2022 09:33, Ludovic Courtès wrote:

> So are you suggesting replacing:
>
>    (defined? 'make-inetd-constructor)
>
> by something like:
>
>    (version<? shepherd-version "0.9.0")
>
> or is it something different that you have in mind?
>
> I’m not sure how this could improve the user experience, unless by
> “user” you mean the person writing the service?

(defined? '...) does not work in all contexts -- it works on the 
top-level, but not always inside a procedure, as it tests if the thing 
is defined in (current-module), and not whether it is defined in the 
module that calls (defined? '...).

Perhaps it works fine in the way it is used in Guix currently, but AFAIK 
it is not guaranteed anywhere. As such, I cannot recommend defined? 
here. The version<? does not have this problem.

A hypothetical defined-in-this-module macro would be ideal, but such a 
thing does not exist yet.

Greetings,
Maxime.