There are reasons why many hate systemd.
It slowly engulfs many of the core userspace components, and replaces the previous counterparts.
The init system running at PID1 is really great when it comes to services.
Handling sockets is really good, but not in PID1.
It can be excused, as it works fine in practice.
But services are encouraged to be started in parallel with their dependencies.
It isn’t a good idea despite working apparently well… It’s like not following safety rules in traffic just because you haven’t experienced any accident yet…
AND it slowly “embraces” other software, then “extends” them, and then “extinguishes” them.
Example: It embraced secure booting and secureboot key management by supporting all required tools in kernel-install
as well as ukify
[systemd’s UKI builder]. It slowly “extended” them with more integrations and features. Then it extinguished them with systemd-sbsign
, a tool meant to sign the UKI executables.
systemd-journald
as well as socket activation, although a bit more radical, started out as a minimal bridge for the syslog socket, to record even those logs which were generated in the absence of syslog.
This way, it slowly starts “natively supporting” many features and subsystems, adds code within it to support more, and finally replaces the said software.
It has incorporated udevd, logind, has developed a network daemon and a resolver daemon, a daemon for the hostname [and hardware model], a daemon for managing locales, a daemon for managing [only managing] time and date settings. [The latter 3 are tolerable as they run only as needed].
It re-implements cryptsetup for internal ordering purposes.
It re-implements cron [you need 2 unit files 6+ lines each for what crontab would do in a single line]. [Although now systemd-cron is there…]
It has .swap
.device
.mount
units which many find too much of wasted work… it just wraps around the commands!
It, yes, has done a lot of good to linux, but it also has done quite a little bad.
You can’t touch cgroups outside systemd.
66, s6-rc, openrc, dinit, shepherd, /etc/rc
plain init, and many other inits do init very well… they don’t require the software to include init-specific code in them.
But systemd does… for readiness-notifcation, for socket activation, for many other things.
My personal gripe with it, despite using it, is that it doesn’t support musl, and the developer is too arrogant to include it. He is too stubborn and avoids constructive criticism. Also another gripe is that it doesn’t consider other init systems, takes active steps to push out others…
If you think “It implements timer activation” “s6/66 doesn’t have socket activation” “musl doesn’t support extensible NSS etc…”, please reply back to me. [A crontab entry to start a service, s6-fdholder
, nsss
(temporarily musl-nscd
) respectively for those example questions…]