# Genode

Genode$^,$$^,$ est un framework d'OS (architecture et ensemble de mécanismes généraux de système d'exploitation, ou "boite à outils") libre et gratuit. Il consiste en une couche d'abstraction pour micro-noyau et une collection de composants (services) en espace utilisateur. Il est notable que ce framework est l'un des seuls dans le monde libre et gratuit à ne pas être dérivé d'un système d'exploitation propriétaire tel qu'Unix. La ligne directrice de conception est qu'il est essentiel de réduire autant que possible le nombre de lignes de code exécutées en mode noyau, ou en mode utilisateur d'importance critique (les deux constituant la TCB, Trusted Computing Base, code source auquel on doit faire confiance) dans un système d'exploitation orienté sécurité.
Genode peut être utilisé comme base pour créer un système d'exploitation avec environnement de bureau$^,$ ou pour un système d'exploitation de tablette, ou pour un moniteur de machine virtuelle pour un système d'exploitation hôte. Le framework Genode a déjà été utilisé comme composant de confiance dans des systèmes de virtualisation sécurisée pour x86 et ARM.
La petite taille du code source de Genode en fait une alternative flexible comparée aux systèmes d'exploitation plus complexes dérivés d'Unix. Pour cette raison, ce framework a été utilisé comme base pour des travaux de recherche dans des domaines tels que la virtualisation, la communication inter-processus, l'isolation de pile IP$^,$, les systèmes de surveillance et le développement logiciel$^,$.

## Historique

Genode trouve ses origines dans l' "Architecture de système d'exploitation Bastei", un rapport de recherche à l'Université technique de Dresde. Cette thèse se focalisait sur la faisabilité technique d'un système d'exploitation séparé en composants (services) et doté d'un modèle de sécurité basé sur les capabilities. Elle était motivée en partie par les travaux de recherche sur le micronoyau L4 menés durant cette période. À la suite du succès rencontré en implémentant un prototype, les auteurs de la thèse fondèrent la compagnie Genode Labs, Bastei devenant alors le Genode OS framework.

## Versions

Le projet est développé publiquement suivant le modèle open source sous la licence GNU Affero General Public License, avec une entité commerciale proposant des licences alternatives. Les versions se succèdent à intervalle de trois mois pour effectuer des changements dans l'ABI, les APIs, et mettre à jour la documentation. Le code source du framework est disponible, ainsi que (depuis la version 18.02) un système d'exploitation généraliste basé sur Genode, baptisé Sculpt avec déploiement de fichier binaire.

## Fonctionnalités de l'architecture

Genode s'appuie sur la philosophie générale des micronoyaux - plus le code source est simple et de taille réduite, plus il est facile de vérifier qu'il est correct et digne de confiance. Genode étend cette philosophie à l'espace utilisateur en assemblant des applications complexes à partir de composants de petite taille. Chaque composant existe dans une hiérarchie stricte de relations parent-enfant. Tout composant jouant le rôle de parent peut appliquer des politiques d'accès aux ressources et aux mécanismes de communication (IPC) de ses enfants. Ce système d'organisation hiérarchique entraîne un partitionnement intuitif et une réduction graduelle des privilèges, les sous-systèmes spécialisés étant inféodés aux systèmes plus généraux, ce qui permet de réduire le risque de confused deputy problem endémique dans les systèmes centralisés ou à super-utilisateur.
Le framework est conçu pour tourner sur un micronoyau; mais la plupart des micronoyaux ont un ensemble de fonctionnalités en commun, et les noyaux hybrides implémentent un super-ensemble de ce socle commun. Le fait d'abstraire ces fonctionnalités permet à Genode de faire office d'espace utilisateur pour toute une variété de micronoyaux L4$^,$ ainsi que pour Linux.

## Critiques
### C++

Genode est souvent critiqué pour le choix de C++ comme langage d'implémentation (un choix partagé par d'autres systèmes d'exploitation y compris BeOS, Fuchsia, Ghost, Haiku, IncludeOS, OSv, Palm OS, ReactOS, Syllable, et tous les moteurs de navigateur web majeurs). Les critiques affirment en général que le C++ est un mauvais choix pour les librairies système et les APIs à cause de sa complexité intrinsèque et de la difficulté à vérifier l'exactitude de l'implémentation. Bien que Genode fasse usage de l'héritage multiple et des templates dans ses librairies système, l'usage de la librairie C++ standard y est banni, et les fonctionnalités du C++ qui requièrent un état global implicite, tel que le TLS et l'allocateur global, sont désactivées dans le runtime. Le C++ ne permet pas l'analyse statique en profondeur, mais le projet Genode met en œuvre et publie des tests unitaires fournissant une analyse empirique.

### XML

Les composants Genode consomment et publient leur état via du XML sérialisé, à l'opposé du modèle "texte simple" des dérivatifs d'UNIX. XML est souvent critiqué pour ses fonctionnalités complexes, sa représentation inefficiente, et la relative difficulté d'édition à la main des documents XML. Le projet Genode fait usage du XML dans virtuellement tous ses composants car le XML est facile à parser et à générer par les programmes, tout en gardant la possibilité d'être lu et édité à la main. Le dialecte utilisé par Genode est un sous-ensemble simple du XML complet, mais les utilisateurs novices mentionnent souvent l’édition du XML comme fastidieuse et prompte à commettre des erreurs. Comme aucune fonctionnalité spécifique au XML n'est utilisée, le langage de configuration de Genode pourrait éventuellement être remplacé par des langages plus simples tels que JSON, mais aucun plan de migration n'est annoncé pour l'instant.

### Espaces de nommage

Genode est dénué de tout espace de nommage global en tant que tel, il n'y a ni système de fichier ni registre ni processus ni connexion IPC qui soient partagés au niveau global. Cela le place en opposition des systèmes tels que UNIX qui incluent un système de fichier omniprésent et permettant aux taches super utilisateur d'influer sur tout processus de façon arbitraire. Déclarer de façon explicite les permissions et le routage des composants peut sembler laborieux comparé à UNIX. D'un autre coté, la compartimentalisation de l'administration permet aux sous-systèmes d'être gérés sur la même machine par des administrateurs qui ne se font pas confiance sans pour autant utiliser la virtualisation, qui est la méthode d'isolation habituelle.

## Sculpt

Le projet Genode publie un système d'exploitation pour ordinateur personnel baptisé "Sculpt" qui cible les ordinateurs portables contemporains. Sculpt est système de base de taille réduite offrant une détection et configuration automatique des périphériques, des interfaces de contrôle graphiques, et une interface pour le gestionnaire de paquets de Genode. Ce système n'offre pas un environnement de bureau complet, mais nécessite de déployer une ou des machines virtuelles hébergeant des systèmes d'exploitation traditionnels pour obtenir un bureau complet. Sculpt se distingue du framework Genode par son large usage de reconfiguration dynamique grâce à des composants de contrôle privilégiés, au lieu de systèmes spécialisés avec des politiques statiques.