Haiku Neuigkeiten: Oktober 2021

Mi, 10. Oktober 2021, Niklas

Es ist wieder so weit, das Haiku Projekt, ein freier Nachbau des alten BeOS Betriebssystems, berichtet über die Fortschritte in der Entwicklung. Beta 3 ist inzwischen erschienen und ein voller Erfolg. Trotzdem gibt es noch viel zu tun und das Projekt hat wieder beeindruckende Fortschritte gemacht.

Der Kernel wird jetzt immer mit GCC 8 kompiliert, auch auf 32 Bit Systemen. Bisher wurde GCC 2 benutzt, um die Kompatibilität zu BeOS Treibern zu erhalten, aber aufgrund von anderen Neuerungen wie SMAP, wodurch sich das ABI leicht änderte, haben diese ohnehin schon einige Zeit nicht mehr funktioniert. Da sich niemand beschwert hat, sieht das Projekt keinen Grund, die Treiberkompatibilität weiterhin zu behalten. Die Umstellung sorgt für Performanceverbesserungen auf 32 Bit Systemen, da GCC 8 den Code besser optimiert. Ausserdem können Kernelentwickler jetzt modernere C++ Funktionen verwenden.

Des Weiteren wurden Optimierungen am Syscall Entry und Exit vorgenommen. Hier enthielt der Assembler Code einige nutzlose Synchronisierungsinstruktionen, die nur für Hardware Interrupts und nicht für Syscalls gebraucht werden. Diese wurden entfernt.

Es wurden auch einige Anstrengungen unternommen, um das Haiku Hauptpaket zu verkleinern. Aus diesem Grund wurden Translators, Media Add-ons und WLAN Firmwares in eigene Pakete ausgelagert. Sie sind trotzdem noch vorinstalliert. Der Grund für die Änderung ist, dass das Hauptpaket deutlich öfter aktualisiert wird als diese Bestandteile und es ergibt wenig Sinn, die gleichbleibenden Teile jedes Mal neu herunterzuladen.

Das Flat Theme für Haiku, das bereits seit Juni 2020 in Arbeit ist, wurde jetzt zum haiku_extras Paket hinzugefügt. Es kann einfach über Haiku Depot installiert und dann in den Einstellungen aktiviert werden. Damit sieht Haiku deutlich moderner aus. Achtung: Nur für Nightly Nutzer! Beta 3 Nutzer erhalten das haiku_extras Update nicht bzw. erst mit der nächsten grossen Beta.

Im Repository mit den Haiku Build Paketen wurden libavif und ZSTD aktiviert. libavif wird fuer den AVIF Translator gebraucht, ZSTD soll in Zukunft für die HPKG Pakete zum Einsatz kommen und zlib ablösen. Es wird die Pakete kleiner und schneller machen. Ausserdem wurden die Paketinformationen vereinfacht, um zu vermeiden, dass manche Angaben für jede Architektur einzeln gemacht werden müssen.

Der Quellcode der Tools Container und ShelfInspector wurden in Haiku eingefügt. Diese ermöglichen das Testen von Replikanten, ohne sie auf dem Desktop einfügen zu müssen. Sie erscheinen dann in einem eigenen Fenster, was hilfreich beim Debugging ist. Es gab davon zu BeOS Zeiten schon einige Implementierungen, aber bisher war keine im Haiku Quellcode enthalten.

Die os-prober Scripts zum automatischen Erkennen und Hinzufügen von Haiku zu GRUB wurden ebenfalls mit aufgenommen. Vorher waren diese nur im Bug Tracker von Debian zu finden und wurden nicht gemerged. Man hofft, dass sie in die offiziellen os-prober Releases aufgenommen werden, wenn sie jetzt besser zu finden sind.

Auch an den Programmen wurde gearbeitet. In HaikuDepot wurde der Sprachfilter repariert, mit dem nur Review in Sprachen angezeigt werden, die der Nutzer versteht. Ausserdem wurde eine Spalte hinzugefügt, die anzeigt, wann ein Paket zuletzt aktualisiert wurde.

Im MediaPlayer wurde das Caching von Längen in der Playliste verbessert, wenn Dateisysteme verwendet werden, die diese Information nicht in den Dateiattributen speichern können. So kann man zum Beispiel auch auf read-only Dateisystemen ohne Verzögerung durch die Liste scrollen.

Die Hexadezimal-Ansicht in DiskProbe wurde optisch aufgewertet und stellt die Reihen jetzt unterschiedlich dar und hat vertikale Linien, damit man nicht so leicht durcheinander kommt. Das thttpd Server, der vom Poorman Webserver verwendet wird, wurde auf die neueste Version aktualisiert. HaikuWebKit wurde auch aktualisiert, was die Performance verbessert und einige Abstürze behebt.

Die Server und Bibliotheken wurden ebenfalls verbessert. app_server hat Unterstützung für die neu eingeführten RGB48 und RGBA64 Colorspaces bekommen. Ausserdem wurde die Verarbeitung von Clipping und Reverse Clipping verbessert.

Es wurden einige Funktionsanmerkungen hinzugefügt, um GCC mitzuteilen, dass manche Funktionen immer Pointer mit Vielfachen von 2 Bytes zurückgeben. GCC kann dadurch schnelleren Code generieren, zum Beispiel durch Verwendung von SSE2 Instruktionen, die diese Ausrichtung erfordern.

Einige fehlende POSIX Errors wurden zu Errors.h hinzugefügt. Der B_FILE_NOT_FOUND Error wurde aus dem Storage Kit entfernt. Er war schon in BeOS R5 als veraltet markiert und wurde durch den allgemeineren B_ENTRY_NOT_FOUND Errorcode ersetzt.

BMenu hat jetzt Methoden, um Einträge zu sortieren und tauschen, ohne sie zu löschen und neu zu erstellen. Das wird in der Liste der WLAN-Netzwerke genutzt. Vorher konnten Einträge gelöscht werden, als das Menü gerade offen war, was einen Absturz auslöste.

Ein paar spezielle Memory Copy Funktionen wurden aus dem app_server entfernt. Sie wurden als Workaround für Einschränkungen des AGP Bus eingeführt und werden nicht mehr gebraucht, weil die Implementierung von memcpy jetzt genauso gut funktioniert.

Folgende Verbesserungen wurden an den Treibern vorgenommen:

  • Intel Grafiktreiber
    • Fehler bei Bildschirmschonern auf älterer Hardware behoben.
    • Bugfixes, wenn Programme ihr Bild am app_server vorbei direkt an den Treiber senden, zum Beispiel durch BWindowScreen.
    • Benutzerdefinierte Bildwiederholungsraten sind jetzt möglich.
    • Erlaubte Frequenzen wurden repariert (die Intel Dokumentation ist teilweise nicht korrekt, also werden jetzt die Informationen aus dem Linux Treiber benutzt).
    • Fortschritt bei der Unterstützung moderner Skylake und Haswell Chipsets.
  • Fehler bei fragmentierten USB Transfers und Locking Probleme im XHCI Treiber behoben.
  • NVMe Treiber verbessert, mit überarbeitetem Interrupt Handling, Optimierung der Transfers in bestimmten Situationen und besserer Verwendung mehrerer Threads. Das macht den Treiber schneller und mit mehr Hardware kompatibel.
  • SMAP Fehler im USB Massenspeicher und Matrox Grafiktreiber behoben.
  • Kleine Verbesserungen am Intel HD Audio Treiber.
  • Der Code für TTY Handling wurde überprüft, dabei wurden Locking Issues gefunden, die bei Nutzung der seriellen Schnittstelle zu einem Kernel Panic führen können.
  • Es wurde begonnen, den TTY Treiber für pseudo-TTY und Terminal und das TTY Modul für serielle Schnittstellen zusammenzuführen.
  • TCP Optionen sind jetzt in der gleichen Reihenfolge wie bei anderen Betriebssystemen, was theoretisch egal sein sollte, aber einige TCP Implementationen erwarten keine andere Reihenfolge.
  • Unterstützung für MSI-X Interrupts mit 64 Bit PCI BAR Adressen hinzugefügt.
  • VESA und Framebuffer Grafik wurden in zwei verschiedene Treiber aufgeteilt, da sie nicht viel Code teilen und der VESA Treiber mehr Funktionen bekommt.
  • Es wurde begonnen, die Netzwerktreiber mit FreeBSD 13 zu synchronisieren.
  • Der Radeon HD Grafiktreiber wurde verbessert, um einige neuere Grafikkarten zu unterstützen.

Neben den allgemeinen Veränderungen und Verbesserungen findet auch immer mehr Arbeit an der Unterstützung für andere CPU Architekturen statt. Von dem RISC-V Port, über den wir bereits berichteten, wurden weitere Teile übernommen. Das beinhaltet Fehlerkorrekturen bei einigen Linker Scripts und einen Absturz, wenn Threads beendet werden.

Es wird ausserdem daran gearbeitet, den Kernel auf ARM64 zum Laufen zu bringen. Gleichzeitig wird sehr aktiv am ARM (32 Bit) Port gearbeitet. Hier startet der Kernel bereits, des Weiteren wurden folgende Verbesserungen erarbeitet: Der frühe Startprozess wurde aufgeräumt, Unterstützung für das ARM MMU und die Übergabe vom EFI Bootloader zum Kernel wurde hinzugefügt, Fehlerkorrekturen bei Linker Scripts, vollständigere Verarbeitung von ARM-spezifischen ELF Sektionen und einige weitere Dinge.

In einigen Fällen, zum Beispiel auf manchen ARM Geräten, gibt es keinen nativen Textmodus, weshalb der Bootloader jetzt so angepasst wird, dass er eine Text-Konsole (Textmodus auf einem VGA Bildschirm oder serielle Schnittstelle) oder einen Framebuffer mit direkter Pixelzeichnung unterstützt. Je nachdem, was von der Hardware unterstützt wird, wird der Bootloader zwischen Textmodus und Framebuffer entscheiden. Das kann auch bei Systemen mit sehr eingeschränktem Textmodus wie SPARC nützlich sein.

Auch am SPARC Port wurde gearbeitet. Hier gibt es erste Schritte bei der MMU Unterstützung. Bei SPARC wurde das MMU mehrmals bei verschiedenen CPU Generationen verändert und ist ein sehr simples Design, das viel Softwareunterstützung braucht. Als ersten Schritt muss der Kernel die Traps (Exceptions) vom MMU verarbeiten und ihm die korrekten Daten geben. Aber weil der Kernel im virtuellen Speicher arbeitet, muss das MMU funktionieren. Das ist alles möglich und im SPARC Architekturdesign geplant, aber braucht viel spezifischen Code für das erste Setup. Ein Teil dieses Codes muss direkt in Assembler geschrieben werden, was diesen Schritt nicht so einfach macht.

Zu guter Letzt möchte ich auch noch auf die allgemeinen Optimierungen am Code eingehen:

  • Warnungen in video_producer_demo wurden behoben.
  • Die Keymap Einstellungen und die Bildschirmtastatur teilen ihren Code für die Anzeige einer Tastatur auf dem Bildschirm wieder. Ursprünglich war der Code in der Bildschirmtastatur eine Kopie der Keymap Einstellungen, aber sie wurden unterschiedlich weiterentwickelt.
  • Syslog, Power Daemon und mount_server nutzen die BServer Klasse, um sich mit dem app_server zu verbinden. Dadurch wird der Boot Prozess zuverlässiger und unnötige Abhängigkeiten zwischen den Services werden entfernt.
  • Der Launch Daemon wurde überarbeitet, um ein Problem zu beheben, durch das der Desktop manchmal nicht startete.
  • Es wird weiter am Beheben von Compiler Warnungen in allen Teilen des Codes gearbeitet, diesen Monat im Netzwerkstack, EFI Bootloader, netfs, Media Plugins, Translators, dem Kernel, Treibern und einigen anderen Stellen.
  • Der Weg um schwache Symbole, Alias und versteckte Funktionen zu definieren, wurde an einem Platz zusammengefasst. Vorher wurden sehr ähnliche Makros an verschiedenen Stellen definiert und genutzt.
  • Die Fehlermeldung von runtime_loader, wenn eine Bibliothek nicht gefunden wird, wurde verbessert. Sie zeigt jetzt an, welche andere Bibliothek versucht hat, sie zu laden. Das hilft beim Debuggen von ungewollten Abhängigkeiten.

Leider habe ich es aus privaten zeitlichen Gründen nicht geschafft, die letzten Activity Reports seit Mai zu übersetzen. Sie enthalten sehr interessante Informationen rund um die Weiterentwicklung des Projekts. Ich kann deshalb empfehlen, diese im englischen Original nachzulesen.

Quelle: https://www.haiku-os.org/blog/pulkomandy/2021-11-01-haiku_activity_report_october_2021/