Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

It appears systemd is the hot new init system on the block, same as Upstart was a few years ago. What are the pros/cons for each? Also, how does each compare to other init systems?

share|improve this question
8  
It would also be nice to add openrc, from Gentoo, to the comparison. –  Keith Jan 15 '11 at 4:28
4  
@keith iirc openrc simply uses SysV, the advantage is a well designed collection of startup scripts that use common components and are portable (meaning work on any shell) It's a good cleanup, but not really a new initd –  xenoterracide Jan 21 '11 at 19:26
    
@xeno It does, but you can't really tell. there are no rcX.d or [KS] symlinks at all. Actually sysv init itself is pretty flexible, and the runlevels are not really used in the usual way. –  Keith Jan 22 '11 at 20:15

4 Answers 4

Both upstart and systemd are attempts to solve some of the problems with the limitations of the traditional SysV init system. For example, some services need to start after other services (for example, you can't mount NFS filesystems until the network is running), but the only way in SysV to handle that is to set the links in the rc#.d directory such that one is before the other. Add to that, you might need to re-number everything later when dependencies are added or changed. Upstart and Systemd have more intelligent settings for defining requirements. Also, there's the issue with the fact that everything is a shell script of some sort, and not everyone writes the best init scripts. That also impacts the speed of the startup.

Some of the advantages of systemd I can see:

  • Every process started gets its own cgroup or a particular cgroup.
  • Pre-creation of sockets and file handles for services, similar to how xinetd does for it's services, allowing dependent services to start faster. For example, systemd will hold open the filehandle for /dev/log for syslog, and subsequent services that send to /dev/log will have their messages buffered until syslogd is ready to take over.
  • Fewer processes run to actually start a service. This means you aren't writing a shell script to start up your service. This can be a speed improvement, and (IMO) something easier to set up in the first place.

One disadvantage I know of is that to take advantage of systemd's socket/FH preallocation, many daemons will have to be patched to have the FH passed to them by systemd.

share|improve this answer
1  
Can you explain the last sentence a bit. –  Tshepang Jan 20 '11 at 17:44
7  
PulseAudio is a much-maligned sound system (pulseaudio.org), originally written by Lennart Poettering, the author of systemd. I was mostly making a joke here, because I know several people who like to complain about pulseaudio and I'm sure they'd complain about systemd too. Honestly, I haven't had a problem with either systemd or pulseaudio. –  jsbillings Jan 20 '11 at 17:48
5  
The authorship concern is worth noting. The main developer is very smart and prolific, although a bit abrasive. But most concerning, his initial attitude towards systemd seemed to be that the whole thing would be an easily-solved weekend project and then he'd be back to pulseaudio. Months later, my systemd test system frequently hits failures to shut down, and other quirks. Turns out, it's a hard problem! And the command-line user interface is less polished than before. To his credit, the developer hasn't actually vanished back to pulseaudio, but I still think attention span is a real worry. –  mattdm Feb 24 '11 at 15:25
4  
Makes one almost pine for the abundant fiords of Plan9... everything's a file. –  Barry May 11 '11 at 9:29
4  
Just great. Please take a look at 0pointer.de/blog/projects/the-biggest-myths. I witnessed systemd's growth, and can attest that much of the criticisms given here are completely groundless. At the link you will find a blow by blow, reasoned rebuttal. –  vonbrand Jan 27 '13 at 22:45

Saw systemd mentioned on Arch General ML today. So read up on it. The H Online as ever is a great source for Linux Technology and is where I found my place to start researching Systemd as SysV Init and Upstart alternative. However the H Online article (in this case) isn't a very useful read, the real use behind it is it gives links to the useful reads.

The real answer is in the announcement of systemd. Which gives some crucial points of what's wrong with SysV initd, and what new systems need to do

  • To start less.
  • And to start more in parallel.

Its major plan to do this seems to be to start services only as they're needed, and to start a socket for that service, so that the service that needs it can connect to the created socket long before the daemon is fully online. Apparently a socket will retain a small amount of buffered data meaning that no data will be lost during the lag, it will be handled as soon as the daemon is online.

Another part of the plan seems to be to not serialize filesystems, but instead mount those on demand as well, that way you're not waiting on your /home/, etc (not to be confused with /etc) to mount, and/or fsck when you could be starting daemons as / and /var/ etc, are already mounted. It said it was going to use autofs to this end.

It also has the goal of creating .desktop style init descriptors as a replacement for scripts. This will prevent tons of slow sh processes and even more forks of processes from things like sed and grep that are often used in shell scripts.

They also plan not to start some services until they are asked for, and perhaps even shut them off if they are no longer needed, bluetooth module, and daemon are only needed when you're using a bluetooth device for example. Another example given is the ssh daemon. This is the kind of thing that inetd is capable of. Personally I'm not sure I like this, as it might mean latency when I do need them, and in the case of ssh I think it means a possible security vulnerability, if my inetd were compromised the whole system would be. However, I've been informed that using this to breach this system is infeasible and that if I want to I can disable this feature per service and in other ways.

Another feature is apparently going to be the capability to start based on time events, either at a regularly scheduled interval or at a certain time. This is similar to what crond and atd do now. Though I was told it will not support user "cron". Personally this sounds like the most pointless thing. I think this was written/thought up by people who don't work in multiuser environments, there isn't much purpose to user cron if you're the only user on the system, other than not running as root. I work on multiuser systems daily, and the rule is always run user scripts as the user. But maybe I don't have the foresight they do, and it will in no way make it so that I can't run crond or atd, so it doesn't hurt anyone but the developers I suppose.

The big disadvantage of systemd is that some daemons will have to be modified in order to take full advantage of it. They'll work now, but they'd work better if they were written specifically for its socket model.

It seems for the most part the systemd's peoples problem with upstart is the event system, and that they believe it to not make sense or be unnecessary. Perhaps their words put it best.

Or to put it simpler: the fact that the user just started D-Bus is in no way an indication that NetworkManager should be started too (but this is what Upstart would do). It's right the other way round: when the user asks for NetworkManager, that is definitely an indication that D-Bus should be started too (which is certainly what most users would expect, right?).
A good init system should start only what is needed, and that on-demand. Either lazily or parallelized and in advance. However it should not start more than necessary, particularly not everything installed that could use that service.

As I've already said this is discussed much more comprehensively in the announcement of systemd.

share|improve this answer
    
sorry but the announcement is like a book. I have to read and grok, before I can really include more here. –  xenoterracide Jan 20 '11 at 15:56
1  
How is this better than @John's answer? Is it a placeholder? A promo of H Online? –  Tshepang Jan 20 '11 at 17:46
1  
@tshepang well it actually links to the announcement of system d and the h online stuff has links to that and other interesting links. it's a long tedious read. I might add more once I've groked it... this is not a simple subject. when I wrote this I figured you might want to start reading sooner than later. but feel free to mod me down. certainly @jsbillings answer is decent, and better than mine so far. but not as good as reading the announcement itself –  xenoterracide Jan 20 '11 at 18:03
    
@tshepang I will probably add more tomorrow, after bed. h online stuff was just me being a good journalist and citing my sources. –  xenoterracide Jan 20 '11 at 18:05
    
@tshepang. I've updated my answer. pretty sure I'm done unless the helpful people on irc://frenode.net/systemd decide they want to offer up a correction of some kind. –  xenoterracide Jan 21 '11 at 19:20

Well one thing most of you forgot is the organisation of processes in cgroups.

So if systemd started a thing, it will put this thing in its own cgroup and there is no (unpriviledged) mean for the process to escape that cgroup. Here's the consequences of that:

  • An administrator of a big system with many users has efficient new ways to identify malicious users/processes.
  • The priorities for CPU-scheduling can be determined better as done by the "Wonder autocgroup patch".
share|improve this answer

For a very detailed look at systemd, starting with the first design drafts (and a detailed critique of existing init systems, including upstart, and how systemd proposes to fix them), go to its home page. Over time, there have been several articles on startup published in LWN. Just be advised that any mention of systemd (or pulseaudio) there triggers neverending flamewars.

IMVHO (and as a Fedora user) I'm very happy with it. Something in this line was long overdue to handle the complexity of current Linux systems. Fedora used upstart for a while, but it never got out of the stage of being a fancy replacement for sysvinit, running mostly unchanged init scripts. Its promise of simplifying boot configuration comes at the cost of again manually setting up interdependencies, and that just doesn't work. systemd figures dependecies out by itself (or just allows starting stuff without regard of dependencies, they sort themselves out). Another big advantage (some say it is a severe disadvantage) is that it exploits Linux-specific features to the hilt (notably cgroups allow isolating a daemon and all its descendants, so it is easy to monitor, limit the resources, or kill them as a group; there are many others).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.