Oft hat man mir bzgl. meinen Engagement in Sachen systemd die Frage gestellt warum man überhaupt den Aufwand treibt wenn Canonical für Ubuntu und Fedora doch schon upstart haben bzw. hatten.

Ähnliche Argumentationen gibt es auch immer wieder mit den verschiedenen Desktops wo man sich fragt warum es KDE und GNOME gibt und nicht eines der beiden einfach eingestampft wird. Die Antwort Das ist halt so lehne ich hierbei natürlich ab, wegen zielführend und so.

Grundlegend haben beide dieser "neuen" init Systeme das selbe Ziel: Das System soll schneller und zuverlässiger starten.

Unterschieden tun sich beide Systeme vor allem in ihrer internen Denkweise, welche ich nachfolgend mal kurz erläutern möchte.

Upstart

Upstart ist ein System welches auf Events aufsetzt. Das ist ein Model welches man auch von verschiedenen Programmiersprachen kennt. Ein Ereignis (Event) tritt ein und verschiedene Aktoren (Handler) tun etwas. Benötigt eine Webanwendung also eine MySQL Datenbank und einen Apache Webserver kann diese z.B. ein webservices Signal/Event senden. MySQL und Apache würde man in diesem Beispiel so konfigurieren das diese auf eben genau dieses Event lauschen und dann in Aktion treten (Dienst starten).

Das ist vom Ansatz her erstmal eine gute Idee, setzt aber voraus das alle benötigen Dienste entweder schon installiert sind oder man Signale nach der Installation dieser nochmal absendet.

systemd

systemd ist ein Systemd welches mit Abhängigkeiten arbeitet. Das ist ein Model welches davon ausgeht das jeder Dienst definiert was er als Abhängigkeiten benötigt. Um beim Beispiel von weiter oben zu bleiben könnte man ein Ziel (Target) webservices.target definieren, welches eine Abhängigkeit auf MySQL und Apache hat. Ebenso könnte man nur Apache als Abhängigkeit von webservices.target definieren, und dafür sorgen das Apache eine Abhängigkeit auf MySQL hat. Man beschäftigt sich also nicht mehr mit der Frage "wer startet was" sondern mit der Frage "was wird benötigt".

Das ist eine Grundlegend andere Denkweise als bei Upstart, zudem kann systemd z.B. Dienste als "soll" in der Abhängigkeit haben, oder explizit darauf warten das ein bestimmter Dienst auch verfügbar ist. Auch kann systemd dafür vorbereitete Dienste automatisch beim ersten Zugriff starten, d.h. der MySQL Dienst wird erst gestartet wenn unsere Webanwendung tatsächlich Zugriff auf die Datenbank benötigt (Socket Activation).

Fazit

Ich selbst halte das von systemd gebrachte System für sinnvoller, ich als Administrator habe keine Lust mich damit zu beschäftigen welches Event den jetzt was startet, sondern ich möchte nur dafür sorgen das Dienst A erst nach Dienst B gestartet wird. Ich erwarte also das beim aktivieren von Dienst A automatisch Dienst B mit aktiviert wird.

Dieser Artikel geht nur ganz grob in die Grundlagen dieser beiden Init Systeme ein, es wird einiges verschwiegen um den Artikel kurz und bündig zu halten. Er hilft aber als Gedächtnisstütze warum was bei welchem System wie in etwa funktioniert.