After having repeatedly run into the limitations of SysV init, I'm all for replacing it with something smarter, but I'm torn between these two.
I've used Upstart on Ubuntu, both as an admin and as a developer. I like that the commands and configuration files are clean and pretty easy to understand. A few things bother me, though:
- The model of starting all dependent services when their dependencies start is backwards. I don't necessarily want init to launch every daemon under the sun the moment I mount their data filesystem. I'd rather have it mount the required filesystem when I ask for a particular daemon to start.
- As of a year or so ago, the documentation was mainly an incomplete bunch of blog posts. Once I found them, it was pretty easy to configure daemons that behaved like the venerable ones that are often used as examples, but it was difficult to learn how to match Upstart's features (some of which are undocumented) and events (also largely undocumented) with an unusual service's behavior
- Debugging was difficult, mainly because so few events are well documented and it's not always clear which of Upstart's features are implemented in in any given version. (I hear the latest release offers some event tracing tools that would improve this.)
I haven't used Systemd at all, but the common points that come up again and again in every writeup I encounter have me forming me some opinions already. I really like the idea of the load-as-needed dependency model. A few things have me quite worried about the implementation, though:
- Configuration is reportedly difficult to understand. That always leads to frustrating, time-wasting, messy problems.
- The code is reportly rather complex. That usually leads to chronically buggy software, which is not what I want in a process as important as init. It also tends to hamper portability, which could make Systemd a poor candidate for replacing init on other unixes, which would relegate it to being yet another OS-specific hassle for coders and admins all over the world. I'd prefer something that could reasonably be adopted everywhere, or at least by most of the operating systems I have to administer, even if a few features weren't available on every platform
- I recently learned that the guy behind Systemd is the same guy who brought us PulseAudio. I don't want to get off topic here, but this gives me little hope that Systemd will ever work well outside the lead developers' development machines. (Pulse is around 10 years old now, and every time I give it another chance, it proves itself intolerable.)