Javier Serrano Polo wrote:
> On Wed, 30 Sep 2020 18:34:06 -0700 Jonathan Nieder <jrnie...@gmail.com>
> wrote:

>> Even so, some *rough* consensus on the plan is very useful for
>> helping people evaluate that first step.
>
> Here is a rough plan:
>
>    1. Policy: Packages should declare all their dependencies, even
>       essential ones.

I agree: this is the right first step.

More specifically, it's the right first three steps.

https://www.debian.org/doc/debian-policy/ch-binary.html#dependencies
currently says

        Packages are not required to declare any dependencies they
        have on other packages which are marked Essential (see below),
        and should not do so unless they depend on a particular
        version of that package.[4]

        [4] [...] If packages add unnecessary dependencies on packages
        in this set, the chances that there will be an unresolvable
        dependency loop caused by forcing these Essential packages to
        be configured first before they need to be is greatly
        increased.

I'd propose that as a first step we change that to

        Packages are not required to declare any dependencies they
        have on other packages which are marked Essential (see below),
        but are permitted to do so even if they do not depend on a
        particular version of that package.[4]

        [4] Functionality is rarely ever removed from the Essential
        set, but packages have been removed from the Essential set
        when the functionality moved to a different package. So when
        depending on these packages for such functionality, it is
        recommended to depend on an appropriate virtual package
        instead.

        Future versions of Debian policy may encourage and then
        require including explicit dependencies even for essential
        functionality. This is helpful to users putting together
        ultra-minimal systems (though Debian does not support omitting
        Essential functionality out of the box), and it means less
        work is required in case the moment comes to remove some
        functionality from the Essential set in the future.

(The next two steps would be to change that from "are permitted" to
"should", and then to "must".)

What do you think?

Thanks,
Jonathan

[4] "Essential is needed in part to avoid unresolvable dependency loops
on upgrade. If packages add unnecessary dependencies on packages in
this set, the chances that there will be an unresolvable dependency
loop caused by forcing these Essential packages to be configured first
before they need to be is greatly increased. It also increases the
chances that frontends will be unable to calculate an upgrade path,
even if one exists.

"Also, functionality is rarely ever removed from the Essential set, but
packages have been removed from the Essential set when the
functionality moved to a different package. So depending on these
packages just in case they stop being essential does way more harm
than good."

Reply via email to