- Fusion OS est un système d’exploitation amateur pour x86-64, implémenté en Nim
- Les fonctionnalités actuellement implémentées se répartissent entre le bootloader UEFI, la gestion de la mémoire, la gestion des tâches, les appels système, l’IPC et le support matériel
- La gestion de la mémoire et des tâches inclut le demand paging, le multitâche préemptif, l’ordonnancement basé sur les priorités et un chargeur ELF
- L’environnement d’exécution actuel est QEMU, et la compilation nécessite Nim,
clang·lldde LLVM, ainsi que Just - Les plans futurs incluent la sécurité basée sur les capabilities, les E/S disque, un système de fichiers, un shell, une interface graphique et le réseau
Aperçu de Fusion OS
- Fusion est un système d’exploitation amateur pour x86-64, implémenté en Nim
- Le processus de développement est documenté sur 0xc0ffee.netlify.app
- La section des captures d’écran inclut le bootloader UEFI, ainsi que les écrans de démarrage et d’exécution du noyau
- Les captures d’écran de l’interface graphique proviennent de la branche
graphics, qui est encore en cours de développement
Fonctionnalités actuellement implémentées
-
Boot
- Bootloader UEFI implémenté
-
Gestion de la mémoire
- Higher Half Kernel avec architecture Single Address Space
- Gestionnaire de mémoire physique
- Gestionnaire de mémoire virtuelle
- Demand Paging
-
Gestion des tâches
- Tâches noyau
- Tâches en mode utilisateur
- Multitâche préemptif
- Ordonnancement basé sur les priorités
- Chargeur ELF prenant en charge le Demand Paging et la relocation
-
Appels système
- Interface d’appels système
- Bibliothèque en mode utilisateur
-
IPC
- IPC basé sur des canaux
- Passage de messages
-
Matériel
- Énumération des périphériques PCI
- Configuration ACPI
- Timer APIC local
- Interruptions I/O APIC
- Pilote clavier PS/2
- Pilote Bochs Graphics Adapter
Fonctionnalités prévues
- Sécurité basée sur les capabilities
- Machines à états de tâches basées sur les événements
- E/S disque
- Système de fichiers
- Shell
- Interface graphique
- Réseau
Compilation et exécution
- La compilation nécessite Nim,
clang·lldde LLVM et Just - Les binaires
clangetllddoivent être présents dans lePATH- S’ils n’y sont pas, il est possible d’indiquer le chemin de ces binaires dans le fichier
.env
- S’ils n’y sont pas, il est possible d’indiquer le chemin de ces binaires dans le fichier
- La commande de compilation est la suivante
just build
- Fusion s’exécute actuellement sur QEMU
- La commande d’exécution est la suivante
just run
Licence
- La licence est MIT
1 commentaires
Avis sur Hacker News
Je suis l’auteur. Si vous avez des questions, j’y répondrai
Si non, pensez-vous que c’est grâce au GC propre à Nim, qui n’est pas stop-the-world ?
https://nim-lang.org/1.4.0/gc.html
Aujourd’hui, les deux semblent assez similaires, mais Swift me paraît avoir été davantage éprouvé en conditions réelles
Le blog et la documentation sont excellents. L’équilibre entre démonstration et explication est très bon, merci de partager tout cela
Comme il faut justifier tout ce que l’on fait, cela aide à éliminer la complexité inutile et à se concentrer sur les aspects les plus importants
Journal de développement de l’auteur de Fusion :
https://0xc0ffee.netlify.app/osdev/01-intro.html
C’est agréable à voir. Je suis impliqué par intermittence dans l’écosystème Nim depuis quelques années, et je suis content de voir que ce petit projet sympathique continue d’avancer
Très chouette. J’ai ouvert le module ELF et je l’ai trouvé lisible, c’était intéressant
J’aimerais un jour écrire un système d’exploitation temps réel en Nim. J’aime écrire des programmes embarqués en Nim, donc créer un RTOS devrait aussi être amusant
Qu’est-ce que Nim, et quels sont les grands objectifs de conception de Fusion ?
J’espère que la question n’est pas trop basique. Je n’ai absolument pas le contexte, donc j’aimerais que quelqu’un m’explique
Quant à la question de savoir pourquoi Nim, voici ce que j’ai écrit sur le site associé :
https://0xc0ffee.netlify.app/osdev/01-intro.html
Je serais ravi de voir davantage de projets Nim. J’utilise surtout Python et JavaScript, mais je m’intéresse à l’intérêt de connaître un langage moderne, rapide et à typage statique de plus
Entre Go, Rust, Zig et Nim, Nim est celui que je préfère. C’est celui qui me semble le plus pythonique, au sens où il y a peu de bruit syntaxique à la lecture du code
J’aime beaucoup utiliser un REPL pour prototyper du nouveau code, et INim fait bien ce travail
Le principal problème de Nim aujourd’hui est la petite taille de sa communauté. Le monde des bibliothèques utilisables et maintenues est donc plus restreint que dans d’autres communautés de langages. C’est un problème de poule et d’œuf, mais davantage de développeurs, moi compris, peuvent le résoudre en « devenant le changement qu’ils veulent voir dans le monde »
Le langage évolue aussi prudemment et, avec Araq aux commandes, je pense qu’il ne fera que s’améliorer à long terme
L’écosystème n’est pas aussi vaste que ceux de Python ou Rust, mais, étonnamment, la bibliothèque standard contient la plupart de ce dont on a besoin. Il est rare que je cherche un paquet tiers pour faire quelque chose
Bien sûr, je reconnais que Nim fait partie des langages les moins connus. Mais cela n’enlève rien au fait que c’est un langage prometteur, qui fait très bien ce qu’il est censé faire
À mon avis, le point sur lequel la communauté devrait davantage se concentrer est le support des IDE. L’extension VSCode est correcte, mais elle a encore des aspérités. Je préfère les IDE JetBrains, et le plugin Nim officiel est, pour le dire gentiment, très insuffisant
J’ai aussi un projet annexe pour créer un plugin JetBrains pour Nim, mais je n’ai pas encore beaucoup avancé dessus
[0] https://forum.nim-lang.org
[1] https://github.com/khaledh/nimjet
Nim est un excellent langage de programmation système, et il devrait être plus populaire