Maestro, un noyau et un système d'exploitation de type Unix écrits de toutes pièces en Rust

Maître

Capture d'écran de Maestro

Rust a gagné suffisamment de popularité à tel point qu'il est devenu l'un de ceux choisis pour être intégré comme langage secondaire sous Linux, ainsi que dans d'autres systèmes d'exploitation, comme c'est le cas d'Android, qui possède déjà une partie du code dans Rust, Windows qui également a donné son approbation, entre autres.

Se reposer s'est avéré être un langage robuste et a généré une telle confiance Certains systèmes d'exploitation ont même été créés avec ce langage de programmation et pour n'en citer que quelques-uns, nous avons : Rédox, Nous avons également des noyaux écrits à partir de zéro, tels que Kerala ou le noyau utilisé dans le satellite que la Chine a récemment lancé.

La raison pour laquelle je mentionne cela est que je suis récemment tombé sur une nouvelle qui a attiré mon attention et c'est que Un projet a été présenté dans lequel un noyau écrit en Rust est développé et qui est partiellement compatible avec Linux.

Le nom de ce projet est "Prof" et comme mentionné, est un noyau de type Unix écrit en Rust implémentant un sous-ensemble d'appels système du noyau Linux suffisant pour créer des environnements de travail standards. En tant que tel, le projet "Maestro" n'est pas quelque chose de nouveau, puisque le développeur mentionne que le projet est né en 2018, mais à cette époque il était écrit en C et en raison des différents avantages et caractéristiques de Rust, le projet a été réécrit de zéro.

Sur la page du projet Les raisons du changement sont décrites :

C’est à ce moment-là que j’ai décidé de passer à Rust (mon premier projet dans ce langage), ce qui représentait plusieurs avantages :

  • Redémarrez le projet depuis le début, en utilisant les leçons tirées des erreurs précédentes.
  • Soyez un peu plus innovant que simplement écrire un noyau de type Linux en C. Après tout, utilisez simplement Linux à ce moment-là.
  • Utilisez la sécurité du langage Rust pour profiter de certaines difficultés de programmation du noyau. L'utilisation du système d'écriture Rust vous permet de transférer une partie de la responsabilité de la sécurité de la mémoire du programmeur au compilateur.

Dans le développement du noyau, le débogage est très difficile pour plusieurs raisons :

  • La documentation est souvent difficile à trouver et les implémentations du BIOS peuvent être boguées (plus souvent que vous ne le pensez).
  • Au démarrage, le noyau a un accès complet à la mémoire et peut écrire là où il ne devrait pas (son propre code, par exemple).
  • Résoudre les fuites de mémoire n’est pas facile. Des outils comme valgrind ne peuvent pas être utilisés.
  • gdb peut être utilisé avec QEMU et VMWare, mais le noyau peut se comporter différemment lorsqu'il est exécuté sur un autre émulateur ou une autre machine virtuelle. De plus, ces émulateurs peuvent ne pas prendre en charge gdb (par exemple VirtualBox).
  • Certaines fonctionnalités manquent dans la prise en charge de gdb dans QEMU ou VMWare et gdb peut même parfois planter

En relation avec caractéristiques du projet, il ressort que le noyau est monolithique et n'est actuellement pris en charge que sur les systèmes x86 en mode 32 bits. La base de code du noyau couvre environ 49 XNUMX lignes, étant exécutable à la fois sur du matériel réel et dans des environnements virtualisés, tels que QEMU ou VirtualBox.

Dans le développement actuel de «Maestro», 31% ont été mis en œuvre (135 sur 437) des appels système Linux. C'est suffisant pour charger un environnement de console basé sur Bash et la bibliothèque C standard Musl. De plus, l'environnement basé sur Maestro peut exécuter certains utilitaires de la suite GNU coreutils et des packages de base à partir de n'importe quel système Unix. Actuellement, des travaux sont en cours sur la mise en œuvre d'une pile de réseau et des travaux sont également en cours sur le développement d'un

Parmi les Les fonctionnalités disponibles de Maestro se démarquent les suivantes::

  • Contrôleurs pour clavier et terminal PS/2 avec mode texte et prise en charge partielle des séquences ANSI.
  • Système d'allocation de mémoire avec prise en charge de la mémoire virtuelle.
  • Planificateur de tâches basé sur l'algorithme round-robin avec prise en charge des signaux POSIX.
  • Définition des périphériques PCI.
  • Contrôleur IDE/PATA.
  • Système de fichiers Ext2.
  • Prise en charge des systèmes de fichiers virtuels /tmp et /proc.
  • Possibilité de monter des partitions de disque FS, MBR et GPT.
  • prise en charge des initramfs.
  • Contrôleur RTC pour minuterie et heure précise.
  • Prise en charge du chargement des modules du noyau.
  • Possibilité d'exécuter des fichiers exécutables au format ELF.

Pour intéressé à en savoir un peu plus sur le projet, vous pouvez vérifier les détails dans le lien suivant.  Quant à ceux qui sont intéressés par le code du projet, ils doivent savoir qu'il s'agit distribué sous licence MIT.