If you'd please review https://news.ycombinator.com/newsguidelines.html and stick to the rules when posting here, we'd appreciate it. They include:
"Eschew flamebait. Avoid generic tangents."
Off-topic posts are fine when they're whimsical, but it's definitely not fine to jump ship to a classic-flamewar-topic. That's like getting sucked into the gravitational field of the nearest hell.
Sorry.
If you don't like his software why are you using it? If it's because your distro uses it shouldn't you try to be convincing them to switch to your preferred alternative, instead of calling out the developer by name on public forums?
a.k.a. please don't feed the trolls
I didn't mind PulseAudio that much. Linux audio was a mess way before PA and PA at least works quite well for basic desktop sound. PipeWire works better and works also for DAW usage.
Systemd OTOH makes almost all possible sins against the unix philosophy and it being so fundamental piece, it leaks the anti-unix all over. RedHat pushed it so deeply e.g. in Gnome that everybody eventually had to adopt it.
Is this supposed to be a bad thing? Because I don't find it obvious. In fact, I don't get why many people have this mystical reverence for the "unix philosophy", as if having a large number of small processes that communicate via plain text was some kind of divine commandment rather than just one of many ways to design software (and not necessarily that good for tasks other than slicing and dicing text). I'm guessing that you do your image editing in a program like GIMP or Photoshop rather than with a bash shell, pipes, and a hundred tiny programs that input and output text. The "unix philosophy" simply isn't a good fit there. Having used both sysvinit and systemd when doing server administration, I find systemd so much better that to me, it's evidence that maybe the "unix philosophy" isn't the best choice here either.
Unix implementation of this is cli programs, streams and files.
The systemd ideology, and in general declarative or pointy-clicky-ad-hoc like in Windoes and MacOS, dumb down computers into appliancies. I don't want my computer, especially the very core of the userspace, to be an appliance.
For most image editing I use bash and imagemagic. I guess you e.g. resize a batch of images by repeating the same clicky-click routine for each image?
Clicky-click has it's uses, but e.g. in Blender I much rather use nodes instead of having thousands of buttons for all connection permutations. Nodes are quite unixy in their UI philosophy.
Shells and sysvinit sure have their problems as the implementation. But at least they let me use my system as a general purpose computer. I'd love a modern and retought implementation of the unix philosophy.
The historical "unix philosophy" was specifically about small programs communicating over pipes via plain text. If you retroactively change it to "do one thing and do it well", then it becomes a meaningless truism. "One thing" is so vague that you could argue Photoshop does one thing too; every large piece of software uses some kind of modularity; and who would deliberately write a program to do its job badly? The devil is always in the details that such cliches don't help us decide: how broad should our definition of "one thing" be, what should be the unit of modularity (processes, classes, Python modules?), what is the communication interface between the modules.
In the case of systemd, it's an umbrella project maintaining a bunch of medium-size C programs that communicate mostly over D-Bus, in ways that are extensively documented on systemd's website. I find it to be a big improvement in interoperability. Before systemd, most distros used the "simple" sysvinit in theory, but in practice sysvinit was so lacking in features and such a pain in the ass to program for that each distro usually shipped a bunch of helpers glued together with shell and Perl. So you would have to write distro-specific stuff, based on documentation that was less abundant than systemd's. That wasn't very good for interoperability.
Can you elaborate on how systemd doesn't let you use your system as a general purpose computer? Because that sounds ridiculous on the surface. There are several ways in which systemd is more general and hackable than sysvinit, for example having targets instead of runlevels. And in practice, after the introduction of systemd I've only found it easier to look into things on my system and tinker with it. journalctl's log formatting and filtering is a very useful addition to grepping when you need to investigate a problem quickly, and systemd user services have made it trivial for me to run my short Python scripts as full-featured daemons that write to my system's log and can be monitored.
Small programs communicating over pipes via plain text was/is the implementation. The philosophy is more general [1]. This one is more or less how I think of it:
"Even though the UNIX system introduces a number of innovative programs and techniques, no single program or idea makes it work well. Instead, what makes it effective is the approach to programming, a philosophy of using the computer. Although that philosophy can't be written down in a single sentence, at its heart is the idea that the power of a system comes more from the relationships among programs than from the programs themselves. Many UNIX programs do quite trivial things in isolation, but, combined with other programs, become general and useful tools."
"Medium sized" (systemd alone is around a million lines) C-programs are extremely difficult to debug or modify if you're not intimately familiar with the codebase. The code in them can't typically be used for any other purposes. Sysvinit as a program is very small, but the point is the protocol that allows multiple different kinds of programs to co-operate. Being able to glue things together with shell and Perl is a feature, not a bug.
Journalctl is a good example of violating the UNIX philosophy. It contains its own binary format, its own grep, its own head and tail, etc. With /var/log files you don't have separate cat, grep or tail to examine files and directory listings. That is the UNIX point. And this is what I mean by general purpose.
sysvinit had/has plenty of problems and systemd typically works better at least nowadays. I'm not singing any praises of sysvinit. But e.g. OpenRC manages initing without a million lines of code and taking control of more or less the whole OS.
I honestly don't understand why people want to do all these rhetorical backflips in order to maintain some kind of bizarre religious reverence for the "unix philosophy". UNIX's design was quite mediocre, it only looks brilliant when compared to the DOS lineage.
How about you make an actual technical criticism of systemd instead of hiding behind vague generalities? In particular, why is it bad that all the functionality needed to manage and monitor daemons is in one program? How would you split it into several programs in a way that maintains systemd's robustness for administrators and convenience for developers? What would be the practical benefits of this split to the users and developers (no "philosophies" please)? Can you justify that this proposed split would reduce systemic complexity (the complexity of the whole system) instead of actually increasing it by just shifting responsibilities onto daemon developers?
> Shells and sysvinit sure have their problems as the implementation. But at least they let me use my system as a general purpose computer.
Why are you sure, you're perceived limitations of systemd compared to sysvinit are based on systemd's shortcommings instead of yours? I don't want to attack you personally, but I've had this conversation lot's of times before. Most of the time, people just had no clue how systemd works. In my experience it simplified lots of use-cases. And I have yet to find a use-case that was possible with sysvinit, but is not with systemd.
It has simplified lots of use cases but my criticism is that it focuses too much on these cases and makes other use cases more difficult. It makes the system quite opaque to the user, a bit like Windows or MacOS that become almost impossible to fix when they break.
This is only an advantage if you take an extremely short-sighted view of complexity. Yes, sysvinit itself is very simple, but by that metric you may just as well replace the init with a single exec to a user or distro-provided program. That would be even simpler, right?
Well, not if you think about systemic complexity rather than just the complexity of that one program. A modern Linux system will include the monitoring of daemons, auto-restart, parallelized dependency-based boot, and so on. A lot of people also want features such as starting a daemon only when a connection arrives or a device is plugged in, or automatically redirecting a program's output to the system log. This stuff is inherently complex, and that complexity has to go somewhere. sysvinit just says "not my problem", so every distro needed to ship lots of scripts to do these things. Every program that wanted to act as a daemon had to do a whole dance of double fork, setsid, environment variable sanitization, umask, managing a pidfile, etc. You'd have this error-prone logic repeated dozens of times in your system, in different programs, often written by people who aren't Linux experts. That's not systemic simplicity. systemd takes all of this complexity onto itself, and centralizes it into one place that is written by Linux experts. This lets many other programs be simpler.
> Makes other use cases more difficult. It makes the system quite opaque to the user, a bit like Windows or MacOS that become almost impossible to fix when they break.
What use cases does it make difficult? How does it make things impossible to fix? Please give specifics, because my experience has been the opposite. When something breaks in a systemd system, I usually find good clues in the system journal and the fix can be a simple configuration change after googling the problem. It's a breath of fresh air compared to having to trace the workings of a hairball of distro-specific shell scripts.
/sys/class/thermal/thermal_zone0/temp gives you the temperature in ASCII. It's about as simple and interoperable as an interface gets. I like that I can check it in terminal with cat /sys/class/thermal/thermal_zone0/temp when needed. I really like that I can check a remote computer's CPU temperature by doing ssh some.remote.host -C cat /sys/class/thermal/thermal_zone0/temp. If you have the commands to show that in your status bar, you can easily extend a local one to a remote one. You prefer to wait for remotehosttemperaturetostatusbarctl to appear in the AppStore? Or write and debug thousand lines of dbus juggling in C?
I do agree that cli programs should be more interoperable in general. E.g. have more structured inputs and outputs akin to JSON or something, conform better to e.g. the GNU command line parameter spec and read stdin and write stdout and log to stderr by default.
Basically what I'm saying is that pulseaudio has serious issues even with new "fixed" drivers and distros switching to Pipewire is making the situation much better for many users.
Around 2001 using audio on my computer (via OSS at the time) would crash it on Linux regularly.
Right not I have some weird problems with graphics from time to time, hopefully these iron out.
I could really do with the desktop being able resume if the graphics driver restarts, or even switch between drivers.
Just accept it, package maintainers had enough of the absolute shitty state of init systems. Systemd solves this very complex problem elegantly, giving some standard userspace can depend on.
Same with Wayland. "it's not a program it's a protocol"
Still sucks, still is a thorn in my side and gets in the way.
Systemd is an attempt to consolidate the OS/service layer into one thing. Compilation options don't mean shit when every component is tightly coupled to systemd, its journal, dbus, or some other quackery.
Systemd would have been better as an entire distro to itself.
But as usual, people cannot handle the idea of running anything other than what's shoved in their faces from corporate programmers.
If I wanted corporate software I'd buy Apple or Microsoft.
I am doing something about it by researching ways to excise Red Hat from as much of the tech stack as possible. Can't do much about the kernel, but every layer above it is moldable.
I don't care to provide 'usefulness' to you; if you're not paying me why would I give up any value?
It was an arrogantly managed project using the guise of standardization to bypass people's social tendencies. People are stupid, so they fell for the 'only consider the code, not our social fuckery!' Hook, link, and sinker.
It really opened my eyes to how ignorant and passive a lot of techies actually are. They're happy to slurp up whatever's advertised to them as the better thing.
Systemd runs my current laptop and I hate having to dive under the hood for anything. In a sysvinit, runit, or OpenRC system, I can achieve things quickly and don't need a book's worth of corporate style documentation to operate my damn system.
Systemd still doesn't support a one-time script on boot. You have to hack together a unit for that. Most other systems just run an rc.local script in /etc!
Binary logs are only useful if systemd is running, and only that version of it too!
Good luck understanding journalctl output. It doesn't capture everything.
Long story short, systemd has not improved a single area of my computing life. I guess I can ogle at a boot time graph. But the main goal seems to be for systemd to take away knowledge of the lower levels of the stack.
Like it or not, open software ecosystems are resistant to standardization by default.
Systemd and dbus and friends would not have bothered me if they weren't coupled with weird ideology about One True Linux or other crap.
Systemd never solved problems for me. I'm sure it solves many business problems but none of them apply to me.
Poettering worked for Red Hat during the development of both PulseAudio and systemd. If he was not writing code they wanted, he would have worked on another project. Ergo, one can conclude those projects to be Red Hat-oriented, or sponsored at minimum.
I firmly believe the profit motive in the software world is what leads to dark patterns, user-hostile design, and other maladies we face in the modern software world. Their obligation to seek profit over all other things leads to compromised values, leading to compromised software.
> It should only do one thing well.
I know this is a popular principle that some believe to be part of the unix philosophy. But an OS should also be coherent. Some tools can do their own thing and be independent from the rest of the system. But I think this works best for simple userland tools, not tightly integrated system services.
In any case I really like resolved.
Most hate seems to be from enthusiast/tinkerer types who want to hand maintain highly customized systems.
Systemd is great for ople who just want a commodity OS, maintained by pros, and kept stock.
It is only bad for people who love debugging race-conditions between shell scripts that run very early in their boot process.
[1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#695...
Other than that, systemd provides a polished experience, so if you want to displace it you'll have to produce something equally polished and compatible with existing unit files, just as systemd was able to consume ye olde sysv startup scripts.
The only other contender that I'm aware of that isn't just one massive design flaw, is openrc, and it's somewhat inferior to systemd.