Distros choose what they adopt. They willingly migrated to systemd. Ubuntu, of all distros with its in-house init system, upstart, followed Debian in this migration. They are not forced onto anything. Distro maintainers decided that systemd made their lives easier and switched to it. Or which actual, concrete things they were to do do you have in mind?
And yes, the Linux kernel has implemented features for systemd. It's obvious that in an healthy ecosystem, the init system and the kernel cooperate and both have influences between each over. What negative change did the Linux kernel have to implement because of systemd?
I'm quite sure systemd is not perfect, but I personally think it has dramatically improved my life as a Linux user. It has made my boot faster. It brought very convenient tools to instrument this boot to know what exactly takes time, or fails. It has made the logs incredibly easier to find and read. It has made writing services way easier. starting, stopping, disabling, enabling services is incredibly simple. It has replaced a mess with something clean and easy to user. I'm personally quite happy about some standardization over a solid software stack happening.
Upstart was already on this path and systemd further improved things.
I'm quite sure systemd has its flaws. I want to believe you on the fact it has bad aspects and even about the monoculture being bad but I can't because you haven't listed anything actually, concretely bad about systemd. What would you change in systemd?
The only concrete criticisms I've ever read about systemd are:
- it stores the log in binary format. Now, in almost 10 years I've dealt with it, on no occasion I've found it to be an issue.
- Projects like gnome depend on it. But it's a decision taken by those project, and if you want your OS to be coherent, of course the session manager or the desktop environment are going to need some kind of integration to the init system. If your system doesn't provide feature the DE needs, you'll have to provide it and build a shim, that seems actually fair enough. If your shim actually provides systemd compatibility, it could even be adopted upstream! See seatd/libseat [1].
- It is a monolith that wants to do everything. But I'm not sure it's actually true. Systemd actually provides many binaries, each with one, separate, purpose. I think that on the contrary, it is nothing like a monolith and it's more like the GNU tools, all under the same umbrella but each doing its own thing
[1] https://git.sr.ht/~kennylevinsen/seatd