Lancement d'une initiative pour retravailler l'hyperviseur Xen dans Rust

Xen

Xen est un hyperviseur qui fournit une isolation sécurisée, un contrôle des ressources, des garanties de qualité de service et la migration des machines virtuelles.

Les développeurs de la plateforme XCP-ng, développée dans le cadre du projet Xen, ont publié un plan visant à créer un remplacement en Rust pour plusieurs composants de la pile logicielle Xen .

L'hyperviseur Xen lui-même n'a pas encore été traité et le travail se concentre principalement sur la refonte des composants individuels de l'ensemble d'outils.

La plateforme utilise actuellement des composants en C, Python, OCaml et Go, dont certains sont obsolètes et posent des problèmes de maintenance. Il est à noter que l'utilisation de Rust n'entraînera pas d'augmentation du nombre total de langages pris en charge, car un seul composant est implémenté en Go, et son remplacement est prévu.

Évidemment, ne vous attendez pas à ce que nous réécrivions l'hyperviseur Xen et tout dans Rust lors de notre première tentative. En fait, notre objectif ici est de commencer à remplacer certains des plus petits composants qui l'entourent, ce qui nous permet de "développer" le langage lui-même et de réfléchir à la manière de remplacer les éléments bloc par bloc, pour l'ensemble de la plate-forme.

Rust a été choisi car il allie performances élevées et sécurité mémoire, ne nécessite pas de ramasse-miettes, convient au développement de composants bas et haut niveau, et offre des fonctionnalités supplémentaires pour réduire les risques d'erreurs, comme un vérificateur d'emprunts. De plus, Rust est plus largement adopté que le langage OCaml basé sur XAPI, ce qui facilitera l'intégration de nouveaux développeurs au projet.

Dans un premier temps, le remplacement de plusieurs composants est prévu afin de résoudre les problèmes de processus et de préparer le terrain pour le remplacement d'autres parties de la pile logicielle. Plus précisément, les outils invités Linux seront d'abord réécrits en Rust, alors qu'ils utilisent actuellement le langage Go, et le processus d'arrière-plan de collecte des métriques sera écrit en OCaml.

Étant donné que Rust est sûr et rapide, que nous faut-il de plus ? Il nous faut également un langage de programmation capable d'intervenir à différents niveaux (aussi bien au bas qu'au haut de la pile). Je ne ferais pas confiance à Go ou Python pour gérer les tâches de bas niveau que nous pouvons effectuer dans XCP-ng, et – de la même manière – je ne ferais pas confiance à C pour gérer les tâches de haut niveau. L'utilisation de Rust offre la possibilité d'être présent à tous les niveaux de la pile XCP-ng.

De plus, Rust n'est plus un langage "de niche". Par exemple, même s'il est génial, OCaml (utilisé dans XAPI) n'est pas très connu, ce qui réduit nos chances d'embaucher facilement des personnes ayant de l'expérience dans ce langage. Cela réduit également la capacité d'une communauté open source à gagner des contributeurs. Nous pensons que Rust ne sera pas un obstacle à cela (à la fois l'embauche et les contributions), probablement même le contraire : un moteur pour attirer plus de personnes, car c'est une technologie "recherchée".

La nécessité de repenser les outils invités Linux (xe-guest-utilities) découle de problèmes de qualité du code et de développement extérieurs au projet Xen et relevant du Cloud Software Group, ce qui freine le packaging et l'influence de la communauté sur le développement. Une nouvelle version de l'ensemble d'outils (xen-guest-agent) est prévue, entièrement créée de zéro, dans un souci de simplicité et en séparant la logique de l'agent des bibliothèques. Il a été décidé de retravailler le processus de collecte des métriques (rrdd), car sa compacité et son indépendance facilitent l'expérimentation d'un nouveau langage lors du développement.

L'année prochaine, nous commencerons probablement le développement du composant xenopsd-ng en Rust, ce qui nous permettra d'optimiser l'architecture de notre pile logicielle. L'idée principale est de centraliser le développement des API de bas niveau dans un seul composant et d'organiser la distribution de toutes les API de haut niveau au reste de la pile via celui-ci.

Enfin, si vous souhaitez en savoir plus, vous trouverez les détails en suivant ce lien.


Ajouter comme source préférée dans Google