Bug#727708: Call for votes on init system resolution
Steve Langasek <firstname.lastname@example.org> writes:
> So to make my position clear: L does not accurately reflect what I
> think we should be doing; but given the option between L and T, I was
> willing to vote L above FD and was not willing to vote T above FD
> because I think T unambiguously sets the stage for all other init
> systems to wither away in Debian and I think it's foolish for the TC to
> say they are "welcome" under such circumstances.
I completely understand how you would end up in that situation.
> Here's what I think is the right technical policy, that we should be
> addressing with this resolution.
> - Packages in jessie must retain compatibility with sysvinit startup
> interfaces (i.e., init scripts in /etc/init.d).
> - Packages can require other interfaces for their operation that are
> provided by an init system implementation, but which are unrelated to
> service management; however, these requirements must be expressed in a
> way that does not tie them to a single init system package. E.g., a
> package that uses the logind dbus interfaces is absolutely free to do so,
> but must not express this usage as 'Depends: systemd'.
> - The TC should make no ruling at this time regarding releases beyond
Here is the language that I came up independently of (and before) your
message, which I think demonstrates how close we actually are on this
The following is technical advice offered to the project by the
Technical Committee under section 6.1.5 of the constitution. It does
not constitute an override of maintainer decisions past or future:
Packages should normally support the default Linux init system. There
are some exceptional cases where lack of support for the default init
system may be appropriate, such as alternative init system
implementations, special-use packages such as managers for non-default
init systems, and cooperating groups of packages intended for use with
non-default init systems. However, package maintainers should be
aware that a requirement for a non-default init system will mean the
package will be unusable for most Debian users and should normally be
Package maintainers are strongly encouraged to merge any contributions
for support of init systems other than the Linux default, and to add
that support themselves if they're willing and capable of doing so.
In particular, package maintainers should put a high priority on
merging changes to support any init system which is the default on one
of Debian's non-Linux ports.
For the jessie release, all packages that currently support being run
under sysvinit should continue to support sysvinit unless there is no
technically feasible way to do so. Reasonable changes to preserve or
improve sysvinit support should be accepted through the jessie
release. There may be some loss of functionality under sysvinit if
that loss is considered acceptable by the package maintainer and the
package is still basically functional. All packages should support
smooth upgrades from wheezy to jessie, including upgrades done on a
system booted with sysvinit.
The Technical Committee offers no advice at this time on requirements
or package dependencies on specific init systems after the jessie
release. There are too many variables at this point to know what the
I think this is broadly similar to what you propose above. The
differences I can identify are:
* I don't explicitly require that all dependencies on non-init
functionality provided by the init system be redirected through a
virtual package immediately. I think this is an implementation detail;
I don't have fundamental objections to your language, but I do think
it's overspecified. I think we get to the same place with the above
advice, combined with the stronger advice for jessie.
* We deal with the question of what happens if logind without systemd
fails to materialize in slightly different ways. I approach that with
the "technically feasible" language, and you approach that by allowing
for a dependency that can only be satisfied by one package. I think
either of those are reasonable approaches. My language tries to avoid
specifying the technical solution and instead tries to state the desired
In general, I would be happy to use my language, your language, or some
merger between them. There are some things I prefer about how I put this,
but the only thing that I'd really like to change is to give the
maintainer some discretion over your first bullet. You sort of do this
already by saying "retain" rather than saying that packages must support
sysvinit, but I think I was somewhat clearer. I don't see any reason why,
say, mountall or socklog-run should be required to support sysvinit.
My statement is written using 6.1.5 because it sidesteps the whole issue
of delegations and whatnot and I think should be an entirely
uncontroversial power of the TC, and I don't think anything stronger than
advice is actually needed. If we still end up with conflicts, we can
cross that bridge when we come to it, but I don't think that's likely.
However, if people feel strongly that this should use 6.1.1 instead, I
don't think it makes a huge difference. I do think that invoking 6.1.4
would be inappropriate (and I think there's general consensus there; I
don't believe anyone is intending for us to override anyone at this
> I'm not trying to tell maintainers they can't use native service
> management interfaces to systemd or upstart post-jessie,
This is the biggest thing that bothers me about L, so that's, from my
perspective, a huge step towards something that I can get on board with.
> but I do think we need to make clear what's expected for jessie, if for
> no other reason than because of the upgrade requirements (which AIUI you
> agree with - or did, earlier in the discussion).
Yes, I completely agree with this.
> And I don't object at all to packages using logind - logind itself is a
> very good thing! - but if we actually intend to be open to alternative
> init systems, then maintainers should be expected to do the bare minimum
> of work (i.e., declaring dependencies appropriately) required to leave
> the door open for this.
I agree with this as well, and I think the only difference between your
text and my text is how we'd word it.
> Multiple init systems are viable today only because we have a common
> baseline interface, defined in Policy. Once we allow packages to drop
> support for sysvinit in favor of native systemd units, we no longer have
> a least common denominator interface. Init systems that can't handle
> systemd units directly are going to have an insurmountable disadvantage.
> This is not assuming bad faith, only human nature - as soon as sysvinit
> is not the default and sysvinit compatibility is no longer a policy
> requirement, support for non-systemd init is going to bit-rot in the
> archive, because it's no longer a development priority; some maintainers
> will even stop shipping init scripts as unsupported/untested, or because
> they're known broken and no one has stepped forward to update them. The
> shift of responsibility from individual maintainers to take care of
> their init scripts for proper functioning, to some hypothetical
> community of init system afficionados, is not a trivial thing.
To the extent that this is what will happen, and I'm not entirely
convinced that it's as dire as you believe, I think exactly the same
argument applies to upstart. In other words, this particular issue is not
dependent on what init system we choose, provided that the init system is
not sysvinit. All three alternatives have considerably superior init
system syntaxes, and all of them are mutually incompatible.
My feeling here, and the reason why I'm not as pessimistic as you are, is
that I think maintaining both a systemd unit file and an upstart init file
is considerably less work than maintaining a single sysvinit init script.
Both upstart init files and systemd unit files are quite simple for the
typical daemon and will not pose any major ongoing maintenance work. I
think both are simple enough to be akin to doc-base files, which I
maintain in all of my packages where appropriate despite the fact that I
never run any program that uses doc-base and literally never test them.
This is possible to do with a sufficiently simple syntax. I don't think
it really works with current sysvinit scripts.
Russ Allbery (email@example.com) <http://www.eyrie.org/~eagle/>