Est-ce un OS ? Est-ce un conteneur ? Non… c'est un Unikernel !
Les Unikernels améliorent les performances et la sécurité des applications en soumettant le système d'exploitation à une cure d'amaigrissement drastique : encombrement réduit, zéro déchet. Mais cette nouvelle « superinvention » dans le domaine des OS ne convient pas à toutes les applications.
Les unikernels allègent l'OS pour économiser les ressources de traitement, améliorer les performances et renforcer la sécurité.
Les systèmes d'exploitation classiques sont devenus excessivement lourds, encombrés de fonctionnalités dont seule une petite partie est véritablement nécessaire aux applications. Or, les fonctionnalités inutilisées consomment d'importantes ressources qui seraient mieux employées par des machines virtuelles supplémentaires. L'approche par unikernel consiste à compiler directement dans l'application elle-même des fonctionnalités choisies de l'OS.
Traditionnellement, un OS fournit une interface utilisateur, identifie et organise le matériel système sous-jacent et lance et prend en charge les applications qui utilisent ce matériel. Complétés par des bibliothèques et autres pilotes, ces composants finissent par former des plates-formes complexes qui exigent de grandes quantités de mémoire, de cycles de traitement et d'espace de stockage avant même que l'application ne commence à réclamer la moindre ressources. Les besoins se multiplient avec la virtualisation, qui exécute un OS dans chaque VM.
Les systèmes d'exploitation compacts, tels que la version Nano Server de Windows Server 2016, allègent considérablement l'installation, en laissant de côté l'interface utilisateur graphique, la compatibilité 32 bits, la prise en charge du programme d'installation Windows et d'autres éléments.
Le concept d'unikernel consiste à réduire également l'OS, mais par une stratégie différente. Un développeur compile avec l'application les composants unikernel dont elle a besoin pour son fonctionnement. Ainsi, les bibliothèques unikernel répondent directement aux besoins de l'application, sans fonctionnalité supplémentaire.
Les développeurs n'en raffolent pas
Malgré des avantages intéressants, les systèmes unikernel présentent également des inconvénients. En particulier pour les développeurs.
En effet, l'obligation de recompiler et de redéployer l'application et l'unikernel pour chaque nouvelle version ou fonctionnalité pose des problèmes logistiques. Par ailleurs, la portée limitée d'un unikernel ne convient pas à de nombreuses applications d'entreprise. Enfin, les langages et l'environnement d'exécution nécessaires pour les unikernels peuvent limiter leur flexibilité.
Les développeurs et les services informatiques dont ils dépendent doivent évaluer les unikernels potentiels en fonction de la maturité et de la portée de chaque plate-forme, du langage de développement sous-jacent de l'unikernel (par exemple, C, Java, OCaml, Haskell, etc.), de l'environnement cible prévu ou privilégié (tel que Xen, KVM, kFreeBSD et d'autres) et enfin, de la taille de l'écosystème de bibliothèques global de l'unikernel.
L'OS de demain dans le datacenter
Les unikernels mettent en avant leurs avantages par rapport aux systèmes d'exploitation conventionnels : moins de ressources nécessaires, meilleures performances, environnements d'exécution flexibles et sécurité renforcée.
La sobriété des unikernels en matière d'utilisation des ressources permet aux datacenters d'héberger un plus grand nombre de VM et de charges de travail sur une infrastructure informatique donnée. Un OS unikernel tel que ClickOS n'exige qu'environ 5 Mo pour une VM classique, alors que Windows Server 2016 requiert au moins 512 Mo. Les exigences réelles varient néanmoins selon le nombre de bibliothèques unikernel effectivement compilées avec l'application.
Evidemment, moins les ressources sont sollicitées, plus les performances sont au rendez-vous. Un petit OS démarre beaucoup plus rapidement que sa version complète. Dans le cas d'un unikernel, le démarrage pourrait prendre moins d'une seconde, selon ce qu'affirme le concepteur de MirageOS. De même, les processus de migration des VM et de protection des données pourraient prendre moins de temps avec la version allégée d'un OS.
Pour l'essentiel, une application exécutée sur un unikernel forme une image fixe sur une VM ou directement sur le matériel physique sous-jacent. Cela devrait permettre des opérations hétérogènes (dans des environnements de datacenter virtualisés et physiques) plus flexibles.
Les unikernels améliorent également la sécurité. En effet, le petit nombre d'éléments de l'OS contribue à réduire la surface d'attaque potentielle, tandis que la compilation des composants de bibliothèque en même temps que l'application crée une image fixe dans laquelle ni l'application ni les composants de l'OS ne peuvent subir de modification. Il s'agit d'un changement radical par rapport aux systèmes d'exploitation conventionnels, qui subissent généralement des mises à jour et des correctifs.
Unikernels, hyperviseurs et virtualisation
Là où une VM typique exécuterait un OS complet et une application séparée, un unikernel exécute un OS et une application beaucoup plus réduits au sein de la VM, elle-même installée sur un hyperviseur. Mais ce n'est pas le seul rapport qui existe entre unikernels et hyperviseur.
En pratique, les développeurs délèguent souvent à un hyperviseur une partie des fonctionnalités généralement assurées par un OS. La plupart des déploiements en unikernel reposent sur les services d'un hyperviseur sous-jacent, tel que VMware ESXi, Microsoft Hyper-V, Xen ou KVM.
Les unikernels diffèrent toutefois des conteneurs, bien que leurs caractéristiques rappellent les comportements observés dans la virtualisation en conteneurs. Dans les conteneurs, les applications partagent toutes un noyau OS commun. Les unikernels permettraient à un datacenter de déployer un grand nombre de petites VM hébergeant des OS individuels, chacune d'entre elles bénéficiant ainsi d'un démarrage rapide. En fin de compte, les unikernels pourraient bien se prêter à des déploiements d'applications de type microservices.