Hacker News new | past | comments | ask | show | jobs | submit login

Can anybody explain to me again why systemd is so bad ? Genuinely I'm not sure anymore: It is chock full of features and it gets the job done. Since it is used in a lot of big distributions it gets a lot of fixes, updates, testing and feature improvements regularly.

Yes, it is maybe monolithic (but so is the Linux kernel). Its philosophy may differ from unix's "get one thing done well" too but integration of various functionalities comes with its benefits.

Some people say it is bloated. The substitutes to systemd are lightweight but less featureful. Maybe some of them will get bloated as they achieve feature parity.

People have a right to build substitutes and replacements -- I believe in the "Let a hundred flowers bloom" philosopy. However I can't understand why systemd is the point of so much disagreement.






I think this is as good a time as any to reread "The Rise of Worse is Better".

https://www.dreamsongs.com/RiseOfWorseIsBetter.html

The article compares the Unix/C philosophy with the Lisp philosophy and concludes that Lisp is "better" (it is The Right Thing), but that Unix/C will probably end up dominating. Obviously, he was right.

The article is pretty famous around the suckless, minimalist, crowd. But I think everyone who reads it takes a slightly wrong lesson from that article. The point isn't that Unix/C won because it was simple. The point is that Unix/C was simple enough to use, simple enough to implement on most available hardware and that it did everything you needed it to do.

The minimalist people have turned software simplicity into the modern version of The Right Thing, and are surprised when they found out that the "worse" (more complex) thing wins. But The Right Thing will never win. The Good Enough always wins.

Is Linux better than *BSD? Well *BSDs are more simple, easier to understand and reason about etc. But, at least OpenBSD, doesn't have mount --bind, so I can't use it. Case closed. And I think that's the case for most people. Linux has thing X which I need so I will use Linux, even if ideologically *BSD is imo better.

Is D-Bus The Right Thing? No; but it is The Good Enough. polkit, selinux, ACLs, and so on.

The most recent example I can think of is Hyprland. It is basically the only viable Wayland window manager (aside from sway). Not because it is the best designed or the simplest, or anything like that. But simply because it is the only one Good Enough to use.

SystemV init was not good enough for complex service management. systemd is. systemd simply does everything you need it to do well enough. So systemd wins. Simple as. It will only be replaced when it is no longer Good Enough.


Exactly, for some values of "good enough". (Unfortunately IMNSHO) Systemd cannot be toppled by all-out assault. It must be subverted. Looking forward to reimplementations and/or shims which provide the Systemd API but are reimplementations.

Something like Wine, where in the analogy systemd is the Microsoft Win32 API and we want to be able to run systemd "enabled" software on something else. Or at least re-compile it.

Wine also started with an incredible amount of stubs which did nothing, but that was often enough for many programs to work anyway.


> Looking forward to reimplementations and/or shims which provide the Systemd API but are reimplementations.

We've seen the launch of GNU's systemd equivalent, which seems to introduce more complexity to the simplest levels and is more difficult for users to understand and configure. Given that every service file is its own erlang program/DSL/whatever, understanding erlang is critical to being able to write or reason about service files.

In essence, it seems to be trying to re-implement what systemd does, but badly.

Reimplementing systemd's API but using other discrete components would also be a bad idea. The biggest reason systemd took off is that it's all the tools a system needs, built in a way that they work well together and can be interacted with and configured consistently. Providing systemd-compatible replacement shim APIs would mean trying to tie a dozen (or more) discrete OSS projects, each with their own philosophies, developers, licenses, goals, etc. together, generating their config files consistently, and trying to mush all that together in a way that doesn't make things vastly more complex than what systemd already provides.

In short: the reason systemd is successful is that it got rid of a giant mess of unrelated or overlapping services and replaced it with something simple, coherent, and functional, built out of components that you can (in most cases) choose to use or not. Most people who hate systemd seem to hate it for largely ideological reasons ("it's too big!") and are more interested in solving those ideological problems at the expense of practical solutions to real user issues. I've yet to see someone argue against systemd because it's bad for end users; only because they don't like the way that it provides benefits for users.


It could mean that, but it could start much simpler. Instead of trying to implement the whole API surface and behaviour, focus on a single consumer i.e. a single program which today depends on systemd.

Shim out enough for it to at least run in some capacity on something which does not have systemd.

Go from there.


Do you have examples of what you suggest, 'a single program which today depends on systemd' which would make sense to decouple from systemd?

The amount of work that a project would require over the long-term would be pretty substantial, so I assume that there are a lot of these things which you would suggest fixing over time to be rid of systemd, but I'm not certain what the end benefit of this work would be. Interested to hear more.


Gentoo has a little list¹, along with suggestions for modifications. Instead of modifying the programs, one could experiment with a shim library and leave the program code unmodified to see if that's a viable path towards portability. The end benefit would be portability to systems lacking systemd proper.

(Now, the importance of portability is a separate question. If you want systemd to "eat the world" it's even a negative value.)

1: https://wiki.gentoo.org/wiki/Hard_dependencies_on_systemd


This kills me when, of course all these apps were already portable for decades and only just recently all now need a "viable path towards portability".

You'll find that there are very few such programs. This shouldn't be all that surprising, because most programs do not care what process started them or where stdout is logged.

The most prominent dependency on systemd components is Gnome on logind, which already has a shim.


Go for it!

I might, but I have way more opinions on various topics than stamina to do something about all of them, I'm afraid. :-)

Yeah. Exactly. It's also how Wayland and Pipewire managed to win: by being backwards compatible with X and Pulseaudio, while also overcoming their shortcomings.

The problem is that if the only complaint with systemd is that it's too complex, any backwards compatible alternative will necessarily be as complex as systemd + the new thing (at least in terms of complexity of interface).

If there are actual technical deficiencies of systemd, then sure, maybe such a backwards compatible alternative might be in order.

Also, everything expands in time. Wine may have started out with many stubs, but now we're at the point of implementing Windows-y APIs in the kernel with the sole goal of improving wine performance (NTSYNC).


> The problem is that if the only complaint with systemd is that it's too complex

As I understand it, that isn't the only, nor even the main, complaint with systemd. On the contrary, the main complaint with systemd is that, like strangler vine (kudzu?), it's spreading everywhere, taking over functions that it originally had nothing to do with, and forcing ever more unrelated things to adapt to systemd -- thereby making them much less portable away from systemd; to something that doesn't use it.

It's like the old debate about "BTW, you should call it GNU/Linux, because..." is sooo yesterday: Nowadays it's systemd/Linux -- and well on its way to becoming systemd-OS, with the kernel a mere afterthought, soon to be if not replaced at least easily replacable. Sure, that may not bother you or most systemd fans, but one can't help wonder: Do you even realise that this is what you're condoning, or even actively advocating? Maybe it would bother you, if you realised it.

(Also, the whole "strangler vine" thing, when deliberately applied, used to have a name: "Embrace, Extend, Extinguish". Now, I can't really swear that it is being deliberately applied here... But do we really dare to blithely assume it's just a coincidence that the creator of systemd so naturally found a home at the company the expression was coined for?)


Subversion is key. Remember when "performance" was the key reason for moving to systemd (scripts are sooo slow). To subvert, you need some lever and the chink in the armor to break in.

D-Bus is good enough for all sorts of things. But you absolutely don't need a behemoth like systemd to use D-Bus. A D-Bus communication option can be added to existing programs and utilities, or new ones could be fashioned for which it is a central mode of operation; and still there would have been no an ever-growing pile of centrally-maintained and inter-dependent artifacts.

As for SystemV... as I mentioned in another comment - in hindsight, that was not the issue. There were and are SystemV alternatives [1]. One can even write one that uses D-Bus in an opt-in fashion, to foster other facilities' use of it.

The init system excuse is very much like the stone in the fable of the stone soup: https://en.wikipedia.org/wiki/Stone_Soup - it's what gets the vagabond's foot in the door, and is the first ingredient for the soup. But actually, the stone carried no significance, and the resulting soup is pretty much the same thing as without the stone part.

[1] : ruint, OpenRC, launchd, s6, nosh, finit, procd, upstart etc. See brief description and links at https://alternativeto.net/software/sysvinit/ for example.


s/SystemV/sysvinit/

and one more thing about that: For PC users and "vanilla" machine setups - sysvinit, weirdly, still works fine. Startup is quick, and developers don't live in pain making it work. Of course it is kind of lame design-wise, but it's not even that we just _had_ to replace it - we've still not reached even that point.


> The most recent example I can think of is Hyprland. It is basically the only viable Wayland window manager (aside from sway). Not because it is the best designed or the simplest, or anything like that. But simply because it is the only one Good Enough to use.

I'd wager the vast majority of (non-embedded / single-purpose) Wayland deployments are gnome and KDE.


They might be Raspberry Pi which doesn't use gnome or kde! :-)

Obviously, but I'm talking about bare window managers, not DEs. Alternatives to i3, awesomewm etc. Different niche.

River is very good but a niche in a niche. Telling that ive been using hyprland though.

Part of the problem with all of them is less the wm and more knowing what parts you need. Not so much bars as portals. I'm vaguely surprised hyprland doesn't have a "good enough" batteries included config and documentation.


Hyprland does have an extremely useful "Useful Utilities"[1] section on the wiki.

You simply install everything from the "Must-Have" page, then go through the other pages and install everything you want and by the end you have a complete and functional desktop. For every component, there is a good description of how to use it in Hyprland.

I simply followed that guide, remapped some shortcuts, copied some guy's waybar config from GitHub, and, well, did little else, and had a perfectly functional Hyprland desktop that I used virtually unchanged for ~six months.

Only recently got into ricing it more, and only to the extent that now all my components (app launcher, notification manager, waybar etc.) use the same color theme.

[1]: https://wiki.hyprland.org/Useful-Utilities/


cosmic is going to be a great wayland windows manager.

I think a lot of the arguments I’ve seen stem from “Unix philosophy” style arguments. Also, historically the systemd project has been quite hostile to user requests in some cases, which broke existing workflows for people.

I personally think the basic “service manager” functionality works pretty well and I like systemd overall.

However, the same is not true for a bunch of the more peripheral services (e.g. resolved, networkd, timesyncd). What’s particularly annoying is that there exist mature open source projects that can provide better functionality in a lot of cases which could be used, rather than bundling a half-assed attempt with systemd (eg. unbound, chrony).


> resolved, networkd, timesyncd

None of these are mandatory though. It's up to the distros whether to use them. For example at this point resolved is pretty commonly enabled by default, networkd not at all, and timesyncd is perhaps 50-50 with chrony.


Yes, but not using those seems to defeat the point of using systemd.

The most convincing advocacy I have seen for systemd (by a BSD developer, its fairly well known) is that it provides an extra layer of the OS (on top of the kernel) to standardise things.


> Yes, but not using those seems to defeat the point of using systemd.

I don't see how it defeats the point - it still nice init / services manager, it still provide features say sysvinit couldn't do at all for my _services_ and management/lifecycle of services.

How often I tackle with resolved or networkd or timesyncd - not even sure, may be once a 2-3 months, while systemd-as-service-manager I do almost every day.

Mind providing some example on your setup/cases?


If you don't use them, you still have a standardized way of managing system services, including scheduled batch jobs. The other services are a convenient and integrated way of getting a basic version of that functionality, but they are by no means the entire point of systemd.

At this point, I am willing to believe the point of systemd is to be the new way to do anything. "If you want to talk to the kernel, go through me".

It's a new (ill specified, non standard) runtime to target. It's like what Win32 is to the raw NTDLL, or the dotnet or Java API. It hides the OS.


Apart from the comparison to NTDLL making no sense, you'd be wrong about the tools too. It aims to provide a basic standardized way to do most system-level management (set up networking, do DNS resolution, get a decently synchronized system clock) but it absolutely does not aim to replace more specialized tools like chrony or NetworkManager. For example, timesyncd doesn't do NTP or PTP, only SNTP.

systemd (the PID 1), journald and udev are different, though, because they're mandatory; and there's no alternative to logind while technically optional.


I came to the conclusion that people who complaining about systemd don't even understand, use or used it, like saying that everything run on PID1, just open htop and it's going to be proven wrong, or they know that, but their arguments are so meaningless that they resorted to lies

How so? The functionality of the kernel and of systemd are basically orthogonal: neither really provides features that the others do. There are some interfaces in the kernel which are basically intended to be delegated to one userspace process, like cgroups and the hotplug management done by udev, so talking to them directly as an application or library is probably not a good idea and those processes provide a means of co-ordinating that, but that's a kernel decision and the udev one predates systemd.

Uh, yes? Win32 is also largely orthogonal to NTDLL. Doesn't mean one has to love all choices made by Win32.

Of course. That standardized way is runsvdir, yes?

I remember that on one of the $dayjobs around 2014 we have used runit, but I honestly don't remember why and what it gave us. Very likely just as auxiliary tool, not main init system.

Really curious now what it was so.


So, systemd is like "doing Linux services the Microsoft way"

Your remark may suggest that everything MS does is “wrong”. This is of course an extreme overstatement and all of their approaches should be evaluated on their own.

So far the argument for systemd seems to be "well it works so why are you complaining"

It's a declerative boot system, where units can declare their dependence on another unit/service, and they will be brought up in accord, with a potential for parallelization, proper error handling, proper logging, all while the user complexity is a trivial .ini-like file.

It also has a good integration with Linux features, like cgroups, allowing easy user-isolation, has user-services that allow proper resource management, and many more.


systemd is just much better for managing cross-cutting concerns. E.g. having the machine wake up from sleep for a timer and do a task (e.g. backup or updates) which delay sleep is trivial, portable and reliable with systemd and probably technically possible without it.

Sorry, I'm not deep enough into it to determine why systemd would be better. Perhaps it's not. I know it's less unix-y, but we shouldn't treat that as holy imho, it's a good guideline though, I try to follow the unix philosophy.

Just saw Lennart Poettering speak at Fosdem and perhaps it’s even more Unix-y then system V init :)

And all the system managers that followed UNIX philosophy failed in being as straight forward as systemd, you know, the whole point of that Unix philosophy is to be more straight forward

Here, "system managers" and "straight forward" are pretty loaded terms...

I'll elaborate on this if you like.

It works, and it works well. It does what it says on the tin. It brings together multiple disparate functionalities to a level that most end users need, while also having the ability to replace a lot of those functionalities (systemd-resolved, systemd-networkd, systemd-timesyncd as examples) with other services if that's what your deployment needs.

It replaces the old style of services being just a bunch of shell scripts that ran one after another. It provides a consistent interface to configure, start, stop, restart, enable, disable, and monitor those services. It allows dynamism by creating service templates, allowing you to launch six different variants of a service using the same base service configuration.

It also allows you to take advantage of a lot of Linux's security features, by implementing service-level restrictions on filesystems, network access, user IDs, PIDs, and so on. It even provides the ability to listen on a socket and pass connections to a process, meaning you could have a network-listening daemon that doesn't even actually have access to your network.

It provides cgroup integration so that you can limit the resources provided to an individual service so that you can prevent one process from causing issues with the rest of your hardware. It can even point a service at a separate root directory, essentially chrooting a service before it even starts.

It provides tooling so that individual services can interact with one another, and so that user-space tooling (either theirs or a custom d-bus client) can interact with services, and provides functionality for validating whether or not the user has permissions to do so. It also provides functionality to easily override configuration in override files, allowing you to make local changes without changing the files that were distributed, making it easy to debug whether it's your changes or not that are causing an issue, or to test changes without worrying about putting things back.

It eliminates the issues of having multiple different services, often either conflicting or overlapping, to provide the things it provides. Multiple separate configuration files, configuration syntaxes, and so on. It eliminates the need for distros to create config generation tooling to produce the right config files to tie each service together, and then write their own daemons or cronjobs to check each of them for changes.

And all of this functionality is, essentially, optional. I can do a hundred different things with a service file, but I don't have to; I can basically write a service file in ten lines of ini-compatible configuration, using (and being aware of) none of that functionality, and it works fine, or I can write a service file that locks a service into its own network, with no access to the existing filesystem, only the most basic entries in /dev, only the files it needs in /etc, limited by seccomp filters, using systemd's watchdog functionality to restart it if it hangs or gets overloaded, limiting it to specific CPU cores and changing CPU and IO weighting, limiting the number of processes that it can create, and even filtering which system calls it's allowed to use.

In short, it's a system that can be very easy to use and start working with, but provides more functionality and complexity than I think almost anyone realizes. It's the most capable and simplest way of handling system services, and the extra pieces just make it less complex to add functionality like network management, name lookups, boot management, and so on to your system if all you need is the basics.


it's a good argument

It comes down to a philosophy you choose.

I personally think that most of the OS decisions done by Microsoft are wrong and should be killed with fire but also I'm far from thinking bad about the people who made these decisions. Perhaps these decisions make sense from their standpoint given the information they had a time.

On the other hand on Linux I'd really wish for a centralized settings repository like Registry. But not from the systemd crowd, of course.


The registry is /etc

If you want some more structure to it then you'll probably end up with the registry and whatever it is that people hate about it.

IMO it would be enough to put the /etc into git so one can rollback bad changes.


Don't registry get loaded on boot, making it heavier that just being /etc on the hard drive?, also yes, /etc can be view as some sort of registry, but the implementation is different and that's matter

Parts of it do get loaded and unloaded as needed from disk to memory and back to disk. It's certainly not all loaded into memory

It's more like doing Linux services the UNIX(TM) way since it's more similar to other UNIX service managers like SMF from Solaris or SRC from AIX in the integration -- NT's service manager requires an active event loop which responds to messages.

As an aside, the reason I don't like systemd is because it's inferior to its UNIX counterparts -- especially SMF -- for system management.


Maybe someone should port smf or launchd to Linux?

Given that it was based off of the design of OS X's launchd, I think it's probably more accurate to say it's "doing Linux services the Apple way".

Isn't MacOS a UNIX?

resolved and timesyncd are intended to be removed by the end user of the operating system. Sort of like a transparent peel is intended to be removed by the buyer of a new shiny device.

I haven't seen anything worse than those two from systemd crowd.


Resolved is useful if you frequently change networks (e.g. a laptop), particularly if you’re also using an overlay such as Tailscale. Unfortunately, like anything related to systemd it is flakey and buggy and the solution to most things is to restart it.

I started using Linux because I liked stability. Systemd makes a Linux system as dynamic as a Windows one (which is nice) at the price of making it as stable as a Windows one (which is not).

I believe that part of the problem is that it is written in C, which is an absolutely terrible language for reasoning in. Writing it in Lisp would have been smart. Writing it in Go nowadays would probably be okay. But C is just an unmitigated disaster.

Also, bringing INI to Linux is unforgivable.


> I started using Linux because I liked stability.

> I believe that part of the problem is that it is written in C,

You know the Linux kernel, and probably most of your userspace, are also written in C? Why do you say systemd is a disaster solely based on its use of the C language but seem to be believe the rest of "Linux" is stable despite also using C?

I mean, there could be some argument here about everything systemd does actually being harder than a kernel's job... but you didn't say that.

I'm on the C-hate bandwagon as much as anyone else, but it doesn't make sense. I have mixed feelings about systemd though.


> You know the Linux kernel, and probably most of your userspace, are also written in C?

I’m aware. It would be nice were that not the case. One of my favourite userspace programs uses C, but just to build a Lisp runtime!

> Why do you say systemd is a disaster solely based on its use of the C language

I wrote ‘part of the problem.’ Systemd is a disaster in part due to its use of C. Its bugs are in part because C is not a language which is really suitable for abstraction and reasoning over abstractions.

I do think that what systemd does is more complex than the parts of a kernel which require assembler or C. I wasn’t constructing a full argument, just opining. I think that the sheer weight of C required to do anything complex makes it very difficult to reason about what that code is doing. Languages higher on the abstraction curve make it easier to reason about abstractions. Reasoning about abstractions helps prevent design bugs. And also languages with good abstraction capabilities tend to help avoid implementation bugs.


> Unfortunately, like anything related to systemd it is flakey and buggy and the solution to most things is to restart it.

For what it's worth, I have never found this to be the case. systemd's functionality has been far more reliable to me than the old methods of using `ifupdown` and dhcpd.

> I believe that part of the problem is that it is written in C, which is an absolutely terrible language for reasoning in.

I'd love to know what you've seen from systemd that indicates that this is the case.

> Writing it in Lisp would have been smart.

Hard disagree here. You need a language that more people know if you want contributors, and you need to be able to interact as well with other libraries/languages in ways that are understandable to the typical user. Lisp is, at best, an obscure edge case in the context of mainstream programming, and would severely hamper its adoption as an open-source project.

> Writing it in Go nowadays would probably be okay.

Ehh, I agree with this only because you're so noncommital about it. I agree that it would probably be okay. Rust would be far better, in my opinion, if we're looking for a modern language with far more memory safety guarantees (which IMHO is very important for low-level system services).

> Also, bringing INI to Linux is unforgivable.

I'd love to know what you'd recommend that would meet the criteria that INI provides:

1. Simple to read, simple to write (for users)

2. Simple to parse, simple to generate (for software)

3. Uncomplicated syntax that isn't prone to errors when being written or generated (e.g. wrong indentation in YAML, missing brackets in JSON)

I can't think of any options off the top of my head that don't end up introducing additional complexity with little to no benefit, but I'd be happy to be wrong.


> Resolved is useful if you frequently change networks (e.g. a laptop)

I can see the case. I use it myself on a laptop. And by "use" I mean that I just gave up looking into Linux desktop networking like a decade ago. It works, fine.

> I believe that part of the problem is that it is written in C, which is an absolutely terrible language for reasoning in. Writing it in Lisp would have been smart. Writing it in Go nowadays would probably be okay. But C is just an unmitigated disaster.

... this is ... incredibly wrong. Hardest disagree on all points here.


It's worth pointing out that Lennart Poettering simply rubbed some people the wrong way in his communication, and that ended up reflecting on systemd, irrespective of the software itself. (I am not making a case that this is good or bad, right or wrong. Just pointing it out.)

It was absolutely the way it was done and the arguments use to shut up the opposition. Then the distros all just adopted it and it was case closed and &*@#$#@ you. This happened with GNOME turning into some attempt at a tablet/phone UI and that upset enough of us to result in Cinnamon and MATE.

You have the people who like GNOME as it is now just as people accept systemd but you might as well be talking to Mac fans - to people who have to learn to like it because they have no choice.

Technically I think launchd might be the inspiration for systemd and for people who like the way the Mac works it's "yay" but it's not necessary.

Anyhow, I like dinit. It's declarative with a simple config language and not a monolith - absolutely perfect.



That looks not too bad considering what it does and the time range of CVEs

Maybe you can do a comparison to another well known open source project and see how well systemd fares: https://security-tracker.debian.org/tracker/source-package/l...

Or OpenRC, which is closer to a competitor, than an entire OS. [0]

[0] https://security-tracker.debian.org/tracker/source-package/o...


Of course, the scope is different, the kernel is about 30 times as large as systemd (which is less than I was expecting frankly), but they both match the description "low-level large C language project". Therefore in my mind they should have a similarl density of CVEs per lines of code:

Systemd has 4 open CvEs in ~1M lines of code.

The linux kernel hash 18 open CvEs in ~30M lines of code.


some?

Let's rephrase the question the other way: is there anyone who thinks that LP's attitude is fine?


> People have a right to build substitutes and replacements -- I believe in the "Let a hundred flowers bloom" philosopy.

It's a blessing and a curse. Look at package managers, they more or less all do the same thing, with one primary job of "go download some binary so I can run it", yet there's so many to choose from. Every time you read some Linux guide they have to list 7 different ways of installing the same package. It's stupid, probably even more so for the maintainers of those packages because they have to distribute their package 7 different ways. At least I'm glad systemd has mostly become the standard, so you don't have to also see 7 different ways of creating a service.


Usually, it's the distributions problem to package software. You as a software developer publish documentation on how to build your application and then simply wait for other people to do the packaging for you. The creation of services is the same, you can maybe create a recommendation, but the service definition is part of the package file and thus not your problem.

In practice, though, the packagers quite liked systemd, because it a) makes service definition easier than any other system, and b) it significantly increases the likelihood that the developer has already written a suitable service file (and developers will like that that is used, because it reduces the chance that a packager makes a mistake and increases their support burden).

And as an end user of multiple distros, I really appreciate it because I also have to make services on occasion and it's nice that there's one way to do it and it's pretty easy to do correctly.


Usually, this is not good enough. I as a software developer often make use of the package manager built into the language of choice and use that to distribute my software. I also commonly make use of package managers of languages that I don't use to install software.

We are overdue to package manager interop and common interfaces.


I think you answered your own question:

> monolithic

> It's philosophy may differ from unix's "get one thing done well"

> it is bloated.

Besides all this, the main issue, for me, is how it managed to spread and ingrain itself into distributions making them dependent on it.

If you want to use an alternative to systemd on those distributions, you are usually on your own, constantly trying to fix it whenever there are breaking changes.

It's good to have options which are simple to replace.

> It is chock full of features and it gets the job done.

So is Windows :)


>Besides all this, the main issue, for me, is how it managed to spread and ingrain itself into distributions making them dependent on it.

I don't think the phrasing is correct. Your choice of word (spread/ingrain itself) seems to imply there is malicious intent. Software do not sneak itself into distribution by themselves. It is the other way around. Distribution creators have total freedom on what components/software they find useful to build their distributions on. If a majority of distros decided to use systemd, that mean a majority of people maintaining distributions found the positive outcomes of using systemd were worth dealing with any disadvantage it may had over using another solution.


This isn't true. A lot of higher level stuff (e.g. GNOME) assumes systemd.

Which they chose for a reason.

> seems to imply there is malicious intent

There is. Well, sort of.

For example, we had cron working just fine for decades . We had sshd listen on its port for decades. We had fstab for decades. No one wanted systemd-timesyncd.

In my opinion, all these aux systemd projects came to life purely out of psychological reasons. Can we label them malicious?


Cron may have been working, but it had numerous deficiencies that could not be fixed. For example, there's no mechanism for preventing long-running jobs from piling up, you're on your own for logging and figuring out handling for failed jobs, and there's a litany of papercuts from differences in implementation across distros. Systemd timers solve all of those issues, while also granting access to all the other service-inherited benefits like cgroup isolation and resource control. In terms of features, reliability, and simplicity, cron is a poor substitute, and systemd timers really has no rival.

I agree that all of these are valid concerns.

Which we somehow did not have for the last few decades. I wonder why.


The reason is business demands. Maybe it's not the sexiest reason for ideological users or simple PC operators, but it's undeniably why systemd is the standard now. Enterprise applications (which comprise the vast majority of Linux users) needed to aggregate their reliability and observability data of their servers to deploy faster and keep their backend healthy.

There was a time, in the 1990s, when UNIX heavily leaned into the idea of multiuser multiprocessing. That philosophy is pretty much dead in a world that prioritizes networked systems, Docker images and idempotent deployment. Most Linux boxen are cattle, not pets.


> Which we somehow did not have for the last few decades. I wonder why.

Speak for yourself. Lots of us spent many man-months over years engineering around crusty 80s abstractions that no longer worked.


We had UNIX working fine, all these aux GNU projects came to life purely out of psychological reasons. Can we label them malicious?

> If a majority of distros decided to use systemd, that mean a majority of people maintaining distributions found the positive outcomes of using systemd were worth dealing with any disadvantage it may had over using another solution.

This is overall fairly weak evidence that users actually find the software to be of quality. Surely there's got to be a stronger signal that this is a positive way forward, like users enthusiastically saying "wow this is an improvement".


Weak?

I find it hard to imagine objective evidence more robust than the real-world actions of subject matter experts who make real-world decisions. This would have been hotly debated within teams of Linux experts at Debian, Ubuntu, Fedora/RHEL, SuSE, and Arch. These aren't armchair experts who debate on the internet, they're the ones who actually make decisions and, more than most, wear the consequences of those decisions.


> like users enthusiastically saying "wow this is an improvement".

Who are the users in this case?


Yes, systemd is wow, it's a major improvement.

> Your choice of word (spread/ingrain itself) seems to imply there is malicious intent. Software do not sneak itself into distribution by themselves.

No, you're right: It's people that do that. And those definitely can have intent (often benevolent, sometimes malicious, other times just so misguided as to be in-effect-malicious).

So let's go with "the main issue is how some people managed to spread and ingrain it into distributions making them dependent on it."

Does that make it much better?


How it managed to spread is no surprise. Linux desktop was a complete mess with consolekit and unmaintained stuff. Then they supported cgroups which distros wanted to use and since all the unmaintained stuff didn't there wasn't a lot of options.

Booting up a system is a complex domain. If you randomly cut a complex domain into pieces, you will have the exact same complexity PLUS a huge amount of additional complexity for all the communication/error handling between the different parts - what other complex domain uses million tiny tools? Does chrome use curl and then pipe it into a html renderer and whatnot? Sure, there are libraries (that's a different architectural layer though with less complexity to break, and functions don't decompose arbitrarily either). The unix's philosophy is more of a sounds good on paper, and there are certain cases where it applies - it's definitely not universal.

Also, the core of systemd is not even particularly big. People often mix into completely optional modules that run under the wider systemd project, but that's a false conclusion that "systemd eats the world".

> How it managed to spread

You mean that individual distributions voted/decided separately, multiple times to choose the better tool? Debian has the most democratic voting system and unanimously voted for systemd.

And yeah, if I want to use my own display manager protocol instead of X or Wayland I would also be similarly stranded. Options are good, but standards and compatibility are just as important - a million incompatible options only give rise to chaos.

I am, for example, very happy that Linux applications are finally not as distribution-dependent and there is a good chance to run that .deb file on anything else running systemd without much trouble. I remember the times when it was not so.


> You mean that individual distributions voted/decided separately, multiple times to choose the better tool? Debian has the most democratic voting system and unanimously voted for systemd.

They are influenced by other distros decisions. Debian's justification of adopting systemd starts "Systemd is becoming the de facto standard init system for Linux." https://wiki.debian.org/Debate/initsystem/systemd

I do not think this looks like a unanimous vote: https://www.debian.org/vote/2019/vote_002#outcome

> Booting up a system is a complex domain.

systemd goes far beyond this domain.


> You mean that individual distributions voted/decided separately, multiple times to choose the better tool?

This is a mystery to me. Given the LP attitude is known to be hostile to people with expertise and given the cancerous nature of systemd projects, I really wonder how did people choose to be treated that way.

Maybe they have voted for systemd-as-PID1, which is incomparably better than sysvinit, but this is the way systemd crowd got its foot in the door and before you know nothing works without systemd metastasis present.


Maybe you are wrong about LP? Then everything makes sense.

Exactly, Linus was an As*hole for a long time, and people still put up with him because Linux was good, I'm waiting for all of those people who hate LP to switch to BSD or something

You can’t pull the facehugger out, OTOH I wonder what form it will take when the egg hatches.

> Also, the core of systemd is not even particularly big. People often mix into completely optional modules

So how "optional" are those modules in practice -- how many systems run just the init core of systemd and not the whole shebang?

> that run under the wider systemd project, but that's a false conclusion that "systemd eats the world".

Isn't the very fact that there is what you call a "wider systemd project" at least a fairly good indication that systemd indeed is attempting to "eat the [Linux] world"?


>Besides all this, the main issue, for me, is how it managed to spread and ingrain itself into distributions making them dependent on it.

Because it's better than the alternatives?, don't remember systemd buying distro maintainers lol

>If you want to use an alternative to systemd on those distributions, you are usually on your own, constantly trying to fix it whenever there are breaking changes.

Of course they aren't being paid to support everything under the sun and http://islinuxaboutchoice.com/

>So is Windows :)

Then use it if it's better for you


> Can anybody explain to me again why systemd is so bad ?

It's huge, messy, has a poor bug and security history, obfuscates things that don't need obfuscating, and is just generally IMO not a clean or efficient implementation. It's a very Windows style solution, very different from the lean and minimal stuff I like to run generally.

The advantages it provides are questionable, and are dwarfed by the issues it has had in the past IMO.

OpenRC perfectly meets my needs at present and my system boots incredibly quickly. When s6 is finished that situation will only be improved.


It would be good to know if it's as ergonomic as systemd. I know it's not perfect, and sometimes the docs are confusing, but it is pretty simple to create a service that starts on boot etc. No scripts required, really.

It's pretty easy, you can add stuff to a 'local' script that runs last, or just create a new service and rc-update add new-service to start it on boot.

I'm not sure what's involved in the second of those options, but I think the first, if it means creating a shell script of some sort, is why people like systemd. It's config-driven, not script-driven.

Now I'd be up for a better config format, or perhaps other implementations that use the systemd config format, but I think config is a pretty good idea.


It doesn't mean creating a shell-script, when you install a package it comes with an openrc script. rc-update add servicename just adds it to the list of services to start on boot.

I have no problem with config, but openrc is simple and intuitive enough that no config file is needed.


Sorry - I might've miscommunicated. That side of things sounds fine, but it's the creating of the script itself that I think is nicer as configuration.

If you need to create a script, and generally you don't, then you just copy a template that has start, stop and restart functions. Generally it's not more than launching an executable and killing a process or doing both.

It's certainly not more complicated than authoring a unit file.


Half the things you said are straight up lies and the OpenRC is a good example how miniscule your world is

> Half the things you said are straight up lies

lol, no.

> the OpenRC is a good example how miniscule your world is

Weird attempt at an insult, but ok.


> OpenRC perfectly meets my needs

What distro are you running?


Alpine. It's wonderful. I've always liked minimal distros, and Alpine actively facilitates that. It doesn't get in the way, has everything needed to run a modern desktop, and the focus on security and musl compatibility are huge pluses.

Don't worry, it's not for long. They are eyeing systemd port, too.

No they are not. Systemd is very incompatible with what Alpine is trying to and succeeding at doing.

PostmarketOS which is based on Alpine switched to systemd, but I've seen nothing indicating Alpine is interested in doing so.


I have read somewhere that some kind of port is being discussed, perhaps at Phoronix, but I cannot find it now. Maybe I have confused something, so I stand corrected.

systemd is indeed totally incompatible with musl libc.


> systemd is indeed totally incompatible with musl libc.

It's more that it is incompatible with being small, lean and secure.


I gave up systemd for openRC on Alpine. Much better suited to my own needs, and uptime is vastly improved.

It really is a world of difference. I think the only people really championing systemd are those that found writing scripts and futzing around too complicated. They wanted open-source Windows and they got it.

I've noticed the folks who like it tend to want to get other stuff done, don't care about the details, and want things to 'just work'. The ones who don't like it seem to be the folks who do low-level stuff and have to interact with more than it's "happy path" abstractions. i.e. the ones who actually have to care how it was architected.

Sysadmins that have to care how the system is running and being organized behind the scenes gonna kill someone before they have to went back to bash script for system management, people who complains about systemd do it because ideological reasons, don't like LP, Unix philosophy or something, etc, or never learned it and want to argue that their mess of bash scripts, that they use solely to boot their system and nothing more, are somewhat more stable or secure

From the problems and use case you're describing, that's the first category: sysadmins who just need stuff to work so they can move on.

> it gets the job done

Except exactly the opposite is true: it is sysvinit (and derivatives) who had the job done. In a very basic way, slow and perhaps not even compatible with modern requirements and expectations, but the job was done.

Systemd on the other hand does the job it thinks should be done, not you. Your opinion does not matter.

You can spend however much time you want editing /etc/ssh/sshd_config and then restarting sshd and then pulling your hair out on why tf sshd ignores certain options while still definitely parsing sshd_config. Only to later find out that systemd/ubuntu crowd decided to listen on port 22 via systemd, sort of like inetd did back in the days. It's like sshd directly listening on port was not good enough for the last 30 years, definitely had to be changed. Oh yeah, and to make your life miserable, they mask the name of the listening process with "sshd" in it, so you get confused even more.

And people can come up with countless of similar examples.

Incredible attitude and arrogance is what makes people hate systemd.


I'm sure you have other examples (and I'm not really asking for them) but your sshd example would make me dislike the choices Ubuntu made, not systemd. Like I don't blame systemd for snaps being so awful.

You are technically right.

My view is that there is an attitude/approach spillover from systemd crowd into other teams. Switching port 22 from sshd to systemd was not something that any sane person could come up with. It's a stream of incredibly hostile decisions from systemd upstream that allowed that kind of thinking.


Or maybe the people who think it's a good idea have a different perspective and value system to you?

Labelling a technical decision that was made about a system design (that a lot of people agree with) as "not sane" makes you look like a fundamentalist.


I would like to talk to a sane person who

* decided to covertly move port 22 from sshd to systemd while actively masking the change so that `ps ax` shows "sshd" in the process title

* decided to not mention this fact in sshd_config while leaving the Port configuration clause in place

Yeah, call me a fundamentalist, I would like to talk to a sane person like that.


Good luck using software you don't like, I guess. Each to their own.

Sysvinit left everyone to their own ends to write their own bespoke special ways of configuring & running services. With no security options and no consistency.

Personally I found that to be offering nothing at all & having every maintainer and sysadmin diy their services to be incredibly inefficient & waste a ton of time because every service you looked at was potentially built from a different init skeleton & modified in bespoke unique ways.

Sysvinit offers way way way too little.


Let me reiterate: sysvinit had the job done in an extremely inefficient way that it's not really feasible for long ago. Upstart tried to remedy that but failed.

sysvinit was bad, no arguing about that, but it was controllable, predictable and comprehensible. While I believe that there was a time when systemd-as-PID1 looked like an excellent solution, I am confident that systemd has none of those qualities.


This is an thesis without argumentation. You've made no assertions and no statements that can be validated or refuted. You've said nothing. Few systemd haters do, in my view.

There's a lot of reasons to be pro systemd, because it does so much cohesively & well.

But if we just look at the task of running jobs, if we ignore all the other excellent management & other things in the systemd monorepo: when it comes to running programs, systemd is millions of miles head and shoulders above everything else. Like, everyone else was throwing shit up in the air, and systemd was launching fucking rockets. Nothing else has had even the faintest dose of taking itself seriously or trying to get good: it's all been sad recreations of 1970/1980's with no acceptance that the scope needed to be bigger, that we should have better more secure ways of running services.

Upstart may have been a semi ok way of wiring some kind of graph of services together, in an event based way. But honestly I prefer systemd's level-based way, rather than evented, because events don't reconcile in stable ways and level-based relationships do, are understandable not just sequences of actions but as relations of systems.

Its daunting as fuck, and I think this is why most haters hate systemd: because they don't want to get better. But a third of what's available in systemd.exec and systemd.service is absolutely crucial brilliant bundled-in ways to make your service more secure, to make it less of a risk. It exposes incredible awesome things the OS could do that most people simply never got good at doing, that the anti-pattern of sysv never could encompass. SysV said it was up to every service to define their own init scripts, and most of these were very very very dumb init scripts, bespoke and unique and brutally dumb mostly, grafting some random shitty bad shell scripting to running something in the background. Systemd exposes a cornocopia of offerings that Linux has to do this, but securely, safely, with isolation, in a standard, clear/concise (not having to delve into bespoke shell scripts) cross-cutting/repeatable way. Whats on tap here is amazing. None of the haters seem to have the faintest most remote appreciation or interest in getting good, in making any of this incredibly good potentiating shit available or on tap, much less in any repeatable consistent clear fashion. I think the haters are playing at such deeply sad forsaken stupid levels, actively fighting the ability to appreciate even remotely the awesome forces they - if they had any idea what was good for them - would be moving towards, be it via systemd or other.

Yes, 1/3rd of this is incredibly niche. 1/3rd is common/good/necessary and somewhat buried amid the rest. 1/3rd of it is just fantastically good security/safety practice that no one did, that no one knew about, that's just on tap, and easy to bring in, that's so accessible, that was so hard & weird & difficult to do before, that's such a colossal improvement in posture:

https://www.freedesktop.org/software/systemd/man/latest/syst... https://www.freedesktop.org/software/systemd/man/latest/syst...


> ...everyone else was throwing shit up in the air,

Yah, well, systemd has thrown shit at me. Depending on the Distro, time, maybe hardware/firmware too, while other inits&(service-)supervisors didn't at the time.

> ...and systemd was launching fucking rockets.

Which sometimes go BOOM in spectacular fireworks. It's not exactly that it has reached the state of full reusability like SpaceX intends to ;->

> ...because they don't want to get better.

Maybe some, not me.

See? https://postimg.cc/CZtH4rHp Système D whoohoohoondrrbarr! Arr tyarr tyarr!1!!


"and it gets the job done."

Until it doesn't. Fortunately I didn't have to debug it often, but when it was a lot of pain.

I prefer the fs under /tmp to be tmpfs. On the BBB is wasn't. I changed that and on next reboot the system didn't come up again -- no way to log in. Why? And what to do? Turns out I failed to state the fs_freq and fs_passno fields -- those aren't optional, but while the old mount tool tolerated their absence, systemd chose to interpret the fstab strictly, failed to mount that fs, consequently didn't reach the local-fs.target and hence didn't offer any way to log-in. Unlike Raspberry Pis, the BBB doesn't offer the possibility to remove (and mount and debug elsewhere) the boot medium. Fortunately, I found help on-line on how to connect a serial terminal to the BBB and interrupt the boot process, forcing the use of /bin/sh as init process...


Big monolith that imposes requirements on your system and robs one of the feeling of knowing how the whole thing works?

At least that’s me. I use systemd in most of my installs for reasons similar to yours, but nothing feels more sublime to me than installing a simple init system and a few other daemons for system features I actually use.


What requirements does it impose?

Also, feel free to "rob that feeling back" by learning how systemd works


Ok, try to go off the well trodden path of a default systemd setup.

Eg. make your system "login interactive" before networking and other unneeded services (database, web server, whatever) are even attempted to be set up/started.

Use just drop-in configuration fragments (*.service.d/override.conf) without making an unmaintainable mess (ie. without making your own copies of whole, OS installed unit files).

That should get you the feel. :) And it's not something crazy, it's just basic re-ordering of dependencies.


Its not that hard, just a matter of reading the systemd documentation and learning about default dependencies: https://github.com/lukasstraub2/systemd-delay-services

Indeed, nothing crazy.


But all I want is to not have login prompt processes (getty) wait for seemingly unrelated things, and start as soon as possible.

In a friendly system, I'd just edit the getty service config and change After/Before/whatnot and be reasonably confident I didn't break anything. But

1) it's not possible, you can't just override After/Before alone.

2) systemd doesn't make it easy to inspect existing relationships in a simple to understand, localized manner in the first place. So unless you're the one that wrote all units in the system, getting a concept of what you'll possibly break by changing things is almost impossible, without just rebooting and seeing if the system will start up.

You can create a massive SVG of dependencies from systemd-analyze, but that's really not that helpful. It's a picture that has at least 10 meters on one side. :D


> What requirements does it impose?

Numerous kernel features, reliance generally on it by itself and by third party programs (running ceph w/ openrc is hard bc it assumes systemd is present). I’m buying the full car when I use it, when what I really want is a kit that I can optimize for purpose. Honestly though, this close integration is worth it. My main OS build at the moment is pretty much just systemd and podman on top of linux.

> Also, feel free to "rob that feeling back" by learning how systemd works

I really want to! I just don’t know any good resources that can help get me familiar with all it’s doing for me in the background. All I know about it is what I have gleaned from tutorials, I don’t yet feel I know what’s possible with it yet.


>learning how systemd works

Waste of time. It's easier to get used to a systemd-free distro


That's a really negative comment with little to no contribution to the discussion. Care to elaborate more on that, so that we can discuss detailed points instead of blanket statements?

In my experience, it doesn’t get its extremely simple job done.

I’ve tried a half dozen systemd distros. Each one hit some insane bug at some point that took a day to debug. Every single time, it was some undocumented systemd thing that has no reason for existing.

Anyway, it’s all devuan and openbsd at home these days. I’ve had zero non-hardware related issues in over a year.

Actually, that’s not true. Devuan still defaults to pulseaudio (the moral precursor to systemd), which still doesn’t support locking your audio output port in a way that survives reboot. It also crashes randomly when audio ports come and go. The upside is it randomly requires a reboot or moves audio out to an unconnected jack.

I replaced it with pipewire, bringing the number of Poettering services on my machines to zero. Now things work reasonably.


My n=1 is that I only ever had problems with it during the "early days", now I just use it and get on with things. I can't recall the last issue I had with systemd. tbf I generally only write a few scripts and rust microservices that need to be loaded/start/stop/reload... It's simple to add them to the systemd process. The rest of the system stays out of the way. I will admit I stick to more conservative systems like Redhat and Ubuntu LTS. I guess everyone's opinion is valid on this. It's definitely kind of heavy but it's next to nothing of a load on modern systems of the past 7 or 8 years.

Pipewire has pulse protocol behind the scenes, so your still using his tech you just don't know about that, also I got it now, is mostly ideological thinking and no reasoning behind systemd hate, is about not using that person tech, and if you break dozen of distros messing where you shouldn't the fault is yours not the distro

And yet, some of us manage to successfully run critical national infrastructure on stacks that include Linux distributions running systemd.

I think you are beating a somewhat dead cow here. systemd wars are over. It's in most mainstream systems nowadays, but there are also lots of cool projects out there doing different things. Everything's fine, nobody wants to go into those old pro and con flame wars any more.

> systemd wars are over

Well yes but actually no.

With every new Ubuntu version I have to carve out new metastasis no one asked for. For example, 24.04 (or maybe even 23.10) changed the way sshd is started up - by systemd listener instead of sshd on its own like it was for decades. This way they saved a few megabytes of RAM (solely on computers that are not exposed to the internet, of course).

While fighting against systemd-as-PID1 is futile for many years, fighting against the spread is definitely worth it.


So you are mad about Ubuntu, not upstream systemd?

It's the culture that I'm mad about, and it's coming from systemd crowd.

Is this some kind of conspiracy theory? Free software developer exchange theory?

Everything is fine, unless/until many developers begin to assume systemd is present and make software ports to non-systemd Linux (or *BSD) systems prohibitively expensive.

> Everything is fine, unless/until many developers begin to assume systemd is present and make software ports to non-systemd Linux

Nothing wrong with this if a system service is going to be present on 99.999% of installs and frees the developer from having to do work.

e.g. GNOME swapped its service manager for subprocesses (e.g. bluetooth) to systemd user units because it does a far better job.


> Nothing wrong with this if a system service is going to be present on 99.999% of installs

Is there a sign linux installs will hit this metric in our lifetime? I don't think there's any strong indication of this. There are multiple distros devoted to not moving to systemd.

> GNOME swapped its service manager for subprocesses (e.g. bluetooth) to systemd user units because it does a far better job.

Not on computers without systemd it doesn't! Besides, Gnome still runs just fine on systems with init scripts like *BSDs with no visible loss of quality or stability so this was a purely political choice to spite their own linux user base.


> There are multiple distros devoted to not moving to systemd

Yes and zero have wide spread adoption outside of specific use cases (e.g. Alpine with containers, Android with its.. slop).

As far as base distros go, only RHEL and Debian have any wide spread impact and both use systemd.

> so this was a purely political choice to spite their own linux user base.

It's possible the old system exists as a fallback, but it wouldn't surprise me if its not guaranteed to stay around. People aren't required to support other peoples choices unless you pay them.


Does bluetooth actually work on *BSDs?


> Nothing wrong with this if a system service is going to be present

This kind attitude will be the death of Linux. In the form of systemd-os.

> a system service is going to be present on 99.999% of installs

It's not, because a large number of users and system administrators dislike it, and don't use it. And the high number it does have is mostly due to distributions forcing it on you - so that you can only remove it by switching distributions altogether.


> In the form of systemd-os.

I like that, because it's so easy to change into systemDOS. AKA Denial Of Service. :-)


Fair, point taken: Some people are working on systemd replacements because they want to build some cool things in that area. Just like there are multiple programming languages and no one says "Why don't you just use Java/C++" it should be OK to work on Linux systems without systemd and not think too much of it.

This doesn't make sense. I, for one (transitioning to Linux usage only gradually), haven't been aware of the systemd and its criticism, and I'm grateful for the info. Then, the informed users can vote with their feet. Things change all the time, and only mass adoption/usage is what makes a given distribution to be mainstream or niche.

So, please do continue to criticize, continue to raise awareness. That's useful.


> Then, the informed users can vote with their feet.

That's the thing, that it is quite difficult to vote with your feet. You can't remove systemd from your distribution in favor of separate independent facilities: The combination of its design, its gradual expansion, and the way some higher-level packages depend on it (especially GNOME) - typically prevent its removal.

So, you would need to switch distributions, which most users are not very inclined to do. And - even then, you look around, and you see that the big basic distros: RedHat/Fedora, Debian (and Ubuntu), Arch - use systemd. So almost all of the distributions based on them are also not an option if you want to avoid systemd.

... and the bottom line is that users will effectively not vote with their feet. And neither will system administrators, or whoever maintains OS images at organizations, because it's difficult for them to tell their superiors they want to switch everyone to, say, Slackware, or Devuan.


I really also don't understand this. I started using Linux on server OS around 2010. I think this was not long before SystemD was available in Ubuntu by default. I found writing or even understanding init scripts was really difficult for me. When I first had to get a program running under SystemD it clicked immediately and it took me about 4 hours to get it run reliably and that includes learning systemd.

I find it easier and better on so many levels!


Systemd is one of the most complex and difficult to understand parts of your system. Did you know it contains a virtualization manager.

>I find it easier and better on so many levels!

Openrc is by any possible standard easier to use. Among the reasons is that it does not include a way to create virtual machines.


I did not know and I must not know that to get a service running on start.

>I did not know and I must not know that to get a service running on start.

Exactly. So why is it part of your init system? Can you think of a reason why it is not a totally separate project which is totally independent of systemd?

From a surface glance systemd and openrc are almost identical. Both require very little to get something to work. The difference is that systemd does a million things more.

What you probably should know though is that many systemd distros do not have a real fstab, the fstab is just a file which systemd uses to create mount units, which are then used during boot.

Another important piece of knowledge is what a systemd "transaction" is, that is a very unintuitive concept which you absolutely need to know if you are debugging on your init system.


> Exactly. So why is it part of your init system?

Is it?

Systemd is not an init system. One component of systemd is an init. There are other components.


And that is why people hate systemd. Legitimately one of the worst software projects in existence.

People hate it because one part of it is designed to run as pid 1? I don't follow.

(People hate systemd? They hate a piece of software? Eesh)


Yes, I certainly do hate systemd. Its pid has nothing to do with it.

What has to do with it is people being unable to tell you why it contains a virtualization manager. In fact the response "it is not an init system" tells you pretty much everything. It is a terrible piece of software, which has completely lost all focus.


I hope you get to a happier, less angry place in your life where you no longer hate an inanimate piece of software.

I hope you get to a friendlier, more enlightened place in your life where you no longer feel the need to retreat from your lack of an actual argument into supercilious snark disguised as patronising benevolence.

> Exactly. So why is it part of your init system? Can you think of a reason why it is not a totally separate project which is totally independent of systemd?

What?

You can use SystemD to have services like a webserver or a python script started after boot. Doing it with systemd is exponentially more easy than with an init script.

How else would you start that if not with systemd (if that's all you have). I'm not sure you really understand what you can do with systemd, or you would not have written the comment you did


Some defaults are not good for servers. For example, systemd gives up after a few tries to restart a service. This is really annoying for server administrators when they don’t know about the bad defaults.

https://michael.stapelberg.ch/posts/2024-01-17-systemd-indef...


If a service fails to startup after n times, I most certainly want to take a look at it as it might as well just end up corrupting its state even more - I don't think it's a fair assumption that most errors will just go away on their own. Nonetheless, it can be configured declaratively as a single line, and as you mention, the default can be changed.

> Can anybody explain to me again why systemd is so bad ?

See the slides of the linked talk, starting at page 7: https://cfp.cccv.de/media/38c3-community-stages/submissions/...


> Guix solves the following problem: – I love scheme and want to minimize the number of hours I spend dealing with any other programming language.

This is a pretty common feeling after writing a couple of nix packages.


> Can anybody explain to me again why systemd is so bad ?

it isn't, it's great. it is different, though.

and then come in two phenomenon:

1. people resist to change, often out of ignorance.

2. some people tend to look at tradition and consider it just better, without much reason. "unix systems in the 80ies had shell scripts to launch system services, that's what i shall do in the 2020ies".

> Yes, it is maybe monolithic (but so is the Linux kernel).

it really isn't, it's largely a collection of relatively small binaries that do one thing well but they are designed to work with each other. systemd appears to be monolithic from outside, but it really isn't.

> Maybe some of them will get bloated as they achieve feature parity.

they will, most likely. it's easy (as a piece of software) to be lean and clean when you're doing very little (with little error checking and recovery).

> However I can't understand why systemd is the point of so much disagreement.

systemd was essentially pushed down everybody's throat by Red Hat when they realized it was high time to level up the boot process for the whole ecosystem. systemd made a bunch of things not only feasible (concurrency, on-demand service activation, multiple-instances of the same service running, proper log management) but so easy they're trivial.

so 10+ years, it's definitely a net positive.

some people are still complaining but meh, some people will complain anyway, so let them talk, whatever.


>> Yes, it is maybe monolithic (but so is the Linux kernel).

> it really isn't, it's largely a collection of relatively small binaries that do one thing well but they are designed to work with each other.

So where are all small the projects trying to replace the small parts of systemd? AFAIK there are no stable or convenient APIs in all those parts, so even though technically systemd consists if many binaries, it is monolithic.

This is exactly what people call "forces distributions to use it", i. e., you must choose all or nothing.


I don't believe Linux userspace maintainers are lining up en masse, plus if your alternative implementation doesn't significantly improve the status quo, why even bother?

Here in the comments you can find a lot of complaints about non-main parts of systemd, which could be improved easily if it was actually non-monolithic.

> So where are all small the projects trying to replace the small parts of systemd?

you should go ask that to "small projects" developers, not to systemd developers, i guess


There are always people improving small things as a hobby - except for the systemd components. It tell us that it's harder than it seems.

Yes, it is harder to change components that people actually use and don't accept regressions on.

Tell that to the developers of various desktop environments.

> systemd appears to be monolithic from outside, but it really isn't.

If it looks like a duck, walks like a duck... systemd is modular solely in theory. In practice, I am grateful that I can still remove journald and resolved from current Ubuntu installs and I'm pretty sure that's not going to be possible quite soon.

Systemd itself may be modular, but practically distros are not going to bother.


> 2. some people tend to look at tradition and consider it just better, without much reason. "unix systems in the 80ies had shell scripts to launch system services, that's what i shall do in the 2020ies".

And from that the systemd crowd tend to draw the following conclusion: if something was done a certain way for decades then it is bad and should be replaced.


Seeing how good systems is and remembering how messy it was to work with init scripts, runlevels and other stuff… i guess they were/are right

I have the opposite opinion. Init scripts (upstart!) were reliable, transparent, consistent and manageable.

Systemd is none of those things.

Having said that, I have to additionally admit that init scripts had to go at a certain point. It's hard to imagine a modern scripts-based PID1. Times have changed.


>they will, most likely. it's easy (as a piece of software) to be lean and clean when you're doing very little (with little error checking and recovery).

Why would you even begin to think that openrc would ever want to include a whole virtualization manager. Are you serious?

>but they are designed to work with each other.

And they are not designed to work without one another. See e.g. dbus and how hard it is to get it working on non systemd systems.

Systemd binaries aren't drop in features.


systemd has done nothing but make my life easier. The people still moaning about it simply haven't used it and refuse to learn.

Nothing makes my life easier than pulling my hair on why tf sshd listens to port 22 after editing /etc/ssh/sshd_config and restarting multiple times. Oh, of course, it's now systemd that listens to port 22, not sshd.

Nothing makes my life easier than cleaning out crontabs of things that wake my box in the night and find out that something still gets launched. Oh yes, systemd now has timers no one asked for.

Nothing makes my life easier than disabling a service then masking a service then masking it's sockets, then blanking files then chattr +x those files and end up having broken ubuntu instance because there are so many ways to launch a service it's not even funny at this point.

Nothing makes my life easier than finding out multi gigabytes /var/log/journald folder that has exactly zero reasons to exist because text-based logs are still collected and properly rotated in a place where any sane person would expect them to be.

Shall I continue or do you get the gist? :-)


Anyone who tries to use complex software without really knowing what they're doing is going to have a bad time. I'm not sure that's the software's fault :-)

Well I was using (and developing) ssh well before the majority of commenting people were even bore. But sure, that does not mean a thing.

An important skill in life in general is to understand that your personal needs and requirements are not the same as everyone else's.

Some people may be at the other side of bell curve of "understnanding systemd on X axis" and "liking it on Y axis" of the graph. :)

There is a wonderful talk by Benno Rice a few years ago. Insightful and entertaining. Not focussed only on the negatives, BTW.

https://papers.freebsd.org/2018/bsdcan/rice-the_tragedy_of_s...

https://www.youtube.com/watch?v=o_AIw9bGogo

HN discusion: https://news.ycombinator.com/item?id=19207533

LWN comments: https://lwn.net/Articles/777595/


For the GP: This is not a talk which explains why systemd is bad, it's a talk which argues which systemd is good and misunderstood. Which I don't agree with, plus isn't what you asked.

Indeed, as the LWN reported stated: "His attempt to cast that story for the pleasure of his audience resulted in a sympathetic and nuanced look at a turbulent chapter in the history of the Linux system."

I believe "nuance" is the key word here.


In the last two years I have spun up new-ish, actively supported versions of ubuntu for pre-production rollout that were shipped with a systemd-resolvd that would occasionally just stop responding for no reason. Logs said nothing was wrong, process was UP and saying it is ready to do work. strace shows a hung process.

Stuff like this is possibly where the complaints from some people begin.

Fortunately, I can find a tracked bug that is active. New updates get pushed, as the honestly phenomenal community of people intended this process to go. But How may years have some of those people been patching bugs like this in systemd on a regular basis? Did that time have to be spent if systemd's architecture was better from the get go?

The Trail of Bugs to get to the point we are at today has truly taken a monumental effort from MANY people. Why wasn't systemd's community doing things well "enough" from the beginning before being folded into so many OSes?

Let's be real. From then till now they have put in hard work, in the face of huge community pushback, because someone had to do it.

Diehards feel it felt "foisted" upon us before it was fully baked, everyone knew sysvinit was way past its prime. Put up or shut up. Plug in a different init for your OS and move on.

But, you know, people like talking and complaining to each other. It's a very important part of solving technical problems!


Resolvd is not part of systemd's core. Would some KDE app misbehaving be a fair criticism of the whole project?

Also, I would be delighted to see that mythical program that requires no maintenance and just works^TM.

Also, what does it have to do with systemd's architecture?


The vast majority of criticism of systemd would cease if it were made out of easily mixed and matched components which worked independently of one another.

The goal of systemd is of course to be a highly integrated system which solves everything. As can easily be seen how hard it is to run e.g. dbus without systemd.


I think the previous poster made it clear they were just explaining where the complaining comes from. Why are you trying to debate their description of other people's motivations for complaining?

> Resolvd is not part of systemd's core

It sure feels like it because Ubuntu insist on installing this incredible piece of software even on the server installs.


> Would some KDE app misbehaving be a fair criticism of the whole project?

...yes? If dolphin sucked then that's a fault in KDE.


> Diehards feel it felt "foisted" upon us before it was fully baked

That was the minor problem. The major meta-problems are that:

1. The baked form itself is broken. It has numerous fundamentally flawed aspects to its design (and to its existence as a project). More baking would not have helped this.

2. It is not intended as an option, nor even just the default option - but to make more and more utilities and libraries for managing various system facilities and services become unusable and incompatible, to be taken over by systemd. It's not like foisting, say, Thunderbird instead of Evolution as the default mail client; if you don't like it, you run the other thing. Or even version X of the kernel instead of version Y of the kernel and so on.

> everyone knew sysvinit was way past its prime

At this point we can say with clarity that systemd has almost nothing to do with the choice of init system. You could replace the init system with any number of things - some already existing 15 years ago, some which could be developed in the mean time. In hindsight, this is an excuse and not a reason.


> Can anybody explain to me again why systemd is so bad ?

Mostly I seen misguided criticism from less technical people that don't understand systemd but seem to like the idea of fitting in and have identified that a certain few verbal linux users they consider to be cool hate it with passion.

It's really dumb and boring and they often resort to just make stuff up. This thread has a bunch of such comments.

Systemd solves countless real problems and helped linux grow in many ways.


NixOS is great at mitigating some of systemd's sharp edges and putting its actual properties in stark relief so that they can actually be evaluated logically (and even swapped out for alternatives without having to drastically change the whole OS distribution).

Things I do not like:

Configuration splayed out amongst tons of tiny .ini files (this manifests in nixos by a mostly boilerplate ~10 line config burp for every service)

Multiple dependency types including its own enable/disable system including a whole parallel configuration tree of symlinks, as opposed to the simple/standard/traditional approach of configuration being disabled by not existing.

Network interfaces/drives/etc splayed out each into multiple services, some from concrete configuration, some implicit - seemingly to make everything visible to its uniform model.

Complex logical model making it hard to debug it without using bespoke tools to analyze dependency graphs and whatnot.

I'm not sitting around hating on systemd because sysvinit was also totally overwrought and obtuse, and BSD style init scripts weren't really scalable. But I get the hate. And I totally see the room for a drastically simpler init system (especially for NixOS). It's fantastic that someone finally dug in and attempted it.


The UNIX philosophy (about which there’s a book by the same name by Michael Gancarz, and which I highly recommend) Is that each tool should do one thing and do it well.

The old school init styles, whether BSD or SysV, adhere to that philosophy.

Systemd is a travesty. I think it was about a decade ago that there was a remotely exploitable root equivalent compromise in the system DS built in DNS resolver. And these days includes not just DNS but also privilege escalation and who knows what else

It’s probably fine for most people and most purposes. And by fine, I mean most people can probably use it and never see a live exploited against it.

And if you care about security, you can probably apply enough mitigating controls that it’s not gonna be a disaster for you.

But for me, defense in depth means avoiding systems to begin with and not trying to bandit over the problems with it


I think OpenRC is easier to use.

But overall, I agree on this point. Having been a Gentoo purist during Uni time, I'm now full on NixOS. NixOS has fully abstracted away any interaction I have with SystemD, so I don't think it's useful to replace it.


How much does it abstract it away? I'm not much of a big Linux user, and when I am, the random 99-something-something files always irritate me because it seems totally arbitrary. Does NixOS prevent you needing to writ "unit" files?

OpenRC might just be easier to use because it does not include a manager for virtualized machines.

>Can anybody explain to me again why systemd is so bad ?

I only started to hate systemd when I really had to work with it in depth.

It is hard to understand unless why people hate it if you view it from the surface. On a high level there is nothing wrong with it. If you had to write a basic unit file you could easily do so, there are just a few basic concepts and keywords you need to know to get it working. From that perspective systemd is very much like openrc, which works very much in a similar matter.

Systemd is not bad because it is "monolithic" or because it violates some "UNIX principle" or because it is "bloated". Systemd is bad because it is made by people who have no idea what they want to make and who seem obsessed with solving every single problem they can imagine.

Did you know that on Ubuntu your fstab is fake? It is just a file which tells systemd which mount units it should create during boot. (https://manpages.ubuntu.com/manpages/focal/en/man8/systemd-f...)

Did you know that systemd contains an entire virtualization manager? (https://www.man7.org/linux/man-pages/man1/systemd-nspawn.1.h...)

Did you know that you can use systemd to manage network devices? (https://www.man7.org/linux/man-pages/man5/systemd.network.5....)

Why do these things need to be part of my init system? I can not even imagine what the answer could be.

Systemd is an enormous C project, which has innumerable features, many of them used extremely infrequently and which wants to perform very important tasks for your OS. It has lost any focus on being an init systemd.

People hate systemd because it is bad software and it is bad software because it has no idea what it wants to be. The systemd documentation is one of the biggest rabbit holes in computing.


These aren't part of the init system, they're optional components of the systemd monorepo.

Yes I knew all of these & have used all of these optional components. And they have provided immeasurably better administration than the historical tools that purported to do these jobs before, with far more consistency & clarity about their functioning.

Agreed that there are lots and lots of features. Buts its amazing. Oh you want to make this service secure, with temporary users & limited permissions and limits? Sure of course. Oh you want service restarting? Not perfect I agree but pretty good for me, and avoids some thundering herd problems I've seen other service managers have. There's so many things we could be doing, to make systems better, and a lot of people really are intimidated by & hate the fact that theres a much more competent cohesive system that shows such a lack with the bare bones unchanging unimproving inconsistent low-end insecure dirty past.


Having to work with systemd was the most miserable I have ever been in my life. It is genuinely terrible software and a total pain to use,

For me, it's primarily its scope. I had a system for 10 years that changed, but fundamentally worked the same. With systemd, the changes exceeded my threshold and continue to expand into something that to me, seems ugly.

I'm not a typical example. My view is inarticulate, subjective and maybe even irrational, but I remember the system I came to love and that was Linux. My overwhelming impression with systemd is that it's not Linux and it should not be referred to as Linux or even in the context thereof. It's not evil or bad or anything but itself, but it's not Linux. In my abstract, medieval view, Linux has a soul, albeit, at times, a tormented one. Systemd exorcises this soul for me.

Now despite me disclaiming the subjectivity and abstraction of these perceptions, I'm pretty certain there will be some hostile replies, possibly with valid points. If you're really trying to understand the creature, I suspect it's very improbable that it will happen here. There are existing strong, well written arguments both for, against, and even neutral. Definitely worth one's time if understanding is the true objective.

For me, it's scratching a chalkboard and smells bad. It frightens me and makes me sad. It's worse than brussel sprouts and freaks me out.


"My overwhelming impression with systemd is that it's not Linux and it should not be referred to as Linux or even in the context thereof. "

Yes, systemd is an init system/service handler (and a lot of related utilities) running on top of the OS kernel Linux. They are two different things working together to make an usable OS.


Thanks for the intel man. I might have not known without your help. And I'm sure you wouldn't insincerely leap on an overly literal interpretation just to leave a silly comment.

But yeah, you cracked a tough one there. Two separate things. Who'd have thunk it!


Happy to help!

> I believe in the "Let a hundred flowers bloom" philosopy. However I can't understand why systemd is the point of so much disagreement.

Your first sentence explains, to a great extent, your second. You see, systemd is designed to _prevent_ a hundred flowers from blooming. Unlike most Unix-like system components, the idea is for systemd not be an alternative replacable component, but the whole installation above the kernel. You don't choose things; you get those services and facilities which live within systemd; and those which don't - mostly won't work. That is, unless you tear out everything related to systemd. Which is difficult, since GNOME and some other packages over time have introduced dependencies on systemd, rather than on services or facilities it provides via a common protocol or interface.

This was also how the big Debian debate exploded, causing the fork of Devuan: The "opposition" did not demand "No systemd in Debian!", but rather, that the user would be able to choose not to have systemd at all, if they so please. I am paraphrasing from memory of course, but I believe that was the gist of it.

And the speaker in this video faced this situation.

I am not well-versed in NixOS and certainly not in this new project, but I imagine that if the author could easily just configure NixOS not have systemd, they might not have bothered starting this project and would more likely have published some kind of recipe/how-to page on


Sorry, but there many people who do not like bloat, bad practicies and daily security bugs, partially because of the aformentioned bloat. If we settle this "gets the job done" mindset we are never going to improve.

It might be just psychological not technical.

Humans have a natural tendency to change resistance. This tendency tends to be higher in sysadmins who are often deep into autistic spectrum.


It's incomprehensible. I make some changes to config files and they don't apply so I have to find whatever poorly-documented systemd thing is controlling it instead. It is taking over every important area of the operating system. Init, login, boot, it just keeps spreading. I think on other Linux systems I am better able to reason through and modify aspects of the system or fix a problem I am having.

I have been trying out atomic Fedora and enjoying it. I like ostree, read only root, podman, building the distro from containers. I think I have had enough of systemd, though, and might move on because of it.


Just see `systemctl $command $unit` to discover that systemd it's not designed by sysadmins, while it's built for them. That's it's problem, like stratis/btrfs vs zfs.

These are software designed by people who have no experience in user-centric design, they design in theory, reasoning in theory, ignoring practice.


SystemdD does too much and it's like a monopoly, because it's so much work to replace, it can piss you off a lot, it needs to be very shitty for you to replace it.

Because Karen Sandler made it a hard dependency of GNOME, effectively forcing every distro to adopt it or give up GNOME. In Linux, parent processes hold dominion over all child processes, due to the way things like ptrace work. So it was a coup d'etat of the entire userspace. Then next thing you know, systemd took over the bootloader too, which gave it dominion over the kernel as well. Old school sysadmins don't like being dominated. Especially not by some useful stooge like he who shall not be named. The source code of his projects is open source in name only. Least hackable code imaginable. Almost like it's machine generated code to make the sources as opaque and inscrutable as possible. It uses binary formats to log data, exchange messages between processes, and other awful things to obfuscate its behaviors. Someone with zero gravitas shouldn't be reinventing the vision of Bell Labs and forcing their ideas on others through NGO policy changes. I'm surprised Trump hasn't signed an executive order banning it. Even the name itself, System D, expresses this arrogance, since it claims to be 100x better than UNIX System V, because D=500 and V=5 in roman numerals. Being forced to use this init system changed the workflow and daily lifestyle of every sysadmin. In one fell swoop they took an OS that's open, transparent, and owner controllable and made it into something more obtuse than Windows. And guess who the stooge works for? Microsoft! It's the sort of thing that would make people pivot their careers towards management or quit working.

"Because Karen Sandler made it a hard dependency of GNOME, effectively forcing every distro to adopt it or give up GNOME."

How did she do that? Can you dig up the git commit where that happened?


By being the executive director of the GNOME Foundation.

So by organizing Guadec and other conferences she somehow made systemd a dependency for Gnome (which is incorrect BTW)?

Is this similar to how Jim Zemlin got Rust into Linux?


The usual arguments against systemd border on religious drivel. I've seen the talk and while I very much value the work that the speaker has done I did not appreciate that the reasons for doing this are the usual vitriolic cat-v talking points.

systemd is very good because it makes many things that the Linux kernel can do very easy. I would like to know how the people who swear against it implement features that I regularly use in systemd like socket/mount/dbus activation, services that dynamically create a user and group on activation and keep their service and temp directories private from other services, syscall filtering, user session services that start when I log into a graphical session (very useful when you have issues with your system tray's config, for example), network mounts that get mounted asynchronously only when you're using them, actual service management and restarting a service when it fails and service dependencies (which some init systems still don't do!), and so on and so forth...

Yes you could do all of these things by composing other programs, but there is lots of value in having them all bundled together and only having to consult one resource for documentation on them, and the fact that these are all designed to work together reduces the friction that you would get by composing other "general-purpose" tools.

On the other hand, systemd is bad because the implementation is messy, when it does fail it tends to do so in odd and obscure ways, it comes bundled with tons of components that most people won't need, and yes the fact that it's essentially the only option you're given and that it's not portable to BSDs is not very nice.

I would encourage people to read dinit's comparison page and Chimera Linux's FAQ section on systemd for good arguments that are not fueled by religious belief as to both why systemd is valuable and in which ways it is bad.

https://github.com/davmac314/dinit/blob/master/doc/COMPARISO...

http://chimera-linux.org/docs/faq#what-is-the-projects-take-...


Here's my hot take: systemd is the best thing that happened to Linux.

I genuinely believe it's the reason Linux has dominated the other operating systems in the server space in the past decade. As someone who manages servers I wouldn't even consider the other options in space right now, and the features systemd provides is a substantial part of that decision.


> I genuinely believe it's the reason Linux has dominated the other operating systems in the server space in the past decade.

I don't think that makes sense; Linux was already completely dominant before systemd came along.


As a person who manages thousands of servers I genuinely fail to see systemd as anything but a problem. I can certainly see systemd on Desktop, where the environment (network, screen resolutions, peripherals) are always changing on the go, but on server where everything is more or less fixed... systemd? The worst. Unlimited source of problems.

>However I can't understand why systemd is the point of so much disagreement.

I think the simplest way to describe it is that it's a religious conflict.

A not insignificant segment of people who develop and/or use Linux are fervent followers of POSIX philosophy, the Unix heritage, Free Open Source Software development, and the Anti-Microsoft Church (note: Poettering is a Microsoft employee).

These people have a religious duty to hate systemd, it's essentially heresy. It's not a disagreement based on technical or even practical merits, so the conflict can't be addressed with technical debates and will continue for the foreseeable future.


You think you get to just declare the opinion that differs from yours invalid by calling it religious?

Don't the holders of that opinion get to call your position equally religious?

"not a disagreement based on technical or even practical merits" indeed, right there in the mirror.

The first few minutes of this video absolutely articulated some perfectly technical and practical merits. So have some comments here on this hn post. I don't see how it's valid to say no one has ever produced any.


I think the debate on systemd as regards to its merits was decided already years ago when all the major Linux distros adopted it. You need to go way out of your way to run Linux without systemd now, people who want that setup have clearly become a (very small) minority while the rest of the Linux world moved on.

The conflict as parent commenter witnesses it continues because that small minority continue to (very loudly) disagree not on the merits. It is their prerogative to disagree if they desire, but their basis is much more about beliefs than superiority.

It's like Polandball memes where UK crazily chants "Britannia rule the waves...!" while US goes off to freedom some oil with its boats.


Good thing all decisions over at CorporateLand (Ubuntu, RedHat etc) are made on merit alone!

And that their merits align with the merit of everyone else. /s


TIL Arch Linux is CorporateLand

TIL Arch Linux is still around.

> disagreement based on technical or even practical merits

Philosophy can't be reasoned based on merits. Of course there are technical merits as to why systemd-as-PID1 was (not today!) an extremely good piece of software compared to sysvinit, there's no question about that. Likewise there are valid technical reasons why systemd-timesyncd should be abolished and never mentioned again.

But how do you decide LP's attitude on merits? How do I argue with Red Hat who shoved systemd down everyone's throat?

So yes, it's a religious question of sorts. The religion that made Unix unix.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: