Poettering said that while Upstart has some nice features and works reasonably well, the code has serious core design flaws.
He takes issue with Upstart’s event driven logic.
“The event logic turns around all dependencies, from the feet onto their head,” Poettering explains. “Instead of minimizing the amount of work (which is something that a good init system should focus on, as pointed out in the beginning of this blog story), it actually maximizes the amount of work to do during operations. Or in other words, instead of having a clear goal and only doing the things it really needs to do to reach the goal, it does one step, and then after finishing it, it does all steps that possibly could follow it.”
What Poettering does like is Launchd on MacOS X, which he called ingenious. He’s impressed with how Apple’s Launchd listens on the sockets – pulling that behavior out of all daemons.
“The services themselves hence can all start up in parallel and dependencies need not to be configured for them. And that is actually a really ingenious design, and the primary reason why MacOS manages to provide the fantastic boot-up times it provides.”
But while he likes Launchd, Poettering doesn’t think Apple’s approach can work as well in a Linux environment, which requires much more scalability and serves a much broader market than MacOS does.
That’s why he decided to create Systemd. Poettering wants to take the best of Launchd, and the good things about Upstart, and create something fast and scalable to run on Linux.