En 2006 Linus Torvalds a fait plusieurs longs posts argumentés sur le site Realworldtech pour donner son avis sur les micro-noyaux (on sait que c'était déjà le sujet du fameux débat avec Tanenbaum en 1992).
Je pense qu'il est interessant d'en faire une traduction partielle afin de comprendre pourquoi il n'aime pas cette architecture. J'ai traduit les passages qui me semblent importants (j'ai charcuté donc) mais vous êtes invités à aller lire les posts complets pour vous faire une vraie idée de ses arguments.
Résumé du début du post : Il explique qu'il se fiche des questions d'implémentations et de vocabulaire et que la seule chose importante, la différence réelle et cruciale entre les noyaux monolithiques et les micro-noyaux c'est l'adressage mémoire. Il est séparé pour les micro-noyaux alors qu'il est commun pour les noyaux monolithiques. La seule vraie barrière dans les noyaux classiques c'est celle qui existe entre les applications utilisateurs et le noyau. Les micro-noyaux eux, mettent des barrières partout
Traduction du reste :
"Maintenant le vrai problème avec cette séparation n'est pas la question des performances (qui existe pourtant) mais plutôt le problème de la complexité. Il est risible de voir les partisans des micro-noyaux proclamer que leurs systèmes sont "plus simples" que les noyaux traditionnels. Ce n'est pas le cas. Ils sont bien plus compliqués du fait de cette barrière qui existe entre les structures de données.
Le résultat fondamental de cette séparation de l'adressage mémoire est que vous ne pouvez pas partager les structures de données. Cela veut dire que vous ne pouvez pas partager les verrous, cela veut dire que vous devez copier toutes les données partagés et cela implique que vous avez énormément de mal à gérer la cohérence.
Fondamentalement tous vos algorithmes deviennent des algorithmes distribués.
Et celui qui vous dit que les algorithmes distribués sont "plus simples" à la tête tellement rempli de m*rde que ce n'est même plus drôle.
Les micro-noyaux sont bien plus difficiles à écrire et à maintenir exactement pour cette raison. Vous pouvez faire les choses simples assez facilement - en particulier quand vous n'avez à passer l'information que dans un sens - mais tout le reste est incomparablement plus difficile parce qu'il n'y a pas de partage d'état (par design). Et en l'absence de ce partage vous avez une sacré quantité de problèmes pour prendre une décision qui concerne plus d'une entité dans le système.
Et je ne suis pas juste en train de blablater. C'est un fait. Un fait qui a été montré en pratique encore et encore, et pas seulement dans le domaine des noyaux. Mais cela s'est vérifié aussi pour les noyaux et pas qu'une seule fois. Tout l'argument "les micro-noyaux sont plus simples" c'est juste de la connerie et le fait que ce soit de la connerie se voit quand on compare la vitesse de développement d'un micro-noyau et d'un noyau traditionnel. Le noyau traditionnel gagne. Et avec une marge énorme en plus.
Tout l'argument disant que les micro-noyaux sont "plus sécurisés" ou "plus stables" est aussi totalement grotesque. Le fait que chaque pièce individuelle soit simple et sécurisée ne fait pas que leur aggrégation soit simple et sécurisée. Et l'argument que vous pouvez "simplement relancer" un serveur défaillant sans emporter tout le système est également fautif.
Quiconque a déjà fait de la programmation distribuée devrait savoir maintenant que quand un noeud se vautre le reste se vautre aussi. Ce n'est pas toujours vrai (mais il n'est pas toujours vrai aussi qu'un crash de pilote fasse tomber à chaque fois un noyau monolithique), mais c'est souvent le cas s'il y a une dépendance mutuelle ou un problème de cohérence.
Et dans le domaine des systèmes d'exploitations il y sacrément peu de trucs qui n'ont pas de problème de cohérence. Si il n'y avait pas de problème de cohérence sela ne serait pas dans le noyau de tout façon !".
Le second post ou il réponds à quelqu'un lui disant que certaines personnes pensent que les avantages des micro-noyaux compensent les inconvénients :
"Et bien jusqu'à présent ces personnes n'ont même pas été capables de nommer ces avantages hypothétiques.
J'ai vu des affirmations grotesques à propos de la "facilité" (en fait c'était l'argument des années 80 et 90) et j'ai même été convaincu à une époque. Depuis j'ai appris ce qui est facile et ce qui est difficile - et j'ai vu les gens échouer avec leurs micro-noyaux encore et encore - Il est devenu évident pour moi que l'argument de la simplicité était faux.
L'an dernier le dernier argument magique c'était la "sécurité". C'est tout aussi grotesque que la "facilité et pour les mêmes raisons. Les bugs de sécurité sont souvent dans les interactions de deux sous-systèmes et plus difficile c'est à écrire et maintenir, plus difficile c'est à sécuriser.
Je suis certain que dans dix ans il y aura d'autre arguments. Il y a toujours une excuse.
Au final (et c'est je pense décisif) le vrai argument pour les micro-noyaux n'a rien à voir avec la vitesse, la facilité, la sécurité ou le reste.
La vraie raison pour laquelle les gens font des micro-noyaux (et vont probablement continuer de le faire en inventant de nouvelles bonnes raisons prouvant que c'est la meilleure solution) c'est que le concept lui-même est si séduisant. J'ai été séduit moi aussi !
Toute cette histoire de "petits modules indépendants" sonne vraiment comme la manne tombée du ciel quand vous êtes confronté à la tâche gigantesque de créer un OS et que vous réalisez à quel point c'est une tâche énorme.
Cette idée des "micro-noyaux qui sont merveilleux" vient de ce souhait désespéré que le monde devrait être plus simple qu'il ne l'est réellement. C'est pourquoi les micro-noyaux sont si populaires dans les cercles académiques ou personne ne peut se permettre de mettre un gros team de développement et ou il est donc absolument nécessaire que le problème soit simple.
La réalité n'a rien à voir avec les micro-noyaux. C'est l'inverse en fait. Le vrai but des micro-noyaux c'est d'échapper à la réalité du fait que le design et l'implémentation d'OS complet est difficile et que c'est beaucoup de travail".
# L'avis de Linus
Posté par patrick_g (site web personnel) . En réponse à la dépêche MINIX 3 - Google Summer of Code. Évalué à 10.
Je pense qu'il est interessant d'en faire une traduction partielle afin de comprendre pourquoi il n'aime pas cette architecture. J'ai traduit les passages qui me semblent importants (j'ai charcuté donc) mais vous êtes invités à aller lire les posts complets pour vous faire une vraie idée de ses arguments.
Résumé du début du post : Il explique qu'il se fiche des questions d'implémentations et de vocabulaire et que la seule chose importante, la différence réelle et cruciale entre les noyaux monolithiques et les micro-noyaux c'est l'adressage mémoire. Il est séparé pour les micro-noyaux alors qu'il est commun pour les noyaux monolithiques. La seule vraie barrière dans les noyaux classiques c'est celle qui existe entre les applications utilisateurs et le noyau. Les micro-noyaux eux, mettent des barrières partout
Traduction du reste :
"Maintenant le vrai problème avec cette séparation n'est pas la question des performances (qui existe pourtant) mais plutôt le problème de la complexité. Il est risible de voir les partisans des micro-noyaux proclamer que leurs systèmes sont "plus simples" que les noyaux traditionnels. Ce n'est pas le cas. Ils sont bien plus compliqués du fait de cette barrière qui existe entre les structures de données.
Le résultat fondamental de cette séparation de l'adressage mémoire est que vous ne pouvez pas partager les structures de données. Cela veut dire que vous ne pouvez pas partager les verrous, cela veut dire que vous devez copier toutes les données partagés et cela implique que vous avez énormément de mal à gérer la cohérence.
Fondamentalement tous vos algorithmes deviennent des algorithmes distribués.
Et celui qui vous dit que les algorithmes distribués sont "plus simples" à la tête tellement rempli de m*rde que ce n'est même plus drôle.
Les micro-noyaux sont bien plus difficiles à écrire et à maintenir exactement pour cette raison. Vous pouvez faire les choses simples assez facilement - en particulier quand vous n'avez à passer l'information que dans un sens - mais tout le reste est incomparablement plus difficile parce qu'il n'y a pas de partage d'état (par design). Et en l'absence de ce partage vous avez une sacré quantité de problèmes pour prendre une décision qui concerne plus d'une entité dans le système.
Et je ne suis pas juste en train de blablater. C'est un fait. Un fait qui a été montré en pratique encore et encore, et pas seulement dans le domaine des noyaux. Mais cela s'est vérifié aussi pour les noyaux et pas qu'une seule fois. Tout l'argument "les micro-noyaux sont plus simples" c'est juste de la connerie et le fait que ce soit de la connerie se voit quand on compare la vitesse de développement d'un micro-noyau et d'un noyau traditionnel. Le noyau traditionnel gagne. Et avec une marge énorme en plus.
Tout l'argument disant que les micro-noyaux sont "plus sécurisés" ou "plus stables" est aussi totalement grotesque. Le fait que chaque pièce individuelle soit simple et sécurisée ne fait pas que leur aggrégation soit simple et sécurisée. Et l'argument que vous pouvez "simplement relancer" un serveur défaillant sans emporter tout le système est également fautif.
Quiconque a déjà fait de la programmation distribuée devrait savoir maintenant que quand un noeud se vautre le reste se vautre aussi. Ce n'est pas toujours vrai (mais il n'est pas toujours vrai aussi qu'un crash de pilote fasse tomber à chaque fois un noyau monolithique), mais c'est souvent le cas s'il y a une dépendance mutuelle ou un problème de cohérence.
Et dans le domaine des systèmes d'exploitations il y sacrément peu de trucs qui n'ont pas de problème de cohérence. Si il n'y avait pas de problème de cohérence sela ne serait pas dans le noyau de tout façon !".
Le second post ou il réponds à quelqu'un lui disant que certaines personnes pensent que les avantages des micro-noyaux compensent les inconvénients :
"Et bien jusqu'à présent ces personnes n'ont même pas été capables de nommer ces avantages hypothétiques.
J'ai vu des affirmations grotesques à propos de la "facilité" (en fait c'était l'argument des années 80 et 90) et j'ai même été convaincu à une époque. Depuis j'ai appris ce qui est facile et ce qui est difficile - et j'ai vu les gens échouer avec leurs micro-noyaux encore et encore - Il est devenu évident pour moi que l'argument de la simplicité était faux.
L'an dernier le dernier argument magique c'était la "sécurité". C'est tout aussi grotesque que la "facilité et pour les mêmes raisons. Les bugs de sécurité sont souvent dans les interactions de deux sous-systèmes et plus difficile c'est à écrire et maintenir, plus difficile c'est à sécuriser.
Je suis certain que dans dix ans il y aura d'autre arguments. Il y a toujours une excuse.
Au final (et c'est je pense décisif) le vrai argument pour les micro-noyaux n'a rien à voir avec la vitesse, la facilité, la sécurité ou le reste.
La vraie raison pour laquelle les gens font des micro-noyaux (et vont probablement continuer de le faire en inventant de nouvelles bonnes raisons prouvant que c'est la meilleure solution) c'est que le concept lui-même est si séduisant. J'ai été séduit moi aussi !
Toute cette histoire de "petits modules indépendants" sonne vraiment comme la manne tombée du ciel quand vous êtes confronté à la tâche gigantesque de créer un OS et que vous réalisez à quel point c'est une tâche énorme.
Cette idée des "micro-noyaux qui sont merveilleux" vient de ce souhait désespéré que le monde devrait être plus simple qu'il ne l'est réellement. C'est pourquoi les micro-noyaux sont si populaires dans les cercles académiques ou personne ne peut se permettre de mettre un gros team de développement et ou il est donc absolument nécessaire que le problème soit simple.
La réalité n'a rien à voir avec les micro-noyaux. C'est l'inverse en fait. Le vrai but des micro-noyaux c'est d'échapper à la réalité du fait que le design et l'implémentation d'OS complet est difficile et que c'est beaucoup de travail".
Le premier post est ici : http://www.realworldtech.com/forums/index.cfm?action=detail&(...)
Le second là : http://www.realworldtech.com/forums/index.cfm?action=detail&(...)
Et il y en a d'autres dans le thread....de la lecture pour ce vendredi pluvieux !