Neues Programmierprojekt: Bunnix
Hintergrund des Projekts
- Um dem „echten Job“ kurz zu entkommen, wurde ein neues Programmierprojekt mit geringem Risiko gestartet, rein zum Vergnügen.
- Ab dem 21. April sollte ausprobiert werden, wie viel sich in etwa einem Monat an einem Unix-ähnlichen Betriebssystem für das x86_64-Ziel umsetzen lässt.
- Das Ergebnis ist ein Betriebssystem namens Bunnix.
- Insgesamt wurden 27 Tage in dieses Projekt investiert.
Bunnix-Demo
Bestandteile von Bunnix
- Der Bunnix-Kernel ist hauptsächlich in Hare geschrieben und enthält einige C-Komponenten (lwext4, libvterm).
- Unterstützte Treiber:
- PCI (legacy)
- AHCI-Blockgeräte
- GPT- und MBR-Partitionstabellen
- PS/2-Tastatur
- serielle Ports der Plattform
- CMOS-Uhr
- Framebuffer (vom Bootloader eingerichtet)
- ext4- und memfs-Dateisysteme
- Unterstützte Kernel-Funktionen:
- virtuelles Dateisystem
- verschiedene /dev-Geräte
- Terminal-Emulator und termios-Unterstützung
- etwa 40 Systemaufrufe (z. B. clock_gettime, poll, openat, fork, exec usw.)
- Bunnix ist ein Einbenutzersystem und erzwingt derzeit weder Unix-Dateimodi noch Eigentümerschaft.
Bootloader
- Enthält zwei Bootloader:
- Legacy-Boot: in Hare geschrieben.
- EFI-Boot: in C geschrieben.
- Lädt den Kernel als ELF-Datei und bei Bedarf auch ein initramfs.
User-Space-Software
- Besteht überwiegend aus Third-Party-Software:
- Colossal Cave Adventure (advent)
- dash (/bin/sh)
- Doom
- gzip
- less (Pager)
- lok (/bin/awk)
- lolcat
- mandoc (man pages)
- sbase (core utils)
- tcc (C-Compiler)
- Vim 5.7
- Die libc ist von musl libc abgeleitet und wurde an die Anforderungen von Bunnix angepasst.
Entwicklung von Bunnix
- Der Entwicklungsprozess wurde auf Mastodon dokumentiert.
- Ein Teil des Bunnix-Codes stammt aus einem früheren Projekt namens Helios.
- Die schwierigsten Teile waren die ext4-Unterstützung und die Integration virtueller Terminals.
- Auch die Implementierung von Scheduler und Signalbehandlung war anspruchsvoll.
- Das Portieren von Third-Party-Software war dank der musl-libc-Basis vergleichsweise einfach.
Was dabei gelernt wurde
- Es wurde viel über Dateisysteme gelernt.
- Der Ansatz für Treiber wurde vereinfacht.
- Die Komplexität der Signalbehandlung wurde besser verstanden.
- Es zeigte sich, dass ein Bitmap-Allocator für das Speichermanagement effektiv ist.
- Es wurde klar, dass ein monolithischer Kernel wesentlich einfacher zu implementieren ist als ein Mikrokernel.
Pläne für die Zukunft
- Bunnix war ein Freizeitprojekt, und derzeit ist nicht geplant, weiter Zeit hineinzustecken.
- Künftig soll zum Helios-Projekt zurückgekehrt und viele der gewonnenen Erkenntnisse angewendet werden.
- Verbesserungsprioritäten für Bunnix:
- Dateisystem-Cache
- ext4-Bugfixes
- procfs und top
- mmap-Dateien
- mehr Signale (z. B. SIGSEGV)
- Mehrbenutzer-Unterstützung
- NVMe-Blockgeräte
- IDE-Blockgeräte
- Unterstützung für ATAPI und ISO 9660
- Unterstützung für Intel HD Audio
- Netzwerk-Stack
- Hare-Toolchain im Basissystem
- Self-Hosting
Meinung von GN⁺
- Der Wert von Bunnix: Bunnix ist ein gutes Beispiel für Kernel-Hacking mit der Sprache Hare und könnte für Entwickler interessant sein, die neue Sprachen und Techniken lernen möchten.
- Dateisystem-Design: Dateisystem-Design ist ein wichtiger Teil der Betriebssystementwicklung, und an Bunnix lässt sich viel darüber lernen.
- Monolithisch vs. Mikrokernel: Ein gutes Beispiel, um die Vor- und Nachteile von monolithischen Kerneln und Mikrokerneln zu vergleichen, und es vermittelt ein tieferes Verständnis für Betriebssystemdesign.
- Beteiligung der Community: Bunnix ist ein Open-Source-Projekt und könnte sich durch Beteiligung und Beiträge aus der Community weiterentwickeln.
- Künftige Verbesserungen: Die geplanten Verbesserungen von Bunnix bieten Interessierten an Betriebssystementwicklung gute Lernmöglichkeiten.
1 Kommentare
Hacker-News-Meinungen
Zusammenfassung der Hacker-News-Kommentare
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 ...