unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.)
       [not found]           ` <87o7p94yqk.fsf@gmail.com>
@ 2023-03-03 19:21             ` Tobias Geerinckx-Rice
  2023-03-04  3:44               ` The package/inherit trap Maxim Cournoyer
                                 ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Tobias Geerinckx-Rice @ 2023-03-03 19:21 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: Simon Tournier, Guix Devel

[-- Attachment #1: Type: text/plain, Size: 1194 bytes --]

Hi!

Maxim Cournoyer 写道:
> Simon Tournier <zimon.toutoune@gmail.com> writes:
>> It is not clear for me why you choose one over the other.  From 
>> my
>> current understanding, I would be tempted to always use
>> 'package/inherit' and never plain 'inherit'.
>
> I also got confused by that in the past;

Same.  I think it's a rite of passage.  A questionable one.

> The way I process it internally now is this:
>
> If the inheritance is for *same-source/same-version* variants of 
> a
> package, they should use package/inherit, as any security issues 
> found
> in the parent package should also be applied to that package 
> (since they
> use the same source).  Otherwise, plain 'inherit' should be used
> (e.g. for newer version variants).

That about jives with my intuition.

Judging by the (IMO) universal confusion this causes, it is (IMO) 
spectacularly poorly-named.  A docstring doesn't fix that.

Could we rename it to something like 
‘package+replacements/inherit’?  To me, that captures the spirit, 
without being overly longer.

But I'll gladly judge other bikesheds if they lead to a less 
misleading name.

Kind regards,

T G-R

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-03 19:21             ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Tobias Geerinckx-Rice
@ 2023-03-04  3:44               ` Maxim Cournoyer
  2023-03-07 11:46               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Simon Tournier
  2023-08-07  0:00               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) (
  2 siblings, 0 replies; 16+ messages in thread
From: Maxim Cournoyer @ 2023-03-04  3:44 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice; +Cc: Simon Tournier, Guix Devel

Hi,

Tobias Geerinckx-Rice <me@tobias.gr> writes:

> Hi!
>
> Maxim Cournoyer 写道:
>> Simon Tournier <zimon.toutoune@gmail.com> writes:
>>> It is not clear for me why you choose one over the other.  From my
>>> current understanding, I would be tempted to always use
>>> 'package/inherit' and never plain 'inherit'.
>>
>> I also got confused by that in the past;
>
> Same.  I think it's a rite of passage.  A questionable one.
>
>> The way I process it internally now is this:
>>
>> If the inheritance is for *same-source/same-version* variants of a
>> package, they should use package/inherit, as any security issues
>> found
>> in the parent package should also be applied to that package (since
>> they
>> use the same source).  Otherwise, plain 'inherit' should be used
>> (e.g. for newer version variants).
>
> That about jives with my intuition.
>
> Judging by the (IMO) universal confusion this causes, it is (IMO)
> spectacularly poorly-named.  A docstring doesn't fix that.
>
> Could we rename it to something like ‘package+replacements/inherit’?
> To me, that captures the spirit, without being overly longer.

That'd be better, I think.  The more verbose name at least wouldn't let
one think, 'oh, some questionable syntax sugar for the lazy', like I did
in the past :-).

-- 
Thanks,
Maxim


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.)
  2023-03-03 19:21             ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Tobias Geerinckx-Rice
  2023-03-04  3:44               ` The package/inherit trap Maxim Cournoyer
@ 2023-03-07 11:46               ` Simon Tournier
  2023-03-07 16:43                 ` The package/inherit trap Maxim Cournoyer
  2023-08-07  0:00               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) (
  2 siblings, 1 reply; 16+ messages in thread
From: Simon Tournier @ 2023-03-07 11:46 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice, Maxim Cournoyer; +Cc: Guix Devel

Hi,

On Fri, 03 Mar 2023 at 20:21, Tobias Geerinckx-Rice <me@tobias.gr> wrote:

> Could we rename it to something like 
> ‘package+replacements/inherit’?  To me, that captures the spirit, 
> without being overly longer.

Well, I gave a look at the code and have seen the replacement.  But I
had not thought about the package transformation and the like.

From my point of view, the best would to add a paragraph with index
entries under “Defining-Package-Variants” section [1].

However, in the light of Maxim’s explanations, the example from the
manual appears to me inconsistent:

--8<---------------cut here---------------start------------->8---
You can just as well define variants with a different set of
dependencies than the original package.  For example, the default
@code{gdb} package depends on @code{guile}, but since that is an
optional dependency, you can define a variant that removes that
dependency like so:

@lisp
(use-modules (gnu packages gdb))   ;for 'gdb'

(define gdb-sans-guile
  (package
    (inherit gdb)
    (inputs (modify-inputs (package-inputs gdb)
              (delete "guile")))))
@end lisp
--8<---------------cut here---------------end--------------->8---

Well, since the trap is not completely clear for me yet, I am not able
to propose a paragraph.  IMHO, a paragraph here would help in mitigating
the trap.  Whatever the name of ’package/inherit’. :-)

1: <https://guix.gnu.org/manual/devel/en/guix.html#Defining-Package-Variants>


Cheers,
simon



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-07 11:46               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Simon Tournier
@ 2023-03-07 16:43                 ` Maxim Cournoyer
  2023-03-07 17:46                   ` Simon Tournier
  0 siblings, 1 reply; 16+ messages in thread
From: Maxim Cournoyer @ 2023-03-07 16:43 UTC (permalink / raw)
  To: Simon Tournier; +Cc: Tobias Geerinckx-Rice, Guix Devel

Hi Simon,

Simon Tournier <zimon.toutoune@gmail.com> writes:

> Hi,
>
> On Fri, 03 Mar 2023 at 20:21, Tobias Geerinckx-Rice <me@tobias.gr> wrote:
>
>> Could we rename it to something like 
>> ‘package+replacements/inherit’?  To me, that captures the spirit, 
>> without being overly longer.
>
> Well, I gave a look at the code and have seen the replacement.  But I
> had not thought about the package transformation and the like.
>
> From my point of view, the best would to add a paragraph with index
> entries under “Defining-Package-Variants” section [1].
>
> However, in the light of Maxim’s explanations, the example from the
> manual appears to me inconsistent:
>
> You can just as well define variants with a different set of
> dependencies than the original package.  For example, the default
> @code{gdb} package depends on @code{guile}, but since that is an
> optional dependency, you can define a variant that removes that
> dependency like so:
>
> @lisp
> (use-modules (gnu packages gdb))   ;for 'gdb'
>
> (define gdb-sans-guile
>   (package
>     (inherit gdb)
>     (inputs (modify-inputs (package-inputs gdb)
>               (delete "guile")))))
> @end lisp

Do you mean inconsistent because based on what I wrote it should have
used "package/inherit gdb ..." instead of (package (inherit gdb) ...) ?
If so, I agree.  It could be modified to use the former and an extra
explanation offered about why package/inherit is used here when it's to
be preferred to plain inheritance.

-- 
Thanks,
Maxim


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-07 16:43                 ` The package/inherit trap Maxim Cournoyer
@ 2023-03-07 17:46                   ` Simon Tournier
  2023-03-07 22:11                     ` Tobias Geerinckx-Rice
  0 siblings, 1 reply; 16+ messages in thread
From: Simon Tournier @ 2023-03-07 17:46 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: Tobias Geerinckx-Rice, Guix Devel

Hi Maxim,

On Tue, 07 Mar 2023 at 11:43, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:

>> @lisp
>> (use-modules (gnu packages gdb))   ;for 'gdb'
>>
>> (define gdb-sans-guile
>>   (package
>>     (inherit gdb)
>>     (inputs (modify-inputs (package-inputs gdb)
>>               (delete "guile")))))
>> @end lisp
>
> Do you mean inconsistent because based on what I wrote it should have
> used "package/inherit gdb ..." instead of (package (inherit gdb) ...) ?

Based on my understanding about what you wrote.

> If so, I agree.  It could be modified to use the former and an extra
> explanation offered about why package/inherit is used here when it's to
> be preferred to plain inheritance.

Well, from my point of view, we have a trap because the documentation is
not clear. :-)

Well, I think it is not only by replacing in the example.  I think the
manual should provide 2 examples and makes a clear line when one needs
to pick ’inherit’ or when one needs to pick ’package/inherit’.

Somehow, we have a similar issue as we had before with “Snippet vs
Phases“.  It would help to have plain words for ’package/inherit’ use
cases; assuming all the other use cases are covered by ’inherit’. ;-)

Cheers,
simon


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-07 17:46                   ` Simon Tournier
@ 2023-03-07 22:11                     ` Tobias Geerinckx-Rice
  2023-03-08  9:07                       ` Simon Tournier
  0 siblings, 1 reply; 16+ messages in thread
From: Tobias Geerinckx-Rice @ 2023-03-07 22:11 UTC (permalink / raw)
  To: Simon Tournier, Maxim Cournoyer; +Cc: Guix Devel

Hi,

On 7 March 2023 17:46:50 UTC, Simon Tournier <zimon.toutoune@gmail.com> wrote:
>Well, from my point of view, we have a trap because the documentation is
>not clear. :-)

Both.

However, merely documenting something is not enough when we have the chance to fix misleading naming, as we do here.  It would be nice to have, but orthogonal.



Kind regards,

T G-R

Sent on the go.  Excuse or enjoy my brevity.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-07 22:11                     ` Tobias Geerinckx-Rice
@ 2023-03-08  9:07                       ` Simon Tournier
  2023-07-31 20:17                         ` John Kehayias
  2023-08-06 23:10                         ` Mark H Weaver
  0 siblings, 2 replies; 16+ messages in thread
From: Simon Tournier @ 2023-03-08  9:07 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice, Maxim Cournoyer; +Cc: Guix Devel

Hi Tobias,

On Tue, 07 Mar 2023 at 22:11, Tobias Geerinckx-Rice <me@tobias.gr> wrote:

> However, merely documenting something is not enough when we have the
> chance to fix misleading naming, as we do here.  It would be nice to
> have, but orthogonal. 

I would not say it is orthogonal because renaming would not have been
enough, at least for me, in order to get the difference with ’inherit’.

For sure, it is a real trap. :-)  For instance,

    $ git log --grep='package/inherit' --oneline | grep use
    5f83dd03a2 gnu: kodi/wayland: Do not use package/inherit.
    6ecf88a6a1 gnu: poppler-next: Don't use 'package/inherit'.
    5a5b729d66 gnu: abseil-cpp: Don't use 'package/inherit'.
    dbcf2b61b1 gnu: Fix erroneous uses of 'package/inherit'.
    2f97a666a5 gnu: python-urllib3: Don't use 'package/inherit' on replacement package.
    4163b6d855 gnu: avahi: Don't use package/inherit.

and in the light of this discussion, 5f83dd03a2 seems incorrect, no?

Well, I agree that naming is important and probably the most difficult
task. :-)

Do we go for renaming + deprecated?  Then do we apply the rename to all
occurrences in Guix?

Cheers,
simon


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-08  9:07                       ` Simon Tournier
@ 2023-07-31 20:17                         ` John Kehayias
  2023-08-06 23:10                         ` Mark H Weaver
  1 sibling, 0 replies; 16+ messages in thread
From: John Kehayias @ 2023-07-31 20:17 UTC (permalink / raw)
  To: Simon Tournier; +Cc: Tobias Geerinckx-Rice, Maxim Cournoyer, guix-devel

Hi all,

On Wed, Mar 08, 2023 at 10:07 AM, Simon Tournier wrote:

> Hi Tobias,
>
> On Tue, 07 Mar 2023 at 22:11, Tobias Geerinckx-Rice <me@tobias.gr> wrote:
>
>> However, merely documenting something is not enough when we have the
>> chance to fix misleading naming, as we do here.  It would be nice to
>> have, but orthogonal.
>
> I would not say it is orthogonal because renaming would not have been
> enough, at least for me, in order to get the difference with ’inherit’.
>
> For sure, it is a real trap. :-)  For instance,
>
>     $ git log --grep='package/inherit' --oneline | grep use
>     5f83dd03a2 gnu: kodi/wayland: Do not use package/inherit.
>     6ecf88a6a1 gnu: poppler-next: Don't use 'package/inherit'.
>     5a5b729d66 gnu: abseil-cpp: Don't use 'package/inherit'.
>     dbcf2b61b1 gnu: Fix erroneous uses of 'package/inherit'.
>     2f97a666a5 gnu: python-urllib3: Don't use 'package/inherit' on replacement package.
>     4163b6d855 gnu: avahi: Don't use package/inherit.
>
> and in the light of this discussion, 5f83dd03a2 seems incorrect, no?
>
> Well, I agree that naming is important and probably the most difficult
> task. :-)
>
> Do we go for renaming + deprecated?  Then do we apply the rename to all
> occurrences in Guix?
>
> Cheers,
> simon

I know, reviving an old thread but I assume this wasn't resolved?
Throw my vote for the more explicit renaming with better doc/examples,
as one who never remembers the difference either.

John



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-03-08  9:07                       ` Simon Tournier
  2023-07-31 20:17                         ` John Kehayias
@ 2023-08-06 23:10                         ` Mark H Weaver
  2023-08-07 14:41                           ` Maxim Cournoyer
  1 sibling, 1 reply; 16+ messages in thread
From: Mark H Weaver @ 2023-08-06 23:10 UTC (permalink / raw)
  To: Simon Tournier, Tobias Geerinckx-Rice, Maxim Cournoyer; +Cc: Guix Devel

Simon Tournier <zimon.toutoune@gmail.com> writes:

> Hi Tobias,
>
> On Tue, 07 Mar 2023 at 22:11, Tobias Geerinckx-Rice <me@tobias.gr> wrote:
>
>> However, merely documenting something is not enough when we have the
>> chance to fix misleading naming, as we do here.  It would be nice to
>> have, but orthogonal. 
>
> I would not say it is orthogonal because renaming would not have been
> enough, at least for me, in order to get the difference with ’inherit’.
>
> For sure, it is a real trap. :-)  For instance,
>
>     $ git log --grep='package/inherit' --oneline | grep use
>     5f83dd03a2 gnu: kodi/wayland: Do not use package/inherit.
>     6ecf88a6a1 gnu: poppler-next: Don't use 'package/inherit'.
>     5a5b729d66 gnu: abseil-cpp: Don't use 'package/inherit'.
>     dbcf2b61b1 gnu: Fix erroneous uses of 'package/inherit'.
>     2f97a666a5 gnu: python-urllib3: Don't use 'package/inherit' on replacement package.
>     4163b6d855 gnu: avahi: Don't use package/inherit.
>
> and in the light of this discussion, 5f83dd03a2 seems incorrect, no?

I agree that commit 5f83dd03a2 is incorrect.  'kodi/wayland' is quite
clearly a case where 'package/inherit' should be used.

       Mark


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.)
  2023-03-03 19:21             ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Tobias Geerinckx-Rice
  2023-03-04  3:44               ` The package/inherit trap Maxim Cournoyer
  2023-03-07 11:46               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Simon Tournier
@ 2023-08-07  0:00               ` (
  2023-08-07  6:29                 ` Attila Lendvai
  2 siblings, 1 reply; 16+ messages in thread
From: ( @ 2023-08-07  0:00 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice; +Cc: Maxim Cournoyer, Simon Tournier, guix-devel

Tobias Geerinckx-Rice <me@tobias.gr> writes:
> But I'll gladly judge other bikesheds if they lead to a less misleading name.

How about 'package/variant' or 'package/variant-of'?

  -- (


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.)
  2023-08-07  0:00               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) (
@ 2023-08-07  6:29                 ` Attila Lendvai
  2023-08-07 14:43                   ` The package/inherit trap Maxim Cournoyer
  0 siblings, 1 reply; 16+ messages in thread
From: Attila Lendvai @ 2023-08-07  6:29 UTC (permalink / raw)
  To: (; +Cc: Tobias Geerinckx-Rice, Maxim Cournoyer, Simon Tournier,
	guix-devel

> How about 'package/variant' or 'package/variant-of'?

+1 for trying to capture the intention in the name, instead of the means of implementation.

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“Although teachers do care and do work very, very hard, the institution is psychopathic-it has no conscience. It rings a bell and the young man in the middle of writing a poem must close his notebook and move to a different cell where he must memorize that humans and monkeys derive from a common ancestor.”
	— John Taylor Gatto (1935–2018), 'Dumbing Us Down: The Hidden Curriculum of Compulsory Education' (1992)



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-08-06 23:10                         ` Mark H Weaver
@ 2023-08-07 14:41                           ` Maxim Cournoyer
  2023-08-10 20:40                             ` Mark H Weaver
  0 siblings, 1 reply; 16+ messages in thread
From: Maxim Cournoyer @ 2023-08-07 14:41 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: Simon Tournier, Tobias Geerinckx-Rice, Guix Devel

Hello,

Mark H Weaver <mhw@netris.org> writes:

> Simon Tournier <zimon.toutoune@gmail.com> writes:
>
>> Hi Tobias,
>>
>> On Tue, 07 Mar 2023 at 22:11, Tobias Geerinckx-Rice <me@tobias.gr> wrote:
>>
>>> However, merely documenting something is not enough when we have the
>>> chance to fix misleading naming, as we do here.  It would be nice to
>>> have, but orthogonal. 
>>
>> I would not say it is orthogonal because renaming would not have been
>> enough, at least for me, in order to get the difference with ’inherit’.
>>
>> For sure, it is a real trap. :-)  For instance,
>>
>>     $ git log --grep='package/inherit' --oneline | grep use
>>     5f83dd03a2 gnu: kodi/wayland: Do not use package/inherit.
>>     6ecf88a6a1 gnu: poppler-next: Don't use 'package/inherit'.
>>     5a5b729d66 gnu: abseil-cpp: Don't use 'package/inherit'.
>>     dbcf2b61b1 gnu: Fix erroneous uses of 'package/inherit'.
>>     2f97a666a5 gnu: python-urllib3: Don't use 'package/inherit' on replacement package.
>>     4163b6d855 gnu: avahi: Don't use package/inherit.
>>
>> and in the light of this discussion, 5f83dd03a2 seems incorrect, no?
>
> I agree that commit 5f83dd03a2 is incorrect.  'kodi/wayland' is quite
> clearly a case where 'package/inherit' should be used.

Would you be able to write a bit of doc explaining when both should be
used?  It's a common pitfalls among contributors, and I suspect few of
us have an understanding good enough to write it down in a manner clear
enough to be understood by new contributors.

-- 
Thanks,
Maxim


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-08-07  6:29                 ` Attila Lendvai
@ 2023-08-07 14:43                   ` Maxim Cournoyer
  0 siblings, 0 replies; 16+ messages in thread
From: Maxim Cournoyer @ 2023-08-07 14:43 UTC (permalink / raw)
  To: Attila Lendvai; +Cc: (, Tobias Geerinckx-Rice, Simon Tournier, guix-devel

Hi,

Attila Lendvai <attila@lendvai.name> writes:

>> How about 'package/variant' or 'package/variant-of'?
>
> +1 for trying to capture the intention in the name, instead of the means of implementation.

I like 'package/variant'.  It should be possible to automatically update
our code base to use it, and deprecate the legacy name.

-- 
Thanks,
Maxim


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-08-07 14:41                           ` Maxim Cournoyer
@ 2023-08-10 20:40                             ` Mark H Weaver
  2023-08-10 21:27                               ` Mark H Weaver
  2023-09-02 18:46                               ` Maxim Cournoyer
  0 siblings, 2 replies; 16+ messages in thread
From: Mark H Weaver @ 2023-08-10 20:40 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: Simon Tournier, Tobias Geerinckx-Rice, Guix Devel

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> Mark H Weaver <mhw@netris.org> writes:
>
>> Simon Tournier <zimon.toutoune@gmail.com> writes:
>>> and in the light of this discussion, 5f83dd03a2 seems incorrect, no?
>>
>> I agree that commit 5f83dd03a2 is incorrect.  'kodi/wayland' is quite
>> clearly a case where 'package/inherit' should be used.
>
> Would you be able to write a bit of doc explaining when both should be
> used?  It's a common pitfalls among contributors, and I suspect few of
> us have an understanding good enough to write it down in a manner clear
> enough to be understood by new contributors.

I don't have time to write the doc, but I can offer a few words here.

The fundamental question that needs to be asked, to decide whether to
write (define DERIVED-PACKAGE (package/inherit BASE OVERRIDES ...)) or
(define DERIVED-PACKAGE (package (inherit BASE) OVERRIDES ...)) is this:
if BASE had a replacement, would it make sense to apply the same
OVERRIDES to BASE's replacement to automatically create a replacement
for DERIVED-PACKAGE?

Consider 'kodi/wayland' as an example:

__ (define-public kodi/wayland
____ (package
______ (inherit kodi)
______ (name "kodi-wayland")
______ (arguments
_______ (substitute-keyword-arguments (package-arguments kodi)
_________ ((#:configure-flags flags)
__________ `(cons "-DCORE_PLATFORM_NAME=wayland"
_________________ (delete "-DCORE_PLATFORM_NAME=x11" ,flags)))))
______ (inputs
_______ (modify-inputs (package-inputs kodi)
_________ (prepend libinput
__________________ libxkbcommon
__________________ waylandpp
__________________ wayland-protocols)))
______ (synopsis "Kodi with Wayland rendering backend")))

Suppose, at some future time, 'kodi' were given a replacement named
'kodi-with-fixes' to apply a security update.

The question to ask yourself is this: would it make sense for
'kodi/wayland' to automatically be given a replacement field defined
exactly as above except with (inherit kodi) changed to (inherit
kodi-with-fixes)?

If the answer is "yes", then use (package/inherit BASE OVERRIDES ...),
and make sure that BASE is simply a variable name.

If the answer is "no", use (package (inherit BASE) OVERRIDES ...), in
which case any replacement of BASE will simply be dropped, and the new
package will not have a replacement unless one is explicitly given in
OVERRIDES.

The rationale for 'package/inherit' is to ensure that, e.g., security
updates applied to 'kodi' will automatically be propagated to
'kodi/wayland', and similarly for other packages.

Unless I'm mistaken, the criterion given above is fully general, and
thus sufficient on its own.  However, for the sake of reducing the
cognitive load on contributors, one could proceed to enumerate simpler
heuristics that can be used in common cases.

For example, if OVERRIDES includes a new 'source' field, the next
question to ask is: does the new 'source' field make an incremental
change to (package-source BASE) e.g. by simply adding another patch?  If
so, then 'package/inherit' might do the right thing.  However, if the
new 'source' field doesn't even look at (package-source BASE), then it's
certainly not going to work sensibly when applied to BASE's replacement.

Another common case is when the package you're defining *is* BASE's
replacement.  In that case, you certainly don't want to use
'package/inherit'.

If you want to rename 'package/inherit', I'd suggest something like
'package/inherit-with-replacements'.

Hope this helps.  Feel free to do as you wish without consulting me
further.  I'm using a private branch that hasn't been merged with
upstream Guix since April 2021, so your decisions won't affect me
in any case.

      Mark


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-08-10 20:40                             ` Mark H Weaver
@ 2023-08-10 21:27                               ` Mark H Weaver
  2023-09-02 18:46                               ` Maxim Cournoyer
  1 sibling, 0 replies; 16+ messages in thread
From: Mark H Weaver @ 2023-08-10 21:27 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: Simon Tournier, Tobias Geerinckx-Rice, Guix Devel

Hello again,

I made a mistake in my previous message.

Earlier, I wrote:
> Consider 'kodi/wayland' as an example:
>
> __ (define-public kodi/wayland
> ____ (package
> ______ (inherit kodi)
> ______ (name "kodi-wayland")
> ______ (arguments
> _______ (substitute-keyword-arguments (package-arguments kodi)
> _________ ((#:configure-flags flags)
> __________ `(cons "-DCORE_PLATFORM_NAME=wayland"
> _________________ (delete "-DCORE_PLATFORM_NAME=x11" ,flags)))))
> ______ (inputs
> _______ (modify-inputs (package-inputs kodi)
> _________ (prepend libinput
> __________________ libxkbcommon
> __________________ waylandpp
> __________________ wayland-protocols)))
> ______ (synopsis "Kodi with Wayland rendering backend")))
>
> Suppose, at some future time, 'kodi' were given a replacement named
> 'kodi-with-fixes' to apply a security update.
>
> The question to ask yourself is this: would it make sense for
> 'kodi/wayland' to automatically be given a replacement field defined
> exactly as above except with (inherit kodi) changed to (inherit
> kodi-with-fixes)?

The above paragraph isn't quite right.  It should be:

> The question to ask yourself is this: would it make sense for
> 'kodi/wayland' to automatically be given a replacement field defined
> exactly as above except with all free references to 'kodi' within the
> 'package' (or 'package/inherit') form changed to 'kodi-with-fixes'?

Alternatively, for the sake of those who don't know what it means for a
variable reference to be "free" within a given expression, here's
another way to write it:

> The question to ask yourself is this: would it make sense for
> 'kodi/wayland' to automatically be given a replacement field defined
> exactly as above except with the 'package' (or 'package/inherit') form
> wrapped within (let ((kodi kodi-with-fixes)) ...).

This point is crucial.  Observe that in the 'kodi/wayland' definition,
the OVERRIDES for the 'arguments' and 'inputs' fields are defined as
incremental changes to (package-arguments kodi) and (package-inputs
kodi), respectively.

In order for (package/inherit BASE OVERRIDES ...) to work as intended,
the incremental changes made in OVERRIDES should be based upon the
variable BASE, because that is the only variable that will be rebound to
(package-replacement BASE) when automatically producing the replacement
for the derived package.

      Regards,
        Mark


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: The package/inherit trap
  2023-08-10 20:40                             ` Mark H Weaver
  2023-08-10 21:27                               ` Mark H Weaver
@ 2023-09-02 18:46                               ` Maxim Cournoyer
  1 sibling, 0 replies; 16+ messages in thread
From: Maxim Cournoyer @ 2023-09-02 18:46 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: Simon Tournier, Tobias Geerinckx-Rice, Guix Devel

Hi Mark,

Mark H Weaver <mhw@netris.org> writes:

[...]

> I don't have time to write the doc, but I can offer a few words here.
>
> The fundamental question that needs to be asked, to decide whether to
> write (define DERIVED-PACKAGE (package/inherit BASE OVERRIDES ...)) or
> (define DERIVED-PACKAGE (package (inherit BASE) OVERRIDES ...)) is this:
> if BASE had a replacement, would it make sense to apply the same
> OVERRIDES to BASE's replacement to automatically create a replacement
> for DERIVED-PACKAGE?
>
> Consider 'kodi/wayland' as an example:
>
> __ (define-public kodi/wayland
> ____ (package
> ______ (inherit kodi)
> ______ (name "kodi-wayland")
> ______ (arguments
> _______ (substitute-keyword-arguments (package-arguments kodi)
> _________ ((#:configure-flags flags)
> __________ `(cons "-DCORE_PLATFORM_NAME=wayland"
> _________________ (delete "-DCORE_PLATFORM_NAME=x11" ,flags)))))
> ______ (inputs
> _______ (modify-inputs (package-inputs kodi)
> _________ (prepend libinput
> __________________ libxkbcommon
> __________________ waylandpp
> __________________ wayland-protocols)))
> ______ (synopsis "Kodi with Wayland rendering backend")))
>
> Suppose, at some future time, 'kodi' were given a replacement named
> 'kodi-with-fixes' to apply a security update.
>
> The question to ask yourself is this: would it make sense for
> 'kodi/wayland' to automatically be given a replacement field defined
> exactly as above except with (inherit kodi) changed to (inherit
> kodi-with-fixes)?
>
> If the answer is "yes", then use (package/inherit BASE OVERRIDES ...),
> and make sure that BASE is simply a variable name.
>
> If the answer is "no", use (package (inherit BASE) OVERRIDES ...), in
> which case any replacement of BASE will simply be dropped, and the new
> package will not have a replacement unless one is explicitly given in
> OVERRIDES.
>
> The rationale for 'package/inherit' is to ensure that, e.g., security
> updates applied to 'kodi' will automatically be propagated to
> 'kodi/wayland', and similarly for other packages.
>
> Unless I'm mistaken, the criterion given above is fully general, and
> thus sufficient on its own.  However, for the sake of reducing the
> cognitive load on contributors, one could proceed to enumerate simpler
> heuristics that can be used in common cases.
>
> For example, if OVERRIDES includes a new 'source' field, the next
> question to ask is: does the new 'source' field make an incremental
> change to (package-source BASE) e.g. by simply adding another patch?  If
> so, then 'package/inherit' might do the right thing.  However, if the
> new 'source' field doesn't even look at (package-source BASE), then it's
> certainly not going to work sensibly when applied to BASE's replacement.
>
> Another common case is when the package you're defining *is* BASE's
> replacement.  In that case, you certainly don't want to use
> 'package/inherit'.
>
> If you want to rename 'package/inherit', I'd suggest something like
> 'package/inherit-with-replacements'.
>
> Hope this helps.  Feel free to do as you wish without consulting me
> further.  I'm using a private branch that hasn't been merged with
> upstream Guix since April 2021, so your decisions won't affect me
> in any case.

Thank you, that is abundantly detailed and clear; I'll try adapting it
in our manual.

Cheers!

-- 
Maxim


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-09-02 18:46 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20230221130600.18932-1-sharlatanus@gmail.com>
     [not found] ` <20230226004406.6215-1-sharlatanus@gmail.com>
     [not found]   ` <87ilfmhkuh.fsf_-_@gnu.org>
     [not found]     ` <87lekijcwi.fsf@gmail.com>
     [not found]       ` <87v8jixg6u.fsf@gnu.org>
     [not found]         ` <CAJ3okZ1oYVdW6R0x3u-zOGnCoSHa+RmB2w7cwsdwnpKzyXYaww@mail.gmail.com>
     [not found]           ` <87o7p94yqk.fsf@gmail.com>
2023-03-03 19:21             ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Tobias Geerinckx-Rice
2023-03-04  3:44               ` The package/inherit trap Maxim Cournoyer
2023-03-07 11:46               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) Simon Tournier
2023-03-07 16:43                 ` The package/inherit trap Maxim Cournoyer
2023-03-07 17:46                   ` Simon Tournier
2023-03-07 22:11                     ` Tobias Geerinckx-Rice
2023-03-08  9:07                       ` Simon Tournier
2023-07-31 20:17                         ` John Kehayias
2023-08-06 23:10                         ` Mark H Weaver
2023-08-07 14:41                           ` Maxim Cournoyer
2023-08-10 20:40                             ` Mark H Weaver
2023-08-10 21:27                               ` Mark H Weaver
2023-09-02 18:46                               ` Maxim Cournoyer
2023-08-07  0:00               ` The package/inherit trap (was: gnu: stellarium: Enable ShowMySky.) (
2023-08-07  6:29                 ` Attila Lendvai
2023-08-07 14:43                   ` The package/inherit trap Maxim Cournoyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).