3 points par GN⁺ 2024-05-25 | 1 commentaires | Partager sur WhatsApp

Nouveau projet de programmation : Bunnix

Contexte du projet

  • Pour prendre récemment un peu de recul par rapport au « vrai travail », un nouveau projet de programmation à faible risque et purement récréatif a été lancé.
  • À partir du 21 avril, l’objectif était de voir jusqu’où il serait possible de construire, en environ un mois, un système d’exploitation de type Unix pour la cible x86_64.
  • Le résultat est un système d’exploitation nommé Bunnix.
  • Au total, 27 jours ont été consacrés à ce projet.

Démo de Bunnix

  • Le fichier ISO de Bunnix 0.0.0 est disponible.
  • Il peut être démarré avec QEMU :
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • Il est aussi possible d’écrire l’ISO sur une clé USB pour démarrer sur du matériel réel.
  • Il a de fortes chances de fonctionner sur la plupart des machines AMD64.
  • Limitation : l’USB n’est pas pris en charge, donc un clavier PS/2 est nécessaire.

Composants de Bunnix

  • Le noyau de Bunnix est écrit principalement en Hare, avec quelques composants en C (lwext4, libvterm).
  • Pilotes pris en charge :
    • PCI (legacy)
    • périphériques bloc AHCI
    • tables de partition GPT et MBR
    • clavier PS/2
    • port série de la plateforme
    • horloge CMOS
    • framebuffer (configuré par le bootloader)
    • systèmes de fichiers ext4 et memfs
  • Fonctionnalités du noyau prises en charge :
    • système de fichiers virtuel
    • divers périphériques /dev
    • émulateur de terminal et prise en charge de termios
    • environ 40 appels système (par ex. clock_gettime, poll, openat, fork, exec, etc.)
  • Bunnix est un système mono-utilisateur et n’applique pas actuellement les modes de fichiers Unix ni la propriété des fichiers.

Bootloader

  • Deux bootloaders sont inclus :
    • Démarrage legacy : écrit en Hare.
    • Démarrage EFI : écrit en C.
  • Ils chargent le noyau sous forme de fichier ELF et chargent aussi un initramfs si nécessaire.

Logiciels en espace utilisateur

  • L’environnement est composé principalement de logiciels tiers :
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (pages de man)
    • sbase (core utils)
    • tcc (compilateur C)
    • Vim 5.7
  • La libc dérive de musl libc et a été modifiée pour répondre aux besoins de Bunnix.

Processus de développement de Bunnix

  • Le processus de développement a été documenté sur Mastodon.
  • Une partie du code de Bunnix provient d’un projet précédent, Helios.
  • La prise en charge d’ext4 et l’intégration du terminal virtuel ont été les parties les plus difficiles.
  • L’implémentation de l’ordonnanceur et de la gestion des signaux a également été un défi.
  • Le portage de logiciels tiers a été relativement simple grâce à la base musl libc.

Ce qui a été appris

  • Beaucoup de choses ont été apprises sur les systèmes de fichiers.
  • L’approche des pilotes a été simplifiée.
  • La complexité de la gestion des signaux est devenue plus claire.
  • Il a été confirmé qu’un allocateur bitmap est efficace pour la gestion mémoire.
  • Il est apparu qu’un noyau monolithique est bien plus simple à implémenter qu’un microkernel.

Plans pour la suite

  • Bunnix était un projet de loisir, et il n’est pas prévu d’y consacrer davantage de temps pour le moment.
  • À l’avenir, le retour au projet Helios est prévu afin d’y appliquer de nombreuses leçons apprises.
  • Priorités d’amélioration pour Bunnix :
    • cache du système de fichiers
    • correction des bugs ext4
    • procfs et top
    • fichiers mmap
    • plus de signaux (par ex. SIGSEGV)
    • prise en charge multi-utilisateur
    • périphériques bloc NVMe
    • périphériques bloc IDE
    • prise en charge d’ATAPI et d’ISO 9660
    • prise en charge de l’audio Intel HD
    • pile réseau
    • toolchain Hare dans le système de base
    • auto-hébergement

L’avis de GN⁺

  • La valeur de Bunnix : Bunnix est un bon exemple de kernel hacking avec le langage Hare, et peut être intéressant pour les développeurs qui veulent apprendre de nouveaux langages et technologies.
  • Conception du système de fichiers : la conception du système de fichiers est une partie importante du développement d’un système d’exploitation, et Bunnix permet d’en apprendre beaucoup.
  • Monolithique vs microkernel : c’est un bon cas pratique pour comparer les avantages et les inconvénients des noyaux monolithiques et des microkernels, et il offre une compréhension plus approfondie de la conception des systèmes d’exploitation.
  • Participation de la communauté : Bunnix est un projet open source qui pourrait encore progresser grâce à la participation et aux contributions de la communauté.
  • Axes d’amélioration futurs : les améliorations prévues pour Bunnix constituent de bonnes opportunités d’apprentissage pour les personnes intéressées par le développement de systèmes d’exploitation.

1 commentaires

 
GN⁺ 2024-05-25
Avis Hacker News

Résumé d'une sélection de commentaires Hacker News

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • C'est un projet vraiment génial, qui rappelle que l'Unix original a été inventé en quelques semaines.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • Cela a aussi permis de comprendre enfin le fonctionnement des signaux de bout en bout, et c'est franchement laid. C'était déjà perçu comme l'un des points les plus faibles de la conception d'Unix, et ce projet n'a pas changé cette impression.
  • Impressive, super cool, and inspiring!

    • Impressionnant, très cool et inspirant !
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • Ce genre d'exemple de « créer quelque chose d'impressionnant en X jours » demande beaucoup d'expérience et de talent accumulés pendant des années.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • C'était vraiment chouette de suivre les mises à jour quasi quotidiennes sur Mastodon et de voir quelqu'un d'aussi compétent assembler progressivement un logiciel complexe.
  • From "Linux System Call Table – Chromiumos"

    • Partage d'une ressource sur la table des appels système Linux.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare semble être un langage intéressant. Mais cette limitation risque, à mon avis, de freiner son adoption à l'ère du multicœur.
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Très cool. La plupart de ces clones d'Unix sont généralement écrits en C. Celui-ci est écrit dans un nouveau langage de programmation.
  • Quite cool, by making use of Hare instead.

    • Très chouette aussi d'avoir choisi d'utiliser Hare.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • En attente d'un OS qui traite les GPU comme des citoyens de première classe...