1 points par GN⁺ 2024-07-15 | 1 commentaires | Partager sur WhatsApp
  • 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·lld de 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·lld de LLVM et Just
  • Les binaires clang et lld doivent être présents dans le PATH
    • S’ils n’y sont pas, il est possible d’indiquer le chemin de ces binaires dans le fichier .env
  • 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

 
GN⁺ 2024-07-15
Avis sur Hacker News
  • Je suis l’auteur. Si vous avez des questions, j’y répondrai

    • Le garbage collector de Nim vous a-t-il déjà posé des difficultés ?
      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
    • Quelle a été la partie la plus pénible du projet ? Et auriez-vous des conseils pour quelqu’un qui voudrait écrire un système d’exploitation à partir de zéro ?
    • Où sont les captures d’écran ?
    • Je n’utilise pas Nim, mais je trouve le langage intéressant. J’ai déjà vu des gens se plaindre de devoir corriger d’anciens projets à chaque recompilation, donc je me demande à quelle fréquence, et avec quelle gravité, surviennent les changements cassant la compatibilité
    • Pourquoi avoir choisi Nim plutôt que Swift ?
      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

    • Le processus d’écriture m’a aidé à plusieurs reprises à améliorer la conception et l’implémentation. Écrire m’oblige à remettre en question mes hypothèses et à me demander si le lecteur comprendra pourquoi j’ai pris telle ou telle décision
      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

    • Si vous décidez de créer un RTOS, je serais vraiment curieux de suivre ça
    • ELF est un format de fichier très simple. J’aurais plutôt été surpris qu’il soit difficile à lire
  • 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

    • Comme d’autres l’ont dit, Nim est un langage de programmation à typage statique qui se compile vers C, C++ et JavaScript. Son interopérabilité avec C est bonne, ce qui facilite la programmation système
      Quant à la question de savoir pourquoi Nim, voici ce que j’ai écrit sur le site associé :

      Pourquoi Nim ? Nim est l’un des rares langages permettant de faire de la programmation système bas niveau avec gestion déterministe de la mémoire, destructeurs et sémantique de déplacement. Le garbage collector est optionnel. Le typage statique offre aussi davantage de sûreté de types. Il prend également en charge l’assembleur inline, indispensable au développement d’un système d’exploitation. Les autres options incluent C, C++, Rust et Zig. Ce sont tous d’excellents langages, mais j’ai choisi Nim pour sa simplicité, son élégance et ses performances.
      Les objectifs de conception globaux de Fusion sont assez ambitieux et sont listés sur la même page. Je ne veux pas créer un énième système d’exploitation de type Unix ; je veux expérimenter des questions fondamentales de conception des systèmes d’exploitation, comme un espace d’adressage unique et une sécurité fondée sur les capacités pour la protection
      Un autre aspect que je veux explorer est la façon de modéliser les processus et les tâches. Je pense qu’ils devraient être modélisés comme des machines à états communiquant entre elles via des canaux typés statiquement. Ce n’est pas une idée nouvelle : elle a déjà été tentée dans Singularity OS
      Le noyau dispose d’un support de base pour les canaux, ainsi que pour leur utilisation depuis l’espace utilisateur, mais cela en est encore à un stade précoce
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim est un langage sympa, qui donne l’impression d’être inspiré par Ada et Python
    • C’est indiqué dans la documentation du projet :
      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 »

    • Honnêtement, je n’ai jamais vraiment eu l’impression que la taille de la communauté soit un problème. Le forum Nim est actif, et quand on va y demander de l’aide, on obtient généralement des réponses rapides et précises
      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

    • C’est peut-être parce que je vieillis, mais imposer une indentation de deux espaces rend le code Nim difficile à lire. Les blocs de code ressortent à peine visuellement, et je n’ai pas envie de dépendre d’un IDE pour rendre le langage lisible