- Système d’exploitation 64 bits de style DOS développé en Rust, avec un peu d’assembleur x86 également utilisé pour le chargement du noyau
- Implémente le mode texte VGA (80x25), le système de fichiers FAT12 et une pile réseau IPv4 via SLIP (ICMP/UDP/TCP/HTTP)
- Exécuté et développé sur une machine virtuelle basée sur QEMU, avec prise en charge partielle de véritables supports disquette
- Inclut des utilitaires de base comme un éditeur de texte, l’autocomplétion TAB pour fichiers/répertoires, le jeu Snake, etc.
Architecture et chargeur de démarrage
- Le CPU cible est x86_64, avec un support futur prévu pour l’architecture ARM (aarch)
- Les premières versions chargeaient et exécutaient le noyau en mémoire via un bootloader écrit à la main
- Sur le noyau 64 bits, le bootloader GRUB2 est utilisé pour gérer l’entrée en Long Mode et la transition depuis le Protected Mode
- Le bootloader stage2 effectue notamment la configuration de la GDT, de l’IDT, de la pagination et l’attribution du pointeur Multiboot2
- Le noyau se compose d’un interpréteur de commandes shell et de divers composants personnalisés
Émulation et images dans QEMU
- Le développement et les tests sont réalisés dans un environnement de machine virtuelle via QEMU
- Création d’images ISO : utilisation de grub2-mkrescue et xorriso
- Prise en charge de la création et du montage d’images de disquette FAT12, utilisables sur du matériel réel ou via le drapeau QEMU
-fda fat.img
Procédure d’initialisation
- À l’entrée dans le noyau, vérification du Long Mode, des tags Multiboot2, du système de fichiers FAT12, de l’état VGA, etc.
- Après l’affichage d’un logo en ASCII art, le contrôle est transmis à la boucle du shell
Système de fichiers
- Prise en charge du système de fichiers FAT12 : lecture/écriture/recherche/suppression de fichiers, création/suppression de répertoires, etc.
- Création et écrasement de fichiers texte, avec prise en charge des sous-répertoires
- Inclut une fonction de vérification de cohérence du système de fichiers avec l’outil fsck
- La prise en charge de FAT32 est également prévue par la suite
Pile réseau
- Envoi et réception de paquets IPv4 sur la base du protocole SLIP
- Prise en charge du traitement des trames Ethernet (tests non terminés)
- Prise en charge de ICMP Echo (Request/Reply), d’UDP et de TCP (machine à états SYN/SYNACK)
- Serveur HTTP simple : diffusion de pages HTML statiques
Jeu Snake
- Jeu Snake intégré, avec une future version multijoueur (P2P TCP) également prévue
- Les données du jeu (niveaux, score) peuvent être sauvegardées et rechargées sous forme de fichiers texte
- Touche ESC pour quitter la partie, avec enregistrement du meilleur score selon le résultat
Intérêt du projet et points d’usage
- En tant qu’exemple de système d’exploitation écrit en Rust, il permet de mieux percevoir les gains en sécurité et en productivité dans le développement logiciel bas niveau
- Grâce aux tests SLIP/ICMP, à un déploiement simple et à la prise en charge de machines réelles, il convient bien à l’expérimentation autour des OS et à l’apprentissage d’implémentations personnalisées
- Il permet de découvrir directement une architecture de système de type DOS combinant Rust et assembleur x86
1 commentaires
Commentaires sur Hacker News