The reasons for the controversies have not really changed (lennart, the idea that it's not "unixy", a takeover of many subsystems by various systemd components, …) so people who didn't like systemd years ago probably still don't.
As somebody who's not really involved, I found Benno Rice's The Tragedy of Systemd[0] interesting and enlightening.
It’s also to the point where Benno states that people don’t like change, but that’s really not true. Everyone jumped on virtualisation (except Theo De Raat), everyone jumped on containers, Kubernetes, GO, Rust, eBPF et al.
There are new technologies which don’t have to eat the universe to function.
Most people who have a problem with systemd don’t actually hate it, they’re upset because the environment that allowed systemd to grow no longer exists for its replacement. Coupled with the fact that we should really consider systemd a proof-of-concept for something better, means that we’ll be stuck with buggy, weird, non-deterministic C++ for decades.
That’s the root of the problem, not that we nerds dislike change, we tend to love change.
This is your personal opinion being presented as fact. Speaking from some experience in the Mac admin world, I’d really want to see the survey you did to support that claim.
every few days I discover some new bit of non-determinism:
- systems getting stuck for long periods at startup or reboot with with some useless text like "Waiting for user session to shutdown"
- reboots never completing at all (getting completely wedged shutting down)
- jobs starting in weird orders, like crond starting up before the network, causing various things to break in new novel ways (sometimes, not always)
I can fix most of these systemd-created issues one by one as I discover them, but it's hardly making my life easierFor example, you mentioned crond startup before the network but that's hardly new with systemd — checking the oldest system I have access to shows that it's configured with two dependencies: “# Required-Start: $local_fs $syslog”. To the extent that systemd changed anything it was exposing that an assumption was wrong — and the nice thing is that you can use a systemd service to replace that cron task with something which _does_ behave the way you thought with precise service dependencies and all of the other benefits to using systemd (e.g. resource management): https://www.freedesktop.org/software/systemd/man/systemd.tim...
as I said, I can fix the issues one by one as I notice them, but if they only occur 1 boot in 10, or maybe 1 in 100 it's miserable and a much less reliable system than before
but hey, the systems now boot 2 seconds faster (if they boot at all...)
the problem is not the issues themselves, as once I know they're there I can trivially google for how to fix them, it's the fact they don't show up except sometimes
I do not care about boot speed at all, I care that I upgrade the system to a new distro release with systemd, test it, then it continues to work that way until I change something else
this is no longer the case, and in 20 odd years of maintaining systems I've never had as much "fun" before as I've had over the last couple of years with systemd
I just want my systems to boot, run my simple applications, then shutdown when I ask them to
Which is what you get out of the box with systemd. The only problems you mentioned either apply equally (e.g. shutdown delays due to blocked processes — having supported NFS clients, let me tell you that was not a new problem in the 90s…) or are due to misunderstandings about how to use other components.
For example, if you have a critical service started in cron with no error handling or recovery, you always had an unstable system and were simply lucky not to have seen it fail before now. Projects like Upstart and systemd were started in large part due to people getting tired of having to kludge around those limitations of the older approaches. Having fixed systems which were configured that way in the past, I much prefer using something which solves it by design than continuing to bet on being lucky.
I have stated three times that I accept that these processes are incorrectly specified, and that my problem is not this -- the problem is that I cannot discover these missing dependencies by any reasonable process
whoever set them up 20 years ago is long gone, and what was reliable is now not
this is a regression
(and let's not get started that my brand new installations of Debian onto a single root partition get stuck booting or reboot 1 in 10 times... I get it, totally my fault as the end-user)
Any time you find yourself writing something like that, ask whether you’ve done a good job explaining your point first. In this case, you’ve been vague about everything except that you think systemd is the source of your non-deterministic behavior.
From what little information you’ve provided, it really sounds like the problem is a combination of blaming the init system for things which happen outside of it (i.e. processes hanging) and not learning how to use it. For example, launching a networked process under cron at boot with no retry mechanism has always been a problem because cron never guaranteed networking. Using the init system would have avoided that - even on SysV.
As far as how to discover it goes, fault tolerance has lots of edge cases — e.g. try mounting NFS and firewalling the server, `kill -STOP` a daemon with a clean shutdown process, reboot without a network or DNS (i.e. like you’d have during a facilities outage), etc. — but most of it comes down to learning to work with the way the distribution is intended to be used: use the init system (whatever it is) to launch processes, enable automatic restarts for everything, configure full dependencies on everything you need, etc.
Note that none of that depends on systemd - you can get better results on everything this way, but if you do it you’ll probably gain a better understanding the systemd developers made the choices they did. If you really can’t figure out how to be comfortable with it, switching to a distribution which doesn’t use it will be much better than fighting it and getting angry when the developers don’t support hammering a screw.
Now. Do you blame the new architecture for this bad situation? Or do you blame the old software, which technically always had bugs but those bugs were previously not triggered?
And a lot of the blame goes to the distro that shipped a bunch of broken binaries.
That is surely an aspect of the language, not the platform?
> And a lot of the blame goes to the distro that shipped a bunch of broken binaries.
Sure, I can see that. It is normally the case with new ports to new platforms to be in a state of unreadiness for quite a while. But this is not really relevant to the question of who to blame for the brokenness; the hardware platform or the software?
My analogy is that systemd merely exposed bugs in other software which had been there for ages (and only sporadically exposed). But then systemd comes along and expose a whole lot of them at once. Keeping with the analogy, some blame certainly goes to any disto which released this combination of systemd plus software which has bugs triggered by systemd, but still, is it reasonable to blame systemd in this case?
Personally I think it is great. Sysvinit scripts were terrible to write and frequently had bugs because the scripts were usually afterthoughts "Oh yea... I guess we need one of those things". The nice integrations between systemd and journald is well worth it in my mind as well.
There were alternative solutions to that problem that didn't require replacing a long and ever-growing list of system components with tightly-coupled (and often buggy) systemd versions. In fact people who really cared about their init system were already using them.
"Buggy attack surface" - I am unaware of attacks that target journald; can you point me to a practicable PoC attack?
"Why should I have to" - because other people are building your distros, expending their effort on open source projects, and as part of doing that they made decisions on your behalf. Feel free to not use those distros for ones that make decisions you prefer; the choice is yours.
Weird flex, but okay.
Suddenly logins take 30s. Why? Some new systemd problem with reverse DNS.
Suddenly reboots don't happen. Why? Systemd is spinning on a task that didn't used to spin. Yes, probably fixable, but not discovered until trying to reboot.
Can't login at coffee shop WiFi suddenly. Why? Some random systemd DNS issue.
Is my system more secure? Maybe, but possibly because it breaks so often that low uptime keeps it safe!
For my servers, I seriously have to cross my fingers and have the colo phone number handy whenever I reboot, fearful that they won't restart because of some random systemd interaction that happened on some previous upgrade. It's gotten that bad.
shakes head slowly
Mewburn rc, which reduced many rc scripts to a couple of shell function calls and a handful of variable declarations, has been used by NetBSD since 2001, and FreeBSD started using it about a year later. OpenBSD, furthermore, reinvented Mewburn rc around 8 years ago. Project Trident (formerly TrueOS formerly PC-BSD) has also since then switched from Mewburn rc to OpenRC.
* https://news.ycombinator.com/item?id=10357589
* https://news.ycombinator.com/item?id=11550802
* https://news.ycombinator.com/item?id=14736175
/etc/rc.local was first declared obsolete in the BSD world and replaced by a system of drop-in files in a directory back in 1995.
OpenBSD still documents it as an implicitly-recommended way to start programs (though if it's possible to start it via e.g. rc.(local.)conf, then that's obviously preferable).
¿Qué?
I guess we'll have to beg to differ here, but I prefer OpenBSD's (for example) init system over sysvinit or systemd any day. rc.subr is a godsend for eradicating all the boilerplate that "justified" switching to systemd. Enabling/disabling a daemon is as easy as adding a line to /etc/rc.conf.local (or just running "rcctl enable mydaemond", which does that for me). No fiddling with symlinking scripts to runlevel-specific folders (or, in fact, dealing with runlevels at all; if I need single-user mode, that's what bsd.rd is for).
One of these days I'd love to start ripping out the initscripts on my Slackware machines and replace them with something closer to OpenBSD (or hell, I wonder if I can just port OpenBSD's init to Linux?).
However, as projects adopt systemd-proprietary APIs, distros are forced to choose between maintaining ongoing forks of those projects, dropping those projects, or adopting systemd. E.g. I suspect Slackware only avoided being forced to adopt it because they'd already decided to not support gnome.
Compared to the Linux kernel, systemd's CVE rate is very low.
Now compare systemd CVE's with OpenRC or runit CVE's or any other init system and then you have an argument. But comparing it to the kernel with hundreds of people commiting changes is weak.
This comment is not defending nor attacking systemd.
(Though the implication that systemd is an OS Kernel is ... interesting.)
https://www.cvedetails.com/product/47/Linux-Linux-Kernel.htm... https://www.cvedetails.com/vulnerability-list/vendor_id-7971...
So far in 2019, the gap has narrowed: "only" 45 CVEs so far for the Linux kernel, and 7 for systemd.
This contributes to the low rate of CVEs in systemd relative to Linux (for which many less-important bugs get CVEs).
My conclusion is that the systemd project is not its own CNA and therefore not in a position to authoritatively decide which systemd bugs get CVE numbers assigned and which do not.
https://www.cvedetails.com/product/47/Linux-Linux-Kernel.htm...
https://www.cvedetails.com/product/38088/Freedesktop-Systemd...
For a piece of software used by millions of machines, that's a very low CVE count.
Prove it. As someone else pointed out, there were 5 CVEs for systemd in 2017 and 7 so far this year most of which are low severity. If you think the mess of shell scripts and programs that systemd replaces had less than that you're simply delusional.
systemd (not SystemD) changes a core part of the OS, we go from a userspace being bootstrapped by a bunch of different shell scripts calling a dozen individual binaries, to an actual system and service manager configured with unit files.
It's a large change, although one other operating systems went through a decade earlier, and some people don't like change.
People really need to stop saying this rather than taking the time to actually understand what people are objecting to.
Lowercase is a UNIX convention. SystemD does not have a UNIX approach.
Since SystemD is not a Unix service daemon it shouldn't be spelled "systemd" to prevent confusion.
Should I pejoratively call you "CRaIg" because I think you don't match up to my standards of what a Craig, or even a craig, is? Is that okay?
I don't think it's okay. Names have meaning. It is a really minor bit of respect to use them correctly.
* https://lists.debian.org/debian-devel/2016/08/msg00547.html
Moreover, the term "System D" is somewhat synonymous with the term "black market", which Wikipedia defines as a: "series of transactions that has some aspect of illegality or is characterized by some form of noncompliant behavior with an institutional set of rules."
That is a surprisingly good analogy for how systemd acts on a machine, but there is another analogy to a similarly worded term: "Substance D", from the novel "A Scanner Darkly". In the novel, it is described as an addictive psychoactive drug, also known as "Slow Death". Credit for that comparison goes to this foundational criticism of systemd:
There's still a group of Unix users upset about the major init split that happened fourth years ago. Things will never be unified.
While it is optional, ubuntu installations come with it turned on by default.
Those distros that can run without systemd have to make their own patches to "fix" GNOME, which is very costly. Even Gentoo struggles with that, as it takes them a long time to release new versions of GNOME because they have to write the patches to strip out systemd first.
LxQt and any KDE-powered distro would beg to differ.
But I agree, in general, that KDE-default distros are few and far between. And the KDE team probably has better things to do with their time than try to maintain a systemd-less fork.
KDE has long been a more crossplatform system than Gnome (much better windows support (and even e.g. solaris), BSD is treated as first-class) so I'd hope they'll continue to avoid being systemd-dependent.
Based on what?
cough cough Slackware cough cough Kubuntu/Xubuntu/Lubuntu cough cough Tiny Core Linux cough cough the literal dozens if not hundreds of distros that ship with a desktop environment that's not GNOME or MATE or Cinnamon or some other derivation thereof cough cough cough
Or because they like systemd and they think the abstractions it provides are useful and its better to not have that code in GNOME. But sure, lets go with the conspiracy angle.
Also, pure serve distros also adopted systemd.
> Those distros that can run without systemd have to make their own patches to "fix" GNOME, which is very costly.
OpenSource project not implementing the features some users want them to implement. Shocking stuff. Its almost as if that's the bases of Open Source. If you don't like the choices of the project you can take the source and do your own thing.
All major distros adopted it and even some that are listed there as "no systemd" in reality just give you choice (e.g. Gentoo).
I'd gladly hear the opinion of distro maintainers why did they switch to SystemD if it's as bad as it looks like in people's perception.