Haiku OS als Plattform

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:

1#include <kernel/OS.h>
2#include <support/SupportDefs.h>
3#include <support/TLS.h>

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.