Ive been runing Debian 12 (kde) since bookworm was released and am loving it.
I have recently discovered Devuan which seems to be Debian without systemd - what is the benefit of removing this init system?
It’s mostly opinionated. systemd is written in C, uses a consistent config, is documented well, has a lot of good developers behind it, is very fast and light, and does what it’s doing very well. Since systemd also is split up into multiple parts, it still follows the “do one thing, do it right” philosophy.
There are some people that believe that systemd “took over” the init systems and configuration demons of their distro, and does “too much.” It really does quite a lot: it can replace GRUB (by choice), handle networking config, all the init stuff of course, and much more.
However, I have lived through the fragmented and one-off scripts that glued distros together. Some distros used completely custom scripts for init and networking, so you had to learn “the distro” instead of “learn Linux.” They were often slower, had worse error handling, had their own bugs, were written in various scripting languages like tcl, Perl, Bash, POSIX shell, etc. It was a mess.
The somewhat common agreed-upon init system was System V, which is ancient. It used runlevels, nested configuration (remember /etc/rc.d?), and generally, it was mostly used because it was battle tested and did the job. However, it is arguably esoteric by modern standards, and the init philosophy was revised to more modern needs with systemd.
You can probably tell my bias, here. If you have to ask, then you probably don’t have a “stance” on systemd, and in my opinion, I would stick with systemd. There were dozens of custom scripts running everywhere and constantly changing, and systemd is such an excellent purpose-built replacement. There’s a reason why a lot of distros switched to it!
If you want to experience what other init systems were like, I encourage you to experiment with distros like the one you mentioned. You might even play with virtual machines of old Linux versions to see how we did things a while back. Of course, you probably wouldn’t want to run an old version of Linux for daily use.
It should also be mentioned that init systems are fairly integral to distros. For example, if you install Apache httpd, you might get a few systemd .service files. Most distros won’t include init files for various init systems. You can write them yourself, but that’s quite a lot of work, and lots of packages need specific options when starting them as a service. For this reason, if you decide you want to use a different init system, a distro like the one you mentioned would be the best route.
Great question, and good luck! 👍
I liked runlevels. 🤷
Some distros used completely custom scripts for init and networking, so you had to learn “the distro” instead of “learn Linux.”
I never really noticed init scripts differing much between distros, but I also didn’t play around with many. If the systemD scripts are the same across every system, then this is the first positive thing that I’ve heard about systemD, so thanks for that.
Init scripts were different, I can confirm. And it was pretty bad if you were doing your job and had to change something on a Debian massive, then moved to a red hat one.
I was reading about Slackware today and it seems their init system still uses system V and lots of scripts.
So I’d definitely recommend that OS to anyone curious about the old style of init system.
Great answer. I do use systemd boot on one of my systems as well. It isn’t exactly systemd itself is it? Simply a boot loader packaged as part of the general systemd boot suite, right?
I am fan of principles like KISS and “Do one thing and do it right”. From this point of view is systemd disaster because it is almost everywhere in the system - boot, network, logs, dns, user/home management… It’s always surprise for me if nothing breaks when I do upgrades.
I understand why systemd is here but I’m not at all happy to use it.
Systemd is huge. It’s a complex project that covers not just the init system, but also process management, networking, mounts, sessions, many other things. Many people think its monolithic design run counter with the Unix philosophy and wish to use distros without systemd.
Just to avoid misunderstandings: it’s not a monotolithic blob, it is thought so because its first project was a system daemon that manages system services. It is described as “a software suite that provides an array of system components for Linux operating systems.”, it is highly modular and offer many optional components that each have their own purpose.
It may speed up your boot time, at least it happened to me on Void (maybe the reason is how minimal this distro is though). I personally prefer runit over systemd in how it handles services, but honestly you most probably won’t notice a much difference - definetely not worth reinstalling whole system.
Not to mention runit is a few thousand lines of code, systemd is 1.5 million plus. From a theoretical standpoint it’s an extra massive attack surface.
That comparison is bad on several levels:
First off, systemd-the-repo does contain way more than an init system. But yes, I am pretty sure systemd-the-init is slightly bigger than runit.
Secondly: Systemd-init does set up some useful linux kernel features for the processes it manages in an easy and consistent way. That’s why other services started to depend on systemd-the-init by the way: Systemd does linux-specific things developers find so useful that they prefer adding a dependency on systemd over not having the functionality.
Runit does not support any linux kernel specific features at all to stay portable to other unixes. Other alternative inits made the same design choice.
Thirdly: The overall attack surface of the system without systemd is bigger than a typical systemd system. That’s because so much code run by the init system is way more locked down as systemd provides easy ways to lock down services in a cross-distribution way. Note that the lockdown functionality is 100% linux kernel features, so it involves little code in the init itself. Users of other inits can of course add the same lockdown features as service-specific startup code into the init scripts. We saw how well that works across distributions with sysv-init…
Finally lots of security features implemented outside systemd-the-init require a systemd system as they need the lockdown features offered by the systemd-init. One example is systemd-logind: That depends on systemd-init to be secure where the pre-systemd attempts all failed to archive that goal. Logind makes sure only the user sitting at a screen/keyboard can actually interact with the device interfaces of the kernel device files managing that hardware, so no other user but you can see ehat you type and take screenshots of your screen. Contrast that to devuans approach: Add all users allowed to start the UI to a group and make the devices controllable by that group. Much simpler, KISS and the Unix way… but it also allowes all users on the system that ssh into the machine somebody sits on can log what other users can type. Apparently that is not a problem, since no system ever will have more than one user in the age of personal laptops and desktops. That seriously isvtheir answer… and they even rejected to maintain the ubuntu-before-systemd logind replacement when canonical asked them, because such functionality is not needed im Devuan.
Runit is brilliantly simple, and as the old granite maul examine text says, “simplicity is the best weapon”.
I’m sorry, you won’t be able to convince me to use it, it doesn’t feel KISS (I left Arch when they swapped). Fuck binary logs too. The only place I use it is on my phone which is SailfishOS.
Void to me is what Arch used to be – I tend to use minimal replacements where I can, e.g. Openntpd as ntp, socklog as logger, seatd as logind, zfsbootmenu instead of systemd-boot, no polkit et cetera.
it’s the closest usable distro for me to cut most of the poetteringware out apart from messing around with Gentoo (which I can’t be arsed with any more). I am not a fan.
Like or dislike systemd, be it convenient or not, you can’t deny it’s a behemoth.
Fuck binary logs too.
Text logs are binary, too… they just uses a pretty common binary encoding.
Where do you actually use text logs? I did not use text logs outside of hobby machines ever during my career. Logs were either aggregated in databases or at least stored in temper-resistant formats (usually due to legal requirements).
Do you actually use text logs in a professional setting? Just curious.
If binary logs get corrupted they’re kaput; text logs are not (as far as I know?). Also you cannot grep binary logs? I wouldn’t know.
No, I just have used Linux/BSDs for ~15 years in a non-professional setting.
With textlogs you have a hard time noticing a couple of added/removed/changed characters or even entire log entries. Thats exactly why some industries may not use text logs in the first place as permanent records that are at least temper-evident are mandated.
If binary logs go kaputt they tell you exactly which entries were effected and still display every bit of data they contain. Typically you do not grep in binary logs: Grep can not make sense of all the extra data in the logs (way more than in a typical syslog), so grep is just a poor tool for the job. You typically can use grep as binary logs so contain lots of text. This is ignoring compression, encryption and other extras of course.
I am not trying to convince you: Use whatever you want.I am trying to explain it, so that people can have a more informed discussion. The web is full of either systemd is the best since sliced bread and systems is horrible. It is neither: It is just a technical system that made technical choices that make certain things easier or even possible and others harder or even impossible.
The sytemd time thingy is actually more minimal than openntpd: It only supports sNTP and not the full NTP protocol and is a client only… Openntpd is a full NTP implementation with both client and server. It also is a great technical choice, so keep using it, especially when you need an NTP daemon.
You behemoth is my plumbing layer:-)
I like the ton of small and simple tools that systems brings along: systemd-nspawn is a really lightweight way to run containers that works basically everywhere, no need to install docker or podman. Disk resizing, sysusers, tmpfiles, boot, Key Management, homed, etc. enables me to build reliable, immutable images for my systems. There is no tooling whatsoever for this outside the systems umbrella.
If you do not try to build a 1980-style UNIX system, then you basically are stuck with systemd. Nobody else is even thinking about how to move forward. If you try to raise the challenges you see outside systemd, you get laughed at and are told that your usecase is obviously stupid. The limitations admins ran into 1980 are gospel now and you may not question any of that.
Fair play, as you say it is a “love it or hate it” affair. I personally really like the simplicity and stability of old school UNIX.
OpenBSD comes to mind as the closest thing in contemporary times and I would use it as a daily driver but I need Linux for a few bits.
Void to me seems like the Linux equivalent. Minimal, stable, no bullshit. Alpine also fits this criteria but is a bit more sparse in some packages that I use. Both great distros.
Systemd is 1.5+ million lines of code! However convenient, it felt forced by Redhat into the Linux world and many of us who do not like it feel bent over backwards to be fucked in the arse by Poettering et al.
As solely an init system, may I suggest a superior alternative, s6?
(I am in hospital on morphine so I may not be making sense).
5 minutes of fame when Debian said “if you want other init systems, maintain them”, soon-to-be-Devan folks slammed the door and effectively ruined the chance of multi-init debian by fracturing efforts into their fork instead. But hey, all the news were abuzz about them.
what is the benefit of removing this init system?
I don’t know anything about Devuan, but the init system is replaced, not removed. You need an init system. Devuan probably has something more barebone than systemd.
SysV init is crap, but so is systemd as init process. One example is that an admin needs to know why the system does not boot properly. In this case the kernel messages help. systemd is not helping here.
I’ve currently one problem that I need to solve, but I need 2 people, one to make a video, the other to press Ctrl+Alt+Del to capture an error message that appears for 0,1s after sending the key sequence, when my PC does not boot. This is crap! Why the hell it does not boot occasionally, I have no idea and I’ve been an Linux/Unix admin for 25 years now. Why I cannot find it? Of course because systemd doesn’t even log it!
This is brand new when systemd appeared. I loved to see the kernel messages to full extent…
None. The opposition to systemd is highly irrational.
Didn’t we have this thread yesterday?
Short version: some people (I’m one of them) object to systemd on grounds that are 75% philosophical and 25% the kind of tech detail that’s more of a matter of taste than anything else. The older sysV init is a smaller program, which means that it has a smaller absolute number of bugs than systemd but also does less on its own. Some of us regard “does less” as a feature rather than a bug.
If systemd works for you and you don’t know or care about the philosophical side of the argument, there is probably no benefit for you in switching.
My problem with systemd is that since I’m practically forced to use it that it’s flakey in starting services after boot (independent of service and distro). Since systemd I had to install monit to check if all services came up. Didn’t had that problem before. Or I forgot, it’s been a while…
There are some security, privacy and stability advantages of other init systems over systemd. But for most people systemd should be fine.
See here for further info:
https://madaidans-insecurities.github.io/guides/linux-hardening.html#choosing-the-right-distro
https://forums.whonix.org/t/fixing-the-desktop-linux-security-model/9172/2
https://www.unixsheikh.com/articles/systemd-isnt-safe-to-run-anywhere.html
https://unixsheikh.com/articles/the-real-motivation-behind-systemd.html
https://suckless.org/sucks/systemd/
https://without-systemd.org/wiki/index_php/Arguments_against_systemd/
https://nosystemd.org/Also getting encrypted dns to work with systemd is pretty tough and unreliable in my experience (with debian and opensuse). See here https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-linux
Removed by mod
His stance on desktop security may be very hard. But his views are not far off from that of other known security researchers like Micay (Copperhead/GrapheneOS), Rutkowska (QubesOS), Matthew Garrett (Red Hat, Canonical), Solar Designer (Openwall) and others. They heavily criticize Linux and *BSDs to make us aware of all its shortcomings.
Systemd is hated by hobbyists mainly because it invalidates a lot of their hacked together wisdom …
Maybe these people dont hate systemd but want choices for a more minimal/barebones OS. Not to gatekeep Linux but to install a more energy-efficient, lightweight Linux OS for themselves like many Alpine, Debian and Arch users do. They believe in the KISS principle. The concept that less complexity equals better security (“less is more”).
Removed by mod
Uhm, it’s Systemd.
I think this guy has a few points.
never seen this before, heard of the others but s6 is new to me. very interesting
Alpine is about to switch to it for a while now. Which is imho the best place for s6*, servers.
You should embrace systemd. It’s actually good. Replaces all startup scripts, logs to a common log, even has scheduled systemd jobs just like cron but better, since they can have proper dependencies. Want to run something right after network stack is up and working? Easy with systemd, more difficult with cron and more hacky.
For average users, it’s a matter of preference. Like asking what’s the benefit of chocolate over vanilla.
You are curious though, so I’d recommend giving another init system a try. That would give you some perspective on systemd.
Very valid alternatives include:
- s6
- runit
- openrc
- BSD rc.d
And you can find a pretty complete list here.
runit++