Having sniffed around the Linux community for years, I feel like whatever flaws SystemD has as a computer program are of tertiary importance when faced with the thing that really matters:
The developer of SystemD was mildly rude to some community members that one time. That means he is two hitlers and a stalin wearing a trenchcoat and everything he makes must be utter garbage.
It's a giant mess of interconnected programs that could theoretically still be disentangled, but in practice never are. It was very quickly and exclusively adopted by pretty much every major distro in a short period of time, functionally killing off any alternatives despite a lot of people objecting. Also, its creator was already pretty divisive even before systemd, and the way systemd was adopted kinda turned that into a creepy hate cult targeted at him.
There's nothing actually wrong with systemd. I personally wish there was still more support for the alternatives though. Systemd does way more than I need it to, and I just enjoy having a computer that only does what I want.
Systemd was half baked literally when it came out and figuratively as an idea, so much so that there’s already a replacement for it in the works.
A longer version:
Systemd replaced the init script style of boot and process management, which had been in place for decades. init scripts were so simple they could be understood just by looking at the name: the computer is Initialized by Scripts. Systemd was much more complex and allowed many more tools to interact with the different parts of the computer, but people had to learn these tools. Previously all a person had to understand to deal with the computer was how to edit a text file and what various commands and programs did. After systemd a person has to understand how to use the dozens of invocations of systemctl and it’s variants and if they are dealing with a problem, —you know, the only reason a person would ever be dealing with initializing services— they gotta know what’s going on with the text files that systemd uses to run different commands and programs.
So a person who already understood what was going on might rightly say “hey, this systemd thing is just the same shit with different file locations and more to learn”.
People complain about the creator and maintainer of systemd, lennart poettering . Poettering is also the person behind pulseaudio, an powerful but complex audio management daemon in Linux whose name you only recognize because it’s caused you no end of trouble. Pulseaudio was also replaced relatively quickly by pipewire.
The argument could be made (and probably has) that poetterings work is indicative of the problems with foss developers working as employees of major companies with their job responsibilities inclusive of their foss projects. The developer in that situation has an incentive to make big sweeping changes, they’re being paid for it after all, instead of being more careful and measured.
When every big foss maintainer is trying to find a way to justify being paid for it, their projects are never done.
At least poettering is working for Microsoft, ruining windows now…
E: oh my god I forgot about the binary log files! So before (and now), the universal format for log files was plain text. You know, because it’s a log that’s text. Systemd uses binary log files that need a special tool to open and parse. So if you want to look through them on a computer without that tool you’re kinda screwed. Now systemd isn’t the only software package with binary log files, but many people have made the very persuasive argument that it’s not a trait to copy.
I find it incredibly useful - instead of needing to learn a million quirks about the init of every distro they all use the same predictable system now, you learn it's quirks once and those skills transfer everywhere. Hopping from Ubuntu to Debian to Arch to Fedora is trivial now compared to the old days.
That and systemd-boot and systemd-nspawn are awesome.
Binary logs are annoying, but once you get the hang of journalctl, it's not so bad. That is about my only remaining hate for it.
In its early days, it was a serious pain. Its service management was annoying and is still a bit scattered to this day. It has improved a ton, for sure.
Above all else, it was kinda forced on us. Most of us were comfortable with sysv already. If I remember correctly, people often said the main dev for systemd could be a real jackass. I have no judgement or experience regarding that though.
ya see, when i ssh into a server and i run some commands, sometimes i mess up, see, and i wanna reboot to get the system back to a known state, right
and even if the system is in an unknown or invalid state, right,
i don't wanna wait half a bloody hour for systemd to get tired of waiting for 1m30s countdowns and actually bounce the damn machine, if it bounces at all
and i can't just hold the power button, see, because i'm 2000 miles away from the bloody box
(I did not make that number up, by the way. I once has a hard drive get hot removed while it was mounted, couldn't umount it so I had to reboot, and it confused systemd so bad it took 27 minutes to shut down)
EDIT: aw come on, are you really gonna downvote without leaving a reply?
I use runit on Artix. I wasn't around for the init wars, but dove into the rabbit hole of Debian email exchanges, where lots of shade was thrown around because of suspicions over corporate influence on Linux, and Canonical dropping the ball because of their Licensing on their competitor init, Upstart.
I reviewed videos of Poettering going on about it, adamently placing systemd as the hill he was willing to die on.
I read the Torvaulds email complaining about Kay Sievers being an asshole. Looked at how Kay Sievers famously refused to fix early boot problems with systemd. Read Laurent Bercot's technical break down of why even from a software design level, systemd should be called into question.
Its all interesting, and on my home desktop, I decided to only use Artix, Void, Gentoo, or Devuan over any of the others for as long as I can.
At work, I don't care. Do I wish that runit or s6 was more predominant and widely used? Absolutely. Imho both init systems are just more minimal and their implementations are so solid, they are two of the very few pieces of software I can say are finished. No notes, no new features, and because of the minimal attack surface, barely any security patches have been necessary.
Due to their following of the UNIX Philosophy, both runit and s6's source code can be reviewed in an afternoon, as opposed to systemd which has taken me considerably more time to parse through (though I'll admit systemd has some decent comments in their code that helps out).
But at work, while I have my preferences and opinions, the systemd debate isn't even close to the top of my list on arguments I'd like to have at the work place.
Are you using Linux for ordinary daily tasks like browsing, gaming, and coding? Then SystemD is perfect for such systems. No need to use distros that sell the lack of SystemD as their main selling point—it's more trouble than it's worth. Avoid SystemD haters like the plague.
Do you use Linux for enterprise servers? Then SystemD is just one of the options for you, go try all of them out to see what's best for such workflow.
Everything everybody else said plus everything with Systemd is just... more complex. With OpenRC, it felt like I could keep all the information I needed to use and administrate it in my head. With Systemd, I have to look stuff up all the time.
It does things in a way that it's hard to use other init without banning Systemd completely from your repo. And because it has feature and scope creep and causes dependencies to it everywhere, that does not happen once you're on it, too much work. Which most distros are, because at it's time it was either Systemd or SysV scripts.
I simply don't care. I am in a position lucky enough that I can trust distro maintainers, without the need to care about the details, as long as my system behaves as I expect, satisfying my requirements of reliability and stability
Roughly speaking, it is because it does not follow the Unix philosophy and proposes to do several tasks making the code very complex and therefore more susceptible to bugs.
I'd argue systemd has bad, borderline incorrect design. I didn't like SysV because it caused inconsistencies and hard to understand processes. systemd fixed the inconsistencies but the rest is sort of hacked together bullshit that developers play wackamole with. That hackery is the reason it can't be used in Docker for example. It has a complicated parser for a language that's basically a DSL that doesn't really solve the problem of complexity for the user. It requires a whole slew of random non-sense to work and it feels like stars have to align perfectly for things to function. It encourages bad behavior like making everything socket activated for literally no reason.
Compared to SysV, I'll take systemd. I don't find it ideal at all though. It's serviceable... much like how Windows services are serviceable. S6 is I think what the ideal init would look like. I'm more impressed with it's execline and utilities suite but that's another story.
The only thing I think systemd did right is handling cgroups.
I underatand, but I just don't care. Give me a functioning linux desktop and I will also run your garbage proprietary nvidia software. The alternative is windows, so I have to take what I can get.
For a desktop it's suitable for 99% of what you'd want to do. Might not be the best tool for large servers or something (I really don't know) but I'm sure all that depends on use case.
I feel like, at this point, it has more than proved itself as a general purpose desktop scheduler. But there are situations where you would want something different but a lot of software depends on it anyway.
I also kinda don't understand the hate toward the project itself, other than hearing some of the technical guidance on it has been a bit arrogant in the past or something. Sounds like sily open source drama to me honestly.
I don't have anything against systemd that is until I tried void linux for the first time. The working of runit seemed very simple and efficient compared to the complexity of systemd.
I still don't hate systemd, but I just wish it was simpler.
The arguments against systemd come from the same people that love IRC, mailinglists, tiling window managers, split keyboards, don't have a mouse, debug with printf, main arch or gentoo, unironically write RTFM|LMGTFY, call users "lusers", play DnD, think Startrek and/or Star Wars cannot be topped, identify with the portrayed super hackers in media, and are proud of doing things the hard way just to feel some kind of superiority in their life.
Edit: for those who don't get it, I'm obviously not being serious. If you fit this mythical, stereotypical person... uh... good job?
Linux power-users hate it when a tool tries to become a platform.
It breaks the principle of single responsibility and becomes a threat to the evolution of alternatives.
It's pros and cons. Having a platform is better because everyone works together on a single effort. But it also becomes a risk because now everyone depends on a single thing that does too much.
It's a pretty bridge, they'd say, but be careful you don't look at the supports. It was built using bad techniques, bad procedures, no coordination and no inspection.
Just cross your fingers as you drive over and hope it doesn't blow up because of its flawed construction.
I find it's a great way to cross the river, today.
SysV was just intuitive for me and my knowledge. There was just one directory with all the startup scripts in it. And they were run in their alphanumerical ordner. Just that simple. If I wanted to change the order in which the scripts started, I just had to rename the file. You don't want a script to run at all? Just remove it.
I assume, systemd has many advantages for a knowledged user. But for me, it still is just a hassle.
Every new tools (especially those being pushed by big corporations) meets resistance and suspicion. It's a new thing to learn instead of something proven to work, usually more resource-hungry...
Pros: Really useful AIO program that does everything
Cons: Really useful AIO program that does everything
Great example:
Systemd makes it very easy to bring up DNS with systemd-resolved, and it bridges a gap from the old resolv.conf file and newer DNS standards n stuff.
But then it also means that any alternative DNS clients have to tell resolvd to go away if they want to run, or often times make a systemd service to autostart with systemd and ensure it works perfectly with every possible systemd setup.
There's nothing inherently wrong with this method of having a centralized AIO thing that handles a a lot of stuff for you, but lots of early Linux people preferred the hardcore KISS principle and found it very beneficial to have everything neatly separated and modular with the service manager's job to only start and stop services.
Overall, systemd has been remarkably (and relatively) stable and beneficial which people thought would be impossible back when it became initially popular.