Pourquoi systemd ?

Traduction:

systemd est encore un projet jeune, mais il n’est plus un bébé maintenant. L’annonce initiale a été posté il y a exactement un an. Depuis, la plus part des distributions majeures ont décidé de l’adopter, d’une manière ou d’une autre, alors que des distributions plus petites l’utilisent déjà. La première distribution importante utilisant systemd par défaut sera la Fedora 15, pour la fin du mois de mai. On peut s’attendre à ce que les autres distributions suivent le mouvement un peu plus tard (avec une exception). Beaucoup de développeurs l’ont déjà adopté, et il y a même déjà une entreprise qui propose des services et une expertise spécialisés sur systemd. En bref, en un an systemd est devenu un projet prometteur.

Malgré cela, il y a encore des gens qui n’ont pas été convaincu. Si vous faites partie d’une de ces catégories, alors veuillez lire la comparaison des systèmes d’init qui va suivre:

  • Vous travaillez sur des projets pour de l’embarqué, et vous vous demandez s’ils devraient être basés sur systemd.
  • Vous êtes un utilisateur ou un administrateur et vous vous demandez quelle distribution choisir, et vous hesitez si elle doit être basée ou nonn sur systemd.
  • Vous êtes un utilisateur ou un administrateur et vous vous demandez si votre distribution favorite utilisera systemd, même si tout marche déjà bien jusqu’à présent.
  • Vous developpez une distribution qui n’a pas encore basculé sur systemd, et vous vous demandez s’il faut investir du travail pour basculer sur systemd.
  • Et même si vous ne faites pas partie de ces catégories, vous pourriez trouver cette comparaison intéressante.

nonus allons comparer les 3 principaux système d’init utilisés sous Linux: sysvinit, Upstart et systemd. Bien sûr, il y a d’autres systèmes d’init qui existent, mais ils ne jouent virtuellement aucun rôle majeure dans le tableau. A moins que vous utilisez Android (qui est une bete à part de toute façon), vous avez surement déjà utilisé un des ces trois systèmes d’init sur votre nonyau Linux. (OK, ou busybox, mais alors grossièrement vous n’êtes pas en train d’utiliser un système d’init du tout). A moins que vous ayez un besoin exotique il n’y a pas besoin d’aller voir plus loin. Et aussi parce que je suis un peu paresseux, et que je ne veux pas passer du temps à analyser ces autres systèmes en détails pour être complètement honnête avec ceux-ci.

En parlant d’honnêteté, je suis bien sûr l’un des créateurs de systemd. J’essayerais de faire de mon mieux pour être juste envers les deux autres concurrents, mais au final, à prendre quand même avec des pincettes. Je suis sûr que même si je devrais être injuste ou d’une manière incorrect, quelqu’un le signalera dans les commentaires, donc n’hesitez pas à les lire aussi, avant de mettre trop de confiance dans ce que je dis.

nonus ne regarderons que les fonctionnalités déjà implémentées dans une version déjà disponible. Les fonctionnalités futures ne comptent pas.

Fonctionnalités générales

sysvinit Upstart systemd
Interface avec D-Bus non oui oui
Démarrage sans Shell non non oui
Services modulaires codés en C
disponibles très tôt au boot
non non oui
Read-Ahead non non[1] oui
Activation basée sur surveillance de socket non non[2] oui
Activation basée sur surveillance de socket:
compatibilité avec inetd
non non[2] oui
Activation évènementielle par surveillance d’un bus non non[3] oui
Activation évènementielle par un matériel non non[4] oui
Configuration des dépendances matériel
avec des règles udev
non non oui
Activation évènementielle par surveillance
d’un chemin (inontify)
non non oui
Activation basée sur un timer non non oui
Gestion de mount non non[5] oui
Gestion de fsck non non[5] oui
Gestion des quota non non oui
Gestion de automount non non oui
Gestion de la swap non non oui
Prise d’instantanés de l’état du système non non oui
Support de XDG_RUNTIME_DIR non non oui
Suppression optionnelle des processus restants
quand un utilisateur se delogue
non non oui
Intégration des Control Groups Linux non non oui
Génération d’enregistrement pour audit
des services démarrés
non non oui
Intégration de SELinux non non oui
Intégration de PAM non non oui
Support des disques durs encryptés (LUKS) non non oui
Gestion du certificat SSL ou du mot de
passe pour LUKS, incluant Plymouth,
Console, wall(1), TTY et les agents Gnome
non non oui
Gestion du périphérique loopback pour le réseau non non oui
Gestion de binfmt_misc non non oui
Gestion de la localisation globale du système non non oui
Configuration de la Console et du clavier setup non non oui
Infrastructure pour créer, supprimer et
nettoyer les fichiers temporaires et volatiles
non non oui
Gestion de sysctl pour /proc/sys non non oui
Intégration de Plymouth non non oui
Sauvegarde/restauration d’un random seed non non oui
Chargement statique des modules kernel non non oui
Gestion automatique de la console série non non oui
Gestion d’un identifiant unique de la machine non non oui
Gestion dynamique du nonm d’hôte et des meta
données de la machine
non non oui
Arrêt fiable des services non non oui
Enregistrements /dev/log très tôt au boot non non oui
Démon minimal de syslog basé sur kmsg
pour un usage embarqué
non non oui
Relance sur plantage de service sans perte de
connectivité
non non oui
Mises à jour de service sans indispo non non oui
UI graphique non non oui
Outils et profilage intégrés non non oui
Services instanciés non oui oui
Intégration de PolicyKit non non oui
Accès distant/Support Cluster intégrés dans
les outils clients
non non oui
Peut lister tous les processus d’un service non non oui
Peut identifier le service d’un processus non non oui
CPU Cgroups automatiques par service, pour contrôler l’utilisation CPU non non oui
Cgroups automatiques par utilisateur non non oui
Compatibilité SysV oui oui oui
Services SysV contrôlables de la même manière que les services natifs oui non oui
/dev/initctl compatible SysV oui non oui
Re-exécution avec une sérialisation complète des états oui non oui
Démarrage interactif non[6] non[6] oui
Support des container (remplacement évolué de chroot()) non non oui
Démarrage basé sur des dépendances non[7] non oui
Désactivation de services sans éditer un fichier
de configuration
oui non oui
Masquage de services sans éditer un fichier
de configuration
non non oui
Arrêt du système robuste avec le PID 1 non non oui
Support intégré de kexec non non oui
Génération dynamique de service non non oui
Support en amont depuis d’autres
composants de l’OS
oui non oui
Fichiers de service compatibles entre distributions non non oui
Transmission de signaux vers services non non oui
Arrêt fiable des sessions utilisateurs avec
l’arrêt du système
non non oui
Support de utmp/wtmp oui oui oui
Fichiers de services facilement compréhensible,
parfait pour la manipulation avec des outils de gestion
non non oui

¹ L’implémentation de Read-Ahead pour Upstart est disponible via un paquet séparé « ureadahead », nécessite un patch non standard sur le kernel.

² L’implémentation de l’activation par socket pour Upstart est disponible en tant que « preview », mais ne supporte pas la parallélisation et du coup rate complètement l’intérêt de l’activation par socket.

³ L’implémentation de l’activation par Bus pour Upstart disponible comme patch, pas encore intégré.

⁴ L’implémentation de l’évènementiel via udev sur les périphérique au niveau d’Upstart est disponible en tant que « preview », en transmettant intégralement la base udev, peu pratique.

⁵ L’utilitaire de gestion mount « mountall » pour Upstart est disponible dans un paquet séparé, ne couvrant que les montages lors du boot, avec un système très limité de dépendance.

⁶ Certaines distributions offrent cette implémentation dans le shell.

⁷ Les scripts d’init LSB supportent ceci, s’ils sont utilisés.

Réglages disponibles sur les services natifs

sysvinit Upstart systemd
Ajustement de l’OOM non oui[1] oui
Répertoire de travail non oui oui
Répertoire racine (chroot()) non oui oui
Variables d’environnement non oui oui
Variables d’environnement depuis un fichier extérieur non non oui
Limitation des ressources non partiel[2] oui
umask non oui oui
Groupement des Utilisateurs/Groupes/Groupes supplémentaires non non oui
Classe/priorité de l’ordonnancement des IO non non oui
Valeur de nice pour l’ordonnancement CPU non oui oui
Politique/priorité d’ordonnancement CPU non non oui
Contrôle de la remise à zero de l’ordonnanceur CPU sur fork() non non oui
Affinité CPU non non oui
Timer Slack non non oui
Contrôle des capacités non non oui
Contrôle du bit de sécurité non non oui
Contrôle des Control Groups non non oui
Contrôle d’un espace de nommage de haut niveau sur le système de fichiers: rendre des répertoires inacessibles non non oui
Contrôle d’un espace de nommage de haut niveau sur le système de fichiers: rendre un répertoire en lecture seul non non oui
Contrôle d’un espace de nommage de haut niveau sur le système de fichiers: /tmp privé non non oui
Contrôle d’un espace de nommage de haut niveau sur le système de fichiers: héritage de montage non non oui
Entrée depuis la Console oui oui oui
Sortie via Syslog non non oui
Sortie via kmsg/dmesg non non oui
Sortie sur un TTY donné non non oui
Contrôle du signal Kill non non oui
Exécution conditionnelle: par l’identification d’une virtualisation CPU /container non non oui
Exécution conditionnelle: par la présence d’un fichier non non oui
Exécution conditionnelle:: par un framework de sécurité non non oui
Exécution conditionnelle: par ligne de commande kernel non non oui

1 Upstart supporte seulement le mécanisme obsolète oom_score_adj, pas l’actuel logique de oom_adj.
2 Upstart ne supporte pas RLIMIT_RTTIME et RLIMIT_RTPRIO.

A noter que certaines de ces options sont relativement faciles à ajouter aux scripts d’init de SysV, en éditant les sources shell. Le tableau au dessus ne cible que les options facilement accessibles qui ne demandent aucune modification du code source.

Autres

sysvinit Upstart systemd
Maturité > 15 ans 6 ans 1 an
Services disponibles de la part d’ingénieurs et consultants spécialisés non non oui
SCM Subversion Bazaar git
Contribution sans Copyright oui non oui

Résumé

Comme les tableaux précédents le montrent clairement, systemd a laissé derrière lui sysvinit et Upstart dans la plus part des aspects. A l’exception de l’age/maturité du projet systemd gagne dans chaque catégorie. Maintenant, il sera très difficile pour sysvinit et Upstart de rattrapper les fonctionnalités que systemd fournit aujourd’hui. En 1 an, nous avons réussi à pousser systemd plus loin que Upstart a fait en 6 ans.

C’est notre intention d’être moteur dans le developpement de la plateforme Linux avec systemd. Dans le prochain cycle de sortie, nous nous concentrerons plus sur le fait de fournir les mêmes fonctionnalités et amélioration de rapiditié, que nous offrons déjà pour le système, sur l’ouverture de session utilisateur. Cela apportera une intégration plus proche avec les autres parties de l’OS et des applications, rendant la plus part des fonctionnalités que le gestionnaire de services fournit, en le rendant ainsi disponible aux sessions utilisateurs. Certains composants comme ConsoleKit seront rendus redondants avec ces améliorations, et les services s’appuyant sur ceux-ci seront mis à jour. Le fardeau de maintenir ces composants obsolètes reposera de fait sur les vendeurs/intégrateurs qui voudront continuer à s’appuyer sur ceux-ci.

SI vous vous demandez si vous devez adopter ou non systemd, alors systemd gagne quand il vient avec plus de fonctionnalité. Bien sûr cela ne devrait pas être le seul aspect à garder à l’esprit. Dans la longue course, s’attacher à l’infrastructure existante (comme ConsoleKit) à un prix: du travail de portage doit être fait, ainsi qu’un travail additionnel de maintenance. Le faire par vous même signifie une charge de travail accrue.

Cela dit, adopter systemd n’est pas non plus sans effort. Surtout si vous aviez fait des investissements sur les deux autres solutions, adopter systemd signifiera du travail. Le travail basique pour adopter systemd est relativement minime pour le porter sur des systèmes utilisant SysV (vu que la compatibilité est assurée), mais cela peut signifier un travail plus que substantiel quand il s’agira d’Upstart. Si vous cherchez à aller sur un système 100% systemd sans aucune compatibilité avec SysV (recommandé pour l’embarqué, la cible à long terme pour les grosses distributions), vous aurez besoin de pouvoir investir du temps pour convertir tous les scripts d’init vers les fichiers simples d’unité de systemd.

systemd est en phase de devenir une plateforme modulaire, intégrée et compréhensible, fournissant tout le nécessaire pour démarrer et maintenir un environnement utilisateur du système d’exploitation. Il inclut la ré-écriture en C de tous les scripts basiques d’init du début de la phase de démarrage, fournit par les distributions. Spécifiquement pour le cas de l’embarqué, adopter systemd vous fournira en une étape tout ce dont vous avez besoin, et vous pourrez choisir les modules que vous voulez. Les deux autres systèmes d’init ont des composants singuliers et individuels, qui pour être utiles nécessitent un grand nombre de composants additionnels pour décaler l’interfaçage. Le but principal de systemd à fournir une plateforme plutôt qu’un composant permet une intégration plus précise, et une API plus propre. Tôt ou tard, cela remontera jusqu’au niveau des applications. Déjà, il y a les spécifications XDG qui ont été acceptées (sur le basedir XDG, et plus spécifiquement sur XDG_RUNTIME_DIR), et qui ne sont pas supportées par les autres systèmes d’init.

systemd est aussi une belle opportunité pour la standardisation de Linux. Vu qu’il standardise un grand nombre d’interfaces du système qui était avant différentes sur chaque distribution, sur chaque implémentation, adopter systemd permettra de lutter contre la balkanisation des interfaces de Linux. Choisir systemd signifie redéfinir plus précisément ce qu’est la plateforme Linux. Ceci facilite le travail des programmeurs, des utilisateurs tout comme des administrateurs.

Je crois que le mouvement s’amorce clairement avec systemd. Nous vous invitons à rejoindre notre communauté et ainsi faire partie de ce mouvement.

EDIT: Il manquait la fin…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *