Dmitry Zavalishin a parlé du projet de portage de la machine virtuelle du système d'exploitation Phantom pour fonctionner dans l'environnement du système d'exploitation micro-noyau Genode. L'entretien souligne que la version principale de Phantom est déjà prête pour des projets pilotes, tandis que la version basée sur Genode sera prête à être utilisée d'ici la fin de l'année. À ce stade, le site du projet ne présente qu'un prototype conceptuel fonctionnel, dont la stabilité et la fonctionnalité ne sont pas encore suffisantes pour un usage industriel, et parmi les plans à court terme, il est mentionné de développer une version alpha adaptée aux expérimentations par des développeurs tiers.
Le code du projet est distribué sous licence LGPL, mais le dernier changement dans le dépôt principal remonte à novembre 2019. L'activité publique liée au projet est concentrée dans le dépôt d'un fork pour Genode, qui est maintenu depuis décembre 2020 par Anton Antonov, étudiant de l'université d'Innopolis.
Le système d'exploitation Phantom s'est développé depuis le début des années 2000 comme un projet personnel de Dmitry Zavalishin, et depuis 2010, il est passé sous l'égide de la société Digital Zone, fondée par Dmitry. Ce système se distingue par son orientation vers une fiabilité élevée et l'utilisation du concept « tout est objet » au lieu de « tout est fichier », permettant de se passer de fichiers grâce à la conservation de l'état de la mémoire et à un cycle de fonctionnement continu. Les applications dans Phantom ne se terminent pas, mais sont simplement suspendues et reprennent leur travail au point où elles s'étaient arrêtées. Toutes les variables et structures de données peuvent être stockées aussi longtemps que nécessaire pour l'application, sans que le programmeur ait à se soucier de la sauvegarde des données.
Les applications dans Phantom sont compilées en bytecode, qui est exécuté dans une machine virtuelle de pile, similaire à la machine virtuelle Java. La machine virtuelle assure la persistance de la mémoire des applications : le système effectue périodiquement des captures d'état de la machine virtuelle sur un support permanent. Après un arrêt ou un crash, le travail peut reprendre à partir de la dernière capture sauvegardée. Ces captures sont créées en mode asynchrone et sans interrompre le fonctionnement de la machine virtuelle, mais dans le snapshot, un instantané est enregistré, comme si la machine virtuelle avait été arrêtée, sauvegardée sur disque puis redémarrée.
Toutes les applications s'exécutent dans un espace d'adresses global commun, ce qui permet d'éviter les changements de contexte entre le noyau et les applications, et simplifie et accélère considérablement les interactions entre les applications exécutées dans la machine virtuelle, qui peuvent échanger des objets par le biais de la transmission de références. La séparation des accès est effectuée au niveau des objets, dont les références ne peuvent être obtenues que par l'appel de méthodes appropriées (l'arithmétique des pointeurs est absente). Toutes les données, y compris les valeurs numériques, sont traitées comme des objets distincts.
Pour l'application, le travail semble continu et n'est pas affecté par les redémarrages du système d'exploitation, les arrêts d'urgence et les coupures d'alimentation. Le modèle de programmation pour Phantom est comparé à l'exécution d'applications qui ne s'arrêtent jamais. de serveurs Pour le langage de programmation objet. L'une des principales méthodes de développement d'applications est le portage pour Phantom de programmes écrits en Java, ce qui est facilité par la similitude de la machine virtuelle Phantom avec la JVM. En plus du compilateur de bytecode pour le langage Java, le projet prévoit la création de compilateurs pour Python et C#, ainsi que la mise en œuvre d'un traducteur de code intermédiaire WebAssembly.
Pour effectuer des opérations nécessitant une grande performance, telles que le traitement de la vidéo et de l'audio, il est possible de lancer des objets binaires avec du code natif dans des threads séparés (LLVM est utilisé pour compiler les objets binaires). Pour accéder aux services bas niveau du noyau, certaines classes VM (les « classes internes ») sont implementées au niveau du noyau du système d'exploitation. Une couche POSIX est prévue pour exécuter des applications Linux, émule les appels nécessaires au fonctionnement des processus Unix (la persistance pour les applications dans la couche POSIX n'est pas encore assurée).

Le système d'exploitation traditionnel Phantom, en plus de la machine virtuelle, inclut son propre noyau avec une implémentation des threads, un gestionnaire de mémoire, un ramasse-miettes, des mécanismes de synchronisation, un système d'entrée/sortie et des pilotes pour interagir avec le matériel, ce qui complique considérablement la préparation du projet pour une utilisation généralisée. Des composants avec une pile réseau, un sous-système graphique et une interface utilisateur sont développés séparément. Il est remarquable que le sous-système graphique et le gestionnaire de fenêtres fonctionnent au niveau du noyau.
Pour améliorer la stabilité, la portabilité et la sécurité du projet, une tentative de portage de la machine virtuelle Phantom pour fonctionner avec les composants du système d'exploitation micro-noyau open-source Genode a été entreprise, dont le développement est supervisé par l'entreprise allemande Genode Labs. Un environnement de construction spécial basé sur Docker a été préparé pour ceux qui souhaitent expérimenter avec Phantom sur Genode.
L'utilisation de Genode permettra d'utiliser des micro-noyaux et des pilotes déjà éprouvés, ainsi que de déplacer les pilotes dans l'espace utilisateur (dans leur état actuel, les pilotes sont écrits en C et s'exécutent au niveau du noyau Phantom). Il sera également possible d'utiliser le micro-noyau seL4, qui a été mathématiquement vérifié pour sa fiabilité, confirmant que l'implémentation correspond entièrement aux spécifications définies dans un langage formel. Il est envisagé de préparer une preuve de fiabilité similaire pour la machine virtuelle Phantom, ce qui permettra de vérifier l'ensemble de l'environnement du système d'exploitation.
Le port basé sur Genode est principalement utilisé pour le développement d'applications destinées à divers appareils industriels et embarqués. Actuellement, un ensemble de modifications pour la machine virtuelle a été préparé, et des couches fonctionnant au-dessus de Genode ont été ajoutées pour assurer la persistance des composants du noyau et des interfaces de bas niveau. Il est noté que machine virtuelle Phantom peut déjà fonctionner dans un environnement Genode 64 bits, mais il reste à mettre en œuvre le fonctionnement de la VM en mode persistance, à revoir le sous-système des pilotes et à adapter les composants avec la pile réseau et le sous-système graphique pour Genode.



Source : opennet.ru
