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
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
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.
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.
Impressive, super cool, and inspiring!
Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.
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.
From "Linux System Call Table – Chromiumos"
Code is here: Git Repository
Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:
Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.
Quite cool, by making use of Hare instead.
Waiting for an OS that treats GPU(s) as a first class citizen ...