Haiku Neuigkeiten: Dezember 2021

Di, 11. Januar 2022, Niklas

In diesem Beitrag geht es ausschliesslich darum, welche Änderungen an Haiku selbst vorgenommen wurden. Es gibt einige weitere spannende Entwicklungen, die ausserhalb von Haikus Git Repository stattgefunden haben, wie der X11 Kompatibilitätslayer Xlibe (wir berichteten) oder der experimentelle Wine Port (wir berichteten), aber das kann nicht alles in nur einem Artikel zusammengefasst werden.

Zum Ende des Jahres wurden wieder einmal die Beteiligungsstatistiken für Haiku und Haikuports ausgewertet. Dort sieht man die Anzahl der Commits pro Jahr, die Anzahl der Mitwirkenden und viele weitere Statistiken. Erstaunlicherweise zeigt die Statistik für Haiku die kleinste Anzahl an Commits in der Geschichte von Haiku und die wenigsten Mitwirkenden seit 2016, obwohl so viele grosse Fortschritte erzielt wurden.

Haikuports, das Repository für Haiku Pakete, hat dieses Problem nicht. Sowohl die Anzahl der Änderungen als auch die Zahl der Mitwirkenden steigt, letztere erreicht mit 75 einen neuen Rekord. Es gibt aktuell 3037 Rezepte für Pakete im Haikuports Repository und mit der Verfügbarkeit von Xlibe und Wine ist damit zu rechnen, dass die Zahl im neuen Jahr stark steigen könnte.

Die Grösse des Haiku Codes bleibt seit 2015 stabil bei etwa 30000 Dateien, die insgesamt rund 5,5 Millionen Zeilen ausmachen. Von den 30000 Dateien sind 16000 Quellcode, die anderen 14000 eine Mischung aus Dokumentation, Übersetzungen, Kataloge für locale kit, Scripts für das Build System und verschiedene Binärdateien für Icons, Programmressourcen und anderes.

Nun aber zu den Neuigkeiten bei Haiku. Einen überwältigenden Teil machen im Dezember die Treiber aus. Wie schon in den letzten Monaten wurde fleissig an den Grafiktreibern gearbeitet. Der Intel Grafiktreiber unterstützt jetzt PLL Programmierung auf Skylake Chips, erste Unterstützung für das DDI Interface und eine Implementierung von Interrupt Handling für neuere Hardwaregenerationen. Das verbessert die Unterstützung für modernere Intel Chips und für verschiedene Anschlüsse (DVI, DisplayPort und eDP brauchen alle eine spezielle Handhabung im Treiber).

Auch am AMD Radeon Grafiktreiber wurden Verbesserungen vorgenommen. Dieser unterstützt jetzt modernere Hardware, ausserdem wurden ein paar fehlende Teile hinzugefügt. Bei Laptops mit AMD Radeon Grafik kann jetzt die Bildschirmhelligkeit eingestellt werden.

Ausserdem wird an den Treibern für Eingabegeräte gearbeitet. Die Treiber für USB und I2C Tastaturen sollen wieder vereinheitlicht werden. Ursprünglich war die Datei für I2C eine Kopie der Datei für USB mit ein paar Änderungen. Durch die Zusammenführung wird verhindert, dass sich die Treiber auseinanderentwickeln, wenn Änderungen nur an einem davon vorgenommen werden. Des Weiteren wurde das Output des B_GET_DEVICE_NAME ioctl bei diesen Treibern verbessert. Über weitere Verbesserungen wird aktuell beraten.

Fortschritte gibt es auch beim ARM Port. Im Dezember wurden mehrere Patches für ein besseres Interrupt Handling überprüft und in das Haiku Repository übernommen. Die Bootstrap Pakete sind jetzt ausreichend stabil und wurden auf den Buildserver hochgeladen. Das bedeutet, es ist jetzt möglich, ein nicht-Bootstrap Build des ARM Ports zu testen. Momentan wird das allerdings nur zu einem Bootscreen führen, der ein paar Icons anzeigt und wurde hauptsächlich in QEMU getestet. Der nächste Schritt wird sein, einen Treiber für Massenspeicher hinzuzufügen, damit der Boot Prozess einen Schritt weiter kommt. Dazu wird am virtio Treiber gearbeitet. Vielleicht wird auch der SDHCI Treiber für SD und MMC Karten zuerst fertig.

Am RISC-V Port wird ebenfalls weiterhin gearbeitet. Die erste Implementierung für SMP (Unterstützung für mehrere CPU Kerne) wurde diesen Monat in den Haiku Code übernommen. Der Code war schon länger vorhanden, musste aber noch geprüft und aufgeräumt werden.

Im Kernel wurden verschiedene Probleme mit der neuen condition_variable Implementation behoben. Es sollte jetzt weniger Fehler haben und trotzdem noch etwas schneller sein, als die vorherige Version. Ausserdem wurde ein Fehler bei der Metadata Checksum Unterstützung im Ext2/3/4 Dateisystemtreiber behoben.

Der EFI Bootloader wurde optimiert, um auch auf 32Bit x86 Systemen zu funktionieren. Das ist für Geräte nützlich, die kein 64Bit EFI Unterstützen, wie einige ältere Apple Geräte und x86 Tablets. Der EFI Bootloader wurde dadurch so umgebaut, dass es in Zukunft einfacher wird, ihn auf neue Architekturen zu portieren.

Netzwerkstack und POSIX-Kompatibilität haben ebenfalls Verbesserungen erhalten. In der UDP Implementation wurde ein Double Free behoben. Im TCP Stack und der XSI Semaphore Implementation wurden Fehler behoben, die durch die NSPR Testsuite gefunden wurden. Im DHCP Client wurde ein Problem mit dem Timeout Management behoben. Vorher konnte er nicht mit längeren Lease-Zeiten als einer Stunde umgehen und überschwemmte das Netzwerk manchmal mit DHCP Anfragen.

Im app_server wurde ein Problem im Umgang mit Bitmap Cursors behoben. Es war möglich, app_server zum Absturz zu bringen, wenn man ihm beim Setzen eines anderen Cursors ungültige Parameter gab. In der B_OP_COPY drawing mode Implementierung wurde ein Fehler behoben, der dazu führte, dass das Auswahlrechteck in Wonderbrush weiss statt durchsichtig war. Im Schriftartenmanagement wurde ein Fehler behoben, der dazu führte, dass falsche Schriftmetriken benutzt wurden, wenn ungewöhnliche Styles in der Schriftart verfügbar sind.

Es gab auch einige Änderungen bei den Programmen und beim User Interface. Auf der russischen Tastatur wurde das Rubel-Symbol an die richtige Stelle verschoben. In WebPositive wurde die Höhe des Ladebalkens der Statusleiste angepasst (abhängig von der Schriftgrösse). ActivityMonitor kann jetzt die aktuelle CPU Frequenz anzeigen, ausserdem wurde die Performance verbessert, sodass beim Neuzeichnen der Graphen weniger CPU Last entsteht. Ausserdem wurden benutzerdefinierte Icons für Ordner im Tracker repariert.

Bei den Debugging-Tools hat strace einige Verbesserungen erhalten. Es unterstützt jetzt pull und select calls und kann mehr ioctl Konstanten dekodieren. Ausserdem wurde die Möglichkeit hinzugefügt, mehrere Syscalls von verschiedenen Prozessen gleichzeitig auszuführen. Strace ist ein Tool, das ein Programm ausführt und alle Aufrufe an den Kernel aufzeichnet, sodass man verstehen kann, was das Programm tut.

Zu guter Letzt wurde auch am Build System gearbeitet. Es wurden verschiedene Probleme mit den Compiler Flags für den Bootloader behoben. Der Bootloader ist etwas Besonderes im Build System, weil er nicht als Haiku Programm kompiliert wird, sondern als das, was von der Plattform zum Boot gebraucht wird (EFI Executable, OpenFirmware Executable oder etwas, was vom BIOS gestartet werden kann). Das wurde nicht korrekt umgesetzt und manche Befehle wurden mit den falschen Flags ausgeführt oder sogar mit der falschen Executable. Das wurde besonders beim ARM Port zum Problem, wo der Bootloader sehr unterschiedliche Compiler Flags benötigt.

Es wurden verschiedene Probleme im Code behoben, um zu ermöglichen, dass Haiku mit GCC 11 kompiliert werden kann. Das ist jetzt der Standard und ersetzt GCC 8.3. Danach wurden einige Compiler Warnings behoben, die nach der Umstellung aufgetaucht sind. Ausserdem wurden Fehler in der Konfiguration von LGTM behoben. LGTM ist ein Static Code Analyzer, der den Quellcode von Haiku auf mögliche Probleme scannt.

Quelle: https://www.haiku-os.org/blog/pulkomandy/2022-01-06-activity-report/