3 Punkte von GN⁺ 2024-05-25 | 1 Kommentare | Auf WhatsApp teilen

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

  • Eine Bunnix-0.0.0-ISO-Datei wird bereitgestellt.
  • Sie kann mit QEMU gebootet werden:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • Die ISO kann auch auf einen USB-Stick geschrieben und auf echter Hardware gebootet werden.
  • Wahrscheinlich läuft es auf den meisten AMD64-Geräten.
  • Einschränkung: Es gibt keine USB-Unterstützung, daher ist eine PS/2-Tastatur erforderlich.

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

 
GN⁺ 2024-05-25
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.

    • Ein wirklich tolles Projekt, das daran erinnert, dass das ursprüngliche Unix in nur wenigen Wochen erfunden wurde.
  • 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.

    • Ich habe endlich von Anfang bis Ende gelernt, wie Signale funktionieren, und das ist wirklich hässlich. Ich fand schon immer, dass dies einer der schwächsten Punkte im Unix-Design ist, und dieses Projekt hat mich nicht von dieser Ansicht abgebracht.
  • Impressive, super cool, and inspiring!

    • Beeindruckend, sehr cool und inspirierend!
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • Ein Beispiel dafür, dass es viel über Jahre aufgebautes Können und Talent braucht, um in X Tagen etwas Beeindruckendes zu erschaffen.
  • 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.

    • Es war wirklich toll, die fast täglichen Updates dazu auf Mastodon zu verfolgen und zu sehen, wie jemand mit so viel Können nach und nach ein komplexes Stück Software zusammensetzt.
  • From "Linux System Call Table – Chromiumos"

    • Ein Verweis auf Materialien zur Linux-System-Call-Tabelle.
  • 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 wirkt wie eine interessante Sprache. Ich denke aber, dass diese Einschränkung ihre Verbreitung im heutigen Multicore-Zeitalter begrenzen wird.
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Sehr cool. Die meisten dieser Unix-Klone werden üblicherweise in C geschrieben, dieser hier jedoch in einer neuen Programmiersprache.
  • Quite cool, by making use of Hare instead.

    • Ziemlich cool, gerade weil stattdessen Hare verwendet wird.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • Ich warte auf ein Betriebssystem, das GPU(s) als Bürger erster Klasse behandelt ...