Les systèmes d'init sur Linux/BSD/Unix
1. Introduction : qu'est-ce qu'un système d'init ?
Un système d'init est le premier processus exécuté par le noyau d'un système Unix/Linux/BSD après son démarrage. Il est responsable de lancer tous les autres processus nécessaires au fonctionnement du système, et continue de gérer ces processus tout au long du fonctionnement du système.
Rôles principaux d'un système d'init :
- Initialisation des services au démarrage.
- Gestion des processus/services pendant le fonctionnement.
- Gestion des arrêts/redémarrages du système.
2. SysVinit : le pionnier classique
Origine : Dérivé du système Unix System V.
Principe :
- Utilise des scripts shell placés dans /etc/init.d/.
- Gère les niveaux d'exécution (« runlevels »), définis de 0 à 6, permettant plusieurs états du système.
| Niveau |
Signification |
| 0 |
Arrêt du système |
| 1 |
Mode mono-utilisateur (maintenance) |
| 2-5 |
Modes multi-utilisateurs (variables selon distributions) |
| 6 |
Redémarrage du système |
Avantages :
- Simplicité du modèle, accessible via scripts shell classiques.
- Facilité de compréhension et de personnalisation.
Inconvénients :
- Lent au démarrage (exécution séquentielle des scripts).
- Gestion limitée de la dépendance entre services.
- Difficulté à maintenir sur de grands systèmes complexes.
3. Systemd : moderne et controversé
Origine : Développé par Lennart Poettering chez Red Hat (depuis ~2010).
Principe :
- Démarrage parallèle et rapide des services via des unités (.service).
- Utilisation de dépendances explicites (décrites dans les fichiers d'unités).
- Intégration poussée au système (gestion des logs via journald, gestion des sessions via logind, etc.).
Avantages :
- Démarrage rapide grâce au parallélisme.
- Gestion précise et fine des dépendances.
- Nombreuses fonctionnalités supplémentaires (journaux, timers, sockets, etc.).
Inconvénients :
- Complexité accrue du système.
- Critiqué pour son approche centralisée et lourdeur.
- Peu conforme à l'esprit traditionnel Unix (« do one thing and do it well »).
4. Upstart : une tentative intermédiaire
Origine : Développé initialement par Canonical pour Ubuntu (~2006).
Principe :
- Basé sur les événements (event-driven).
- Répond aux événements système (montage de périphériques, interfaces réseau disponibles, etc.).
- Utilise des fichiers de configuration simples (.conf).
Avantages :
- Meilleure gestion des dépendances que SysVinit.
- Rapidité supérieure à SysVinit, mais moins que systemd.
- Assez facile à comprendre et configurer.
Inconvénients :
- Développement ralenti puis arrêté après l'adoption générale de systemd.
- Moins performant que systemd pour gérer des environnements très complexes.
5. OpenRC : une alternative flexible
Origine : Développé par Gentoo Linux.
Principe :
- Se veut être un juste milieu entre simplicité (SysVinit) et modernité (Systemd).
- Gère des scripts init similaires à ceux de SysVinit, avec un contrôle amélioré des dépendances.
Avantages :
- Simple à comprendre et à maintenir.
- Adapté aux distributions cherchant une alternative à systemd.
- Léger et flexible.
Inconvénients :
- Moins riche en fonctionnalités que systemd.
- Adoption limitée, principalement par Gentoo et dérivés, Alpine Linux, Artix Linux, etc.
6. runit : simplicité radicale
Origine : Inspiré par daemontools.
Principe :
- Démarrage très rapide et minimaliste.
- Chaque service est géré par un script minimal sous forme de répertoire contenant un script nommé run.
- Supervision efficace des services.
Avantages :
- Extrême légèreté.
- Redémarrage automatique des services.
- Simplicité et robustesse exceptionnelle.
Inconvénients :
- Trop minimaliste pour certains besoins complexes.
- Peu de fonctionnalités intégrées comparativement à systemd.
7. Système d'init BSD : RC (FreeBSD/OpenBSD/NetBSD)
Les systèmes BSD utilisent typiquement leur propre système d'init, souvent nommé simplement « rc ».
Principe :
- Scripts shell clairs et simples situés généralement dans /etc/rc.d/.
- Configuration des services dans /etc/rc.conf.
Avantages :
- Simplicité de configuration.
- Facilité d'utilisation, bien documenté.
- Très stable et éprouvé.
Inconvénients :
- Gestion limitée des dépendances avancées.
- Pas de parallélisme natif, donc démarrage lent comparativement à systemd.
8. Comparatif rapide des systèmes d'init
| Critères |
SysVinit |
Systemd |
Upstart |
OpenRC |
runit |
BSD rc |
| Rapidité démarrage |
Lent |
Très rapide |
Rapide |
Moyen |
Très rapide |
Lent |
| Complexité |
Faible |
Élevée |
Moyenne |
Moyenne |
Faible |
Faible |
| Gestion dépendances |
Faible |
Excellente |
Bonne |
Bonne |
Minimale |
Moyenne |
| Adoption actuelle |
Faible |
Très élevée |
Faible (déclin) |
Moyenne (Gentoo, Alpine) |
Faible (Void Linux) |
Forte dans BSD |
9. Comment choisir son système d'init ?
Critères à prendre en compte :
- Simplicité vs fonctionnalités avancées.
- Performances requises (temps de démarrage).
- Type d'utilisation (serveurs, desktops, embarqué).
- Distribution Linux ou type Unix utilisé.
10. Perspectives futures
Actuellement, systemd est très dominant sur Linux grâce à ses nombreuses fonctionnalités.
Toutefois, l'intérêt pour des alternatives comme OpenRC, runit ou les systèmes traditionnels BSD reste fort pour ceux qui privilégient simplicité, transparence et contrôle direct.
Le choix dépend surtout des objectifs, des préférences personnelles et des contraintes techniques du projet.
A titre personnel, vous connaissez mon désamour pour systemd [...].