Bug#1131136: sysvinit-utils does not need to be in Essential set

Gioele Barabucci gioele at svario.it
Fri Apr 17 22:34:31 BST 2026


On 17/04/26 17:48, Mark Hindley wrote:
> On Thu, Apr 16, 2026 at 12:02:26PM +0200, Gioele Barabucci wrote:
>> Hi, any feedback on this plan?
> 
> There have been some discussions and there is uncertainty that your proposed
> migration covers all the necessary angles.

Hi, thanks for taking the time to evaluate my proposal and draft such a 
detailed response!

Before addressing your comments I would like to remind you that removing 
Essential:yes is only the first step of the process. I'll focus on it in 
this reply, but the whole process described in my original email is what 
should be agreed upon.

> Quoting from your original email:
> 
>> The Essential bit can be removed because, after years of work, no
>> package make use of `pidof` in their maintscripts. (Except 5 low-popcon
>> packages for which patches and bug reports has already been submitted.)
> 
> This doesn't cover runtime users of pidof or init-d-script.

Right. But keep in mind that these are two different use cases, to be 
discussed and treated differently.

> So, currently no callers of pidof or init-d-script should declare an unversioned
> Depends: sysvinit-utils.

Right.

> But, by removing the Essential bit, all users of pidof or init-d-script (not
> just maintscript users) will immediately become RC buggy by failing to comply
> with the Policy requirement that
> 
>    Every package must specify the dependency information about other packages
>    that are required for the first to work correctly.

Not exactly. Not if I've done my homework correctly. Maybe I'm 
overlooking something. Please poke holes in my reasoning.

There are three categories of pidof-using packages:

pidof0. use pidof in their maintscripts;
pidof1. use pidof in their init.d scripts;
pidof2. use pidof at runtime.

(Obviously some packages belong to more than one category.)

Category pidof0 is now empty (OK, there are at the moment 4 low-popcon 
packages left. They will be NMUed before Essential is removed), so we 
ignore it for the rest of this discussion.

Then there are two init systems:

init1. sysvinit
init2. systemd

(For the sake of the following analysis, all other init systems can be 
grouped into init1 with minor or no changes.)

So in total we have to understand what happens in four scenarios:

A = pidof1 + init1
B = pidof1 + init2
C = pidof2 + init1
D = pidof2 + init2

# Scenario A (pidof in init.d-script, sysvinit)

All sysvinit systems have sysvinit-core, which ships /sbin/init. 
sysvinit-core hard-depends on sysvinit-utils (currently for min-version 
reasons, but that constraint can be removed and the dependency left in 
place).

This means that whenever an init.d-script will actually be run, it will 
surely find sysvinit-utils  in place (and thus also pidof).

Removing the Essential bit will have no effect in this scenario.

# Scenario B (pidof in init.d-script, systemd)

sysvinit-utils may or may not be installed, but no init.d script will 
actually be run at runtime. (I checked: none of the pidof-using 
init.d-scripts are used inside systemd service units in Exec*= lines. I 
checked manually, so there may be mistakes, but we are talking about a 
handful of packages at worst.)

Removing the Essential bit will have no effect in this scenario.

# Scenario C (pidof at runtime, sysvinit)

Like scenario A: sysvinit users always have sysvinit-utils installed, so 
the programs will always have pidof available at runtime.

Removing the Essential bit will have no effect in this scenario.

# Scenario D (pidof at runtime, systemd)

This is the one scenario that needs careful handling.

Theoretically and strictly speaking, without an explicit dependency on 
sysvinit-utils, packages that use pidof at runtime will break in some 
way. And be RC-buggy because of a missing dependency. This is why a MBF 
is needed.

However, a future sysvinit-utils without Essential: yes will still have 
Priority: required. This means that, in practice, debian-installer 
(through debootstrap) will still install sysvinit-utils an all systems 
because of its Priority, even if it is not Essential. It will also be 
kept during updates.

What about removals? Policy states:

> Packages which are necessary for the proper functioning of the system
> (usually, this means that dpkg functionality depends on these
> packages). Removing a required package may cause your system to
> become totally broken and you may not even be able to use dpkg to put
> things back, so only do so if you know what you are doing.
So if a user actively _removes_ sysvinit-utils and some package on their 
system break, then they cannot complain. Same for systems created using 
tools like mmdebstrap by forcing a minimal selection of packages. (But I 
don't really like this attitude, so please keep reading and we will deal 
with this.)

So, in this scenario removing Essential may cause some breakage. But, in 
practice, no normal user will see it. (I can tell you as use of 
mmdebstrap+custom package sets, that there similar breakages are 
constantly present.) It will also make the package theoretically 
RC-buggy, but once the MBF and the transition to procps is over, then 
everything will be as good as before (actually better because there will 
be an explicit documentation of the use of pidof via Depends:).

> The consensus from the discussions we have had so far is that it would be best
> to add Depends: sysvinit-utils where required *before* removing its Essential
> bit to avoid any time where the necessary dependencies are not declared.

That is the aim of the MBF proposed as step 1 of the follow-up plan 
described in the first mail of this bug report: to tell all affected 
packages to add a dependency to the package with pidof. These bug 
reports can later be turned into RC-severity bugs for the last 
stragglers. However, going forward it makes little sense to use pidof 
from sysvinit-utils, Debian should rather use the one from procps. So, 
to avoid having to later change those dependencies from sysvinit-utils 
to procps, the MBF should directly suggest switching to procps.

The cool thing is that, in practice, we don't need the MBF to be over to 
remove Essential from sysvinit-utils. sysvinit-utils is Priority: 
required, procps is Priority: important, so both packages are already 
installed on all normal systems. Adding these explicit dependencies is 
only needed, in practice, to accommodate users of custom installation 
methods like mmdebstrap.

> There is also an issue that the commandline options of procps' pidof are not
> identical. Are you sure there are no runtime users of pidof that rely on the
> current semantics?

I would not worry about this. Upstreams that call pidof at runtime do 
not know which implementation is going to be executed. And given that no 
other big distro ships pidof from sysvinit we can be pretty sure that 
all upstream usages of pidof are compatible with procps. Same for 
upstream-provided init.d-scripts.

Regards,

-- 
Gioele Barabucci



More information about the Debian-init-diversity mailing list