compared to the old sysv init
SysV init is the wrong comparison point, because although it was still widely in use, it was already being superceded by much better init systems.
At that point, we already had Upstart, Runit, and OpenRC in wide use for a number of years. (Ubuntu 6.10 to 14.10 and Fedora 9 to Fedora 14 used Upstart by default, for example.)
The way systemd requires one to discover services via dbus instead of the service supervisor or init knowing whether a service is active or not –– I do not mean whether the service daemon is
running, but whether it is providing specific services or not ––, is extremely fragile. (This is crucial for dependency-based inits that can start services in parallel, thus speeding up the startup process significantly.) It would be much better to have a public API (not ABI) for services to announce their state changes –– although because of some oddball services, this interface should be async-signal safe (available even from signal context, which excludes most of standard library facilities) –– which would be both modular (because the actual implementation can vary from dbus to whatever else) but also allow future enhancements.
Because systemd developers are against init agnosticism (they actively object to patches that would allow other init systems in e.g. Debian, and prefer to make packages they subsume systemd-only), we are stuck in the 2010 view of what an init system should be like on Debian- and Fedora-derivatives. Fortunately, there are still distros that try to support others (which means they have to patch systemd themselves, which is not optimal –– staying to the vanilla upstream is typically a better choice), like Devuan and Gentoo and others. It is notable that Devuan is not the only derivative Linux distribution that supports other init systems unlike their source; Artix is similar derivative from Arch. I have not used Alma Linux myself (because I no longer maintain HPC clusters or server-class machines), but I've been told it too supports other init systems besides systemd.
The idea that systemd is anywhere near the top quality/technology in init systems is ridiculous to anyone who has actually compared it to openrc, runit, or s6. (Anyone familiar with DJB will be delighted at s6 and its implementation.
)
It is simply the most popular. If you think popularity and quality are correlated, I think StackOverflow is a better place for you to interact, than here where the actual facts tend to matter more. If you accept the popularity argument, then you'll see from my previous posts how that and the observed technical inferiority has directly lead to the 'Poettering hate'.
It is not personal, it is exactly about his output and interactions with others.That said, as long as I can choose my init system and several are actively developed, I'm happy. I'm even neutral-to-happy that systemd exists, because it is better than sysv, and it suffices for many people (and it therefore is a valid tool).
To circle back at the topic at hand, "replacing the kernel in Windows [with Linux]", this init sidetrack is actually quite illustrative.
It takes a lot of extra work to make services work with a different init system than they were developed for, unless the service is trivial, or designed to be init-agnostic. We currently do not have an init-agnostic POSIX/Unix/BSD/Linux service state announcement API at all, so practical init-agnosticism is only possible for trivial services.
Similarly, run-time-monolithic kernels like Linux and the one Windows uses have their own syscall APIs, on top of which lay (userspace) libraries and services, all with a set of unstated assumptions and expectations tightly interwoven throughout the libraries and the kernel. And there are external companies, driver vendors et cetera, that sometimes depend on very little known quirks of these libraries and services.
As to say Microsoft's ability to refactor or rewrite their libraries and services to work with a completely different kernel, one with a different set of assumptions and expectations and approaches, I'd like to point to the content of the OOXML standard and its attribute definitions (for example,
autoSpaceLikeWord95,
useWord97LineBreakRules,
useWord2002TableStyleRules). No, there is no documentation as to what these actually mean, other than their name: they mean exactly what the name says, nothing more. Sure, this is a completely different business unit, but I do believe it is indicative of the
culture of how
quiet knowledge (like the internal design approaches of services and libraries) is segregated and likely often documented only as the implementation itself. I could be wrong, though, never having worked for Microsoft myself.