Mike Walsh wrote:But it's possible to have systemd-related items on the system without having the monstrosity itself.
Mike, you are misinformed. This forum is full of such misinformation, which is a tragic falsehood. Your comment was out-of-topic, hence so is my reply to it, apologies. However, these nonsense claims against systemd are technically misleading less-informed forum members so I can't let that comment pass silently, though of course you are welcome to have your own negative feelings, however misinformed they may be in this case...
https://opensource.com/article/20/4/systemd
Final thoughts
Even before getting very deep into systemd, it's obvious that it is both powerful and complex. It is also apparent that systemd is not a single, huge, monolithic, and unknowable binary file. Rather, it is composed of a number of smaller components and subcommands that are designed to perform specific tasks.
Arch Linux is an example of a very flexible OS for users that uses systemd, and one that I am becoming familiar with because I use upstream Arch system as the basis for one of my WeeDogLinux build script creations.
Arch used to use SysVinit. Here is what an ex primary maintainer of the init systems for Arch Linux had to say about adopting systemd in preference to the mess that was SysVinit (and I have personally worked with SysVinit since the early 1990's, but have to say that now that I've finally learned a bit of how to use systemd, it is much easier to use from a sysadmin point of view, and like a breath of fresh air. Runit, as used in Void Linux is nice too as it happens, but certainly not that SysVinit Puppy hangs on to!):
https://www.reddit.com/r/archlinux/comm ... e_systemd/
brainz - ex-Arch Linux init systems primary maintainer wrote:
I was the primary maintainer for Arch's init scripts for a while and I can share a couple of thoughts.
Arch's initscripts were incredibly stupid. In their first phase, there was a static set of steps that would be performed on every boot. There was almost no way to adjust the behaviour here. In their second phase, the configured daemons were started in order, which only meant that a init scripts were called one after another.
In the early 2000s, that seemed like a good idea and has worked for a while. But with more complex setups, the shortcomings of that system become apparent.
With hardware becoming more dynamic and asynchronous initialization of drivers in the kernel, it was impossible to say when a certain piece of hardware would be available. For a long time, this was solved by first triggering uevents, then waiting for udev to "settle". This often took a very long time and still gave no guarantee that all required hardware was available. Working around this in shell code would be very complex, slow and error-prone: You'd have to retry all kinds of operations in a loop until they succeed. Solution: An system that can perform actions based on events - this is one of the major features of systemd.
Initscripts had no dependency handling for daemons. In times where only a few services depended on dbus and nothing else, that was easy to handle. Nowadays, we have daemons with far more complex dependencies, which would make configuration in the old initscripts-style way hard for every user. Handling dependencies is a complex topic and you don't want to deal with it in shell code. Systemd has it built-in (and with socket-activation, a much better mechanism to deal with dependencies).
Complex tasks in shell scripts require launching external helper program A LOT. This makes things very slow. Systemd handles most of those tasks with builtin fast C code, or via the right libraries. It won't call many external programs to perform its tasks.
The whole startup process was serialized. Also very slow. Systemd can parallelize it and does so quite well.
No indication of whether a certain daemon was already started. Each init script had to implement some sort of PID file handling or similar. Most init scripts didn't. Systemd has a 100% reliable solution for this based on Linux cgroups.
Race conditions between daemons started via udev rules, dbus activation and manual configuration. It could happen that a daemon was started multiple times (maybe even simultaneously), which lead to unexpected results (this was a real problem with bluez). Systemd provides a single instance where all daemons are handled. Udev or dbus don't start daemons anymore, they tell systemd that they need a specific daemon and systemd takes care of it.
Lack of configurability. It was impossible to change the behaviour of initscripts in a way that would survive system updates. Systemd provides good mechanisms with machine-specific overrides, drop-ins and unit masking.
Burden of maintenance: In addition to the aforementioned design problems, initscripts also had a large number of bugs. Fixing those bugs was always complicated and took time, which we often did not have. Delegating this task to a larger community (in this case, the systemd community) made things much easier for us.
I realize that many of these problems could be solved with some work, and some were already solved by other SysV-based init systems. There was no system that solved all of these problems and did so in a realiable manner, as systemd does.
So, for me personally, when systemd came along, it solved all the problems I ever had with system initialization. What most systemd critics consider "bloat", I consider necessary complexity to solve a complex problem generically. You can say what you want about Poettering, but he actually realized what the problems with system initialization were and provided a working solution.
I could go on for hours, but this should be a good summary.
Whether you believe it or not, most of the above init-related comments also apply to Puppy Linux since it uses SysVinit (though in very simplified form since it isn't a true multi-user system, which is fine for its focus and purpose). No wish to use systemd - fine... but let us hope that those who call themselves the Puppy stewards one day modernise Puppy, somewhat, by throwing out SysVinit and at least replace it with something like runit as a considerably better alternative.
Sorry for the thread interruption - but like I say, it wasn't me who out-of-topic chose to spread false news about systemd. The problem with such bold nonsense inaccurate or wholly untrue statements about something like systemd is that it keeps people ignorant, who themselves, go on to spread that same false information they have trusted as part of their learning more about Linux via forum mentoring help.
Yes, there are some experienced Linux users/developers and so on here who hate systemd, but frankly I cannot understand where half of their prejudice comes from - most of the anti-systemd 'monstrosity, and so on' claims certainly do not at all match my own practical experience of using/configuring these various init systems on a daily basis over many decades.
wiak