Haiku OS als Plattform
« | 02 Jul 2023 | »Ein neues Mitglied wird provisorisch in die Familie aufgenommen:
Haiku, die
OpenSource-Variante des früheren BeOS
Betriebssystems.
Das GATE Projekt wird nun um einen Platform-Support-Layer für BeOS erweitert.
Kompilieren für Haiku/BeOS
BeOS und Haiku basieren (zumindest in der 32-bit Version) auf
GCC Kompilaten.
Von daher ist die Toolchain dem Linux Build im GATE Projekt ziemlich ähnlich …
… dachte ich.
Und tatsächlich stimmt das auch, denn unter einem frisch installierten Haiku
lässt sich der Build-Prozess mit cmake
und make
ganz regulär starten.
Im ersten Test erstellte ich so Konsolenprogramme, die unter Haiku ausgeführt werden konnten.
Alternativ werden auch Docker
Images für Linux angeboten, in denen ein Cross-Compiler für Haiku enthalten ist.
Hier bedurfte es einer CMake-Toolchain Datei um die nötigen Pfade zu setzen.
Der Build klappte zwar, doch die Binärdateien waren im Anschluss nicht in
Haiku ausführbar.
Das wirft mich jetzt etwas zurück, da die Docker-Entwicklung effizient abgelaufen wäre. So muss ich in der VM mit UIs arbeiten, die sich anders verhalten als gewohnt, was leider immer Zeit kostet.
Aber hey … wir stehen noch ganz am Anfang … das wird schon noch werden.
Die Kernel API
Da das GATE Projekt direkt mit dem OS reden soll, müssen einige GATE-APIs für Prozesse, Threads, Atomics, Zeit und Dateien neu implementiert werden.
Die BeOS APIs basieren großteils auf C++ Klassen, was im GATE Projekt mit
meinen C-Vorgaben kollidieren würde. Doch die Kernel-Schnittstellen für die
genannten Basisdienste sind zum Glück reine extern C
Funktionen und können
somit direkt aufgerufen werden:
Bisher kam ich mit folgenden BeOS-spezifischen Headern in Berührung:
Interessant finde ich, wie “einfach” die Schnittstellen gehalten sind. Natürlich fehlen auch einige Konstrukte, die ich aus den POSIX-Threads kenne, doch diese werden sich alle mit dem bestehenden Grundstock nachbilden lassen.
Beschrieben ist alles im Be Book - Kernel Kit
Offene Frage: C++
Sobald es zu den höheren Funktionen wie IPC oder UIs kommt, ist
C++ zwingend erforderlich. Hier käme ich dann in die ungewöhnliche
Situation, dass ich einen C-Wrapper um die C++ Klassen schreiben
müsste, um sie in die C Bibliotheken integrieren zu können.
Und am Ende würde der GATE C++ Layer wieder C++ daraus machen.
Das ist natürlich reiner Overhead, aber vorerst sehe ich keine Alternative … doch wer weiß, was ich noch alles von dem neuen alten OS lernen kann.
Es wird allerdings noch einiges an Zeit vergehen, bis ich an diese Decke stoßen werde.
Fazit
BeOS/Haiku Interna zu lernen mag mancher als Zeitverschwendung abtun.
Ich sehe es anders.
Jede neue Plattform hat ihre Eigenheiten, die in Ihrer Umgebung absolut
legitim sind. Nur durch das “Erleben” aller Facetten lässt sich Code so
erarbeiten, dass er wirklich universell einsetzbar wird.
So wie ich von Windows gutes und schlechtes API-Design erlernte,
von Linux gutes Streaming und schlechtes Service-Management,
und von DOS enge Limits und direkte Zugriffe,
so erwarte ich mir auch von BeOS/Haiku eine neue Sicht auf die Welt,
aus der ich Gutes übernehmen und Schlechtes umgehen kann.