Mittwoch, 30. November 2011

M.Lotz: Zurück von der Bug-Safari

Michael Lotz, momentan Haiku-Vollzeitentwickler, hat einen weiteren Bericht über seine Arbeit geschrieben.

Wie in den Wochen zuvor, war er nochmal total im "Kernelmode" und spürte einigen tief im System versteckten Bugs hinterher. Dabei arbeitete er an einer Erweiterung des Interrupt Routing Codes, was hoffentlich Ticket #8111 lösen wird. Um der Ursache für Ticket #8085 auf die Spur zu kommen, beschäftigte er sich nochmal etwas ausführlicher mit dem Umgang mit "USB Legacy", konnte allerdings trotzdem nicht herausfinden was an Haikus Implementierung falsch sein könnte.

An dieser Stelle bittet Michael inständig Tickets im Bugtracker aufzugeben. Nur so können die Entwickler überhaupt von Problemen erfahren und an Lösungen arbeiten. Insbesondere kritische Fehler, die ein Booten des Systems verhindern, treten oft nur bei bestimmten Hardwarekonfigurationen auf und können daher von jemanden der nicht die gleiche Hardware hat nicht mal erahnt werden.
Ein Beispiel für so einen Fall ist Ticket #8153, welches einzig mit den dort hinterlegten Informationen gelöst werden konnte.

Um Problemen nachspüren zu können die nur bei längerer Laufzeit auftreten, hat sich Michael einen Zweitrechner aufgebaut, damit er nebenher produktiv weiterarbeiten kann. Hier laufen z.B. auch Ermittlungen zu Ticket #7889, bei dem immer wieder ganze Audio CDs ausgelesen werden müssen.

Auf dem Zweitrechner fand auch eine bereits erfolgreiche Detektivarbeit statt, die das Ticket #8068 lösen sollte, ein Bug der den app_server abschießt. Michael stieß bereits selbst auf diesen Crash während er am Treiber für die Sandybridge-Grafik bastelte. Er tritt nur unter VESA auf und, wie sich herausstellte, nur bei Multi-CPU Maschinen. Außerdem schien der app_servers nur Opfer zu sein und nicht der eigentliche Auslöser des Crashs. Ein Skript, das ständig die Auflösung wechselt, konnte den Crash beliebig reproduzieren.
Die Fährte führte zum vm86 Code, der als virtueller 8086 Mode gestattet VESA BIOS Aufrufe zu benutzen. Nachdem er sich etwas in den vm86 Code eingearbeitet hatte, wurde ihm klar, dass Code zum Interrupthandling bei den letzten Änderungen nicht aktualisiert wurde. Leider stellte sich raus, dass zumindest dieser Bug nicht daran lag.

Da der Crash nicht bei Einzel-CPU Maschinen auftrat und der virtuelle 8086 Mode generell nicht anfällig für Thread-Scheduling ist, musste das Problem beim Verlassen des 8086 Modes liegen. Wie Michael herausfand, wird dabei nicht alles wieder so hergestellt, wie es vor dem Eintritt in den 8086 Modus war. So wurde auch das %fs Register wieder hergestellt, das Haiku für den CPU-spezifischen Thread Local Storage (TLS) (eine Art Thread-gebundener Speicher) verwendet. Das geht solange gut, bis der Thread der den Mode-Wechsel macht durch den Scheduler auf eine andere CPU gewechselt wird während er sich noch im 8086 Modus befindet. Beim Wechsel zurück in den User-Modus stürzt dann der nächste ab, der TLS benutzt.
Der eigentliche Fix für den Bug waren dann nur wenige geänderte Zeilen im Programmcode.

Das zeigt mal wieder, was für große Auswirkungen kleine Änderungen haben können. Und wie wenig der Umfang eines Code-Commits den dahinter stehenden Aufwand wiederspiegeln.

Am Ende seines Blogs kündigt Michael seine Pläne für die nächste Zukunft an: Es geht wieder zurück zum Funknetzwerk. Allerdings nicht um Wifi selbst oder dessen Verschlüsselung; das ist bereits funktionsfähig. Ihm geht es um die Alltagstauglichkeit, und das ist in erster Linie die automatische Anmeldung an Netzwerken ohne ständige Passworteingabe.
Dazu wird er eine API zum Verwalten und sicheren Speichern von Passwörtern, Schlüsseln und Zertifikaten verallgemeinern und implementieren, die Axel Dörfler vor einiger Zeit mal geplant hat. Diese wird dann systemweit zur Verfügung stehen und kann auch von anderen Anwendungen genutzt werden. Davon könnte beispielsweise WebPositive profitieren, um die Logins zu diversen Webseiten zu verwalten.

Donnerstag, 24. November 2011

Wieder ein "Haiku Stipendium" in Neuseeland

Die University of Auckland in Neuseeland setzt weiter auf Haiku als Plattform für ihre Forschungsarbeit. Hier wurde unter Christof Lutteroth und Gerald Weber das "Auckland Layout Model (ALM)" entwickelt und auch "Stack & Tile" zur Anordnung von Fenstern und andere GUI Projekte, wie das Umbauen von GUI-Elementen durch den Benutzer zur Laufzeit, wurden hier erdacht.
In der Vergangenheit wurde dafür schon einmal ein Stipendium vergeben, damals ein volles 3-Jahres-PhD-Scholarship an Clemens Zeidler, und jetzt wird ein weiterer Haiku Entwickler in den Genuss eines finanzierten 2-montigen Sommerstudiums in Kiwi-Land kommt. Alex Wilson, der über den Google Summer of Code 2010 zu Haiku kam und dabei tief in das Layout Management vorgedrungen ist, ist wohl die Idealbesetzung für die Forschungsarbeit "Integrating Web Apps and GUIs". Eine Super Chance für Alex sich und nebenher auch Haiku weiterzuentwickeln!

Doch damit nicht genug. Neben diesem Stipendium über 5.000 $NZ würde das Computer Science Department unter Christofs und Geralds Führung gern noch weitere Haiku-basierte Forschungsobjekte betreuen. In einem offenen Brief suchen sie daher nach Leuten mit abgeschlossenen Studium, die ihr Ph.D. oder Master in diesem Feld machen wollen. Sie müssten dabei zwar für die anfallenden Gebühren aufkommen, in vielen Ländern gibt es für so ein Auslandsstudium allerdings diverse Stipendien.
Wer bereits Gelder von einer Universität erhält, kann als Gastforscher untergebracht werden, erhält einen Arbeitsplatz an der Uni und kann dann einige Zeit mit den Forschern der University of Auckland zusammenarbeiten. Viele Unis unterstützen solche Gastbesuche auch finanziell.

Wer Interesse hat ernsthafte Forschung unter Haiku zu betreiben, und das auch noch praktisch in Mittelerde, möchte sich bei Christof Lutteroth oder Gerald Weber melden.

Freitag, 18. November 2011

Berichte von Michael Lotz' Auftragsarbeit

Wie berichtet, arbeitet Michael Lotz zur Zeit im Auftrag von Haiku Inc. mehr oder weniger Vollzeit an Haiku. Ab und an schreibt er darüber auf seinem Blog auf der Haiku Webseite. Bisher sind zwei sehr detaillierte Berichte dort erschienen, die ich hier nur kurz zusammenfassen werde. Natürlich wünschen sich alle Haiku Fans noch öfter Statusberichte lesen zu können, allerdings sagt Michael selber, dass seine Arbeit oft langwierig ist und für Außenstehende meist wenig spektakuläre Erfolge zeitigt.

Der erste Monat der Vertragsarbeit
vom 27. Oktober 2011

Das erste große Ziel waren WPA-verschlüsselte Funknetzwerke. Nachdem unverschlüsselte und WEP-kodierte bereits seit einiger Zeit funktionierten, war dies ein ziemlich schwerwiegender Schwachpunkt, da nur WPA2-verschlüsselte Netzwerke adäquate Sicherheit bieten. Der Weg führt über den in der UNIX-Welt verbreiteten wpa_supplicant, der in der Vergangenheit schon von mehreren Leuten versucht wurde zu portieren, aber nie wirklich problemlos lief.
Nachdem Michael den entscheidenden Bug schon im Sommer beseitigt hatte, fehlte noch eine echte Integration in Haiku. Das Problem war, dass der wpa_supplicant aus der Ein-Thread-UNIX-Welt stammt und sich nicht ohne weiteres in die Multi-Thread-Welt von Haiku einfügt. Anstatt sich abzuspalten und den wpa_supplicant nun komplett auseinanderzunehmen - und sich dadurch von zukünftigen Entwicklungen abzukoppeln - entschied sich Michael die ganze Sache zu serialisieren. Das heißt Anfragen werden nacheinander abgearbeitet, wie aus der UNIX-Welt gewohnt.
Das war nicht ganz trivial, aber am Ende wurde es zu einer ziemlich stabilen Komponente, die man als OptionalPackage installieren kann. Mit einem aktuellen Nightly Image geht das im Terminal mittels installoptionalpackage wpa_supplicant.
Zur Auswahl des Funknetzwerks und Eingabe des Passworts erscheint momentan noch jedes mal ein kleines Fenster. Später soll das Passwort in einer Art Schlüsselbund sicher aufbewahrt werden. Das soll dann aber eine allgemein nutzbare Lösung werden, es muss also erst eine gute API entwickelt werden.

Die zweite große Herausforderung war die Unterstützung für Michaels neuen Thinkpad X1, den er sich nicht zuletzt zulegte, um effektiver arbeiten zu können als mit seinem in die Jahre gekommenen HP Laptop. Mit einem 2.5GHz schnellen Core i5, Sandybridge Chipset und integrierter Intel Grafik, Wifi und HDA-Audio, sollte Haiku ohne große Probleme darauf zum Laufen zu bekommen sein. Gerade auch weil Intel gut mit Opensource Treiber zusammenarbeitet und Spezifikationen verfügbar macht.
Neben den momentan noch nicht nutzbaren USB 3.0 Ports und dem noch stummen HDA Audio, fiel sofort die nicht unterstützte Sandybridge-integrierte Grafik auf. Da der VESA Modus nicht die native Auflösung brachte, war alles verzerrt und verschwommen. Um richtig arbeiten zu können, musste also der intel_extreme Treiber aufgebohrt werden. Das gelang Michael auch nach relativ kurzer Zeit, jedoch hängt alles noch von der korrekten Initialisierung durchs BIOS ab und die Ausgabe über HDMI funktioniert noch nicht.

Nachdem er wegen Krankheit etwas ausgebremst wurde, ging Michael zur Abwechslung auf Bugjagd indem er sich ein paar interessante Einträge im Bugtracker vornahm. Die Ursache eines interessanten Effekts, bei dem ein Fenster beim Wechsel der Arbeitsfläche auf der verkehrten Arbeitsfläche gezeichnet wird, konnte er leider noch nicht aufspüren.

Dies zeigt einen der Hauptvorteile so eines Zeitvertrags: Man hat die Zeit schwierigen Problemen nachzugehen, auch wenn in diesem Fall die Lösung noch aussteht. Gleichzeitig zeigt es aber auch wie frustrierend es sein kann Stunde um Stunde im System zu wühlen, und am Ende das ursprüngliche Problem doch nicht gelöst zu haben. Stress, dem man als Freizeit-Programmierer aus dem Weg gehen kann, nicht aber wenn man so gewissenhaft wie Michael einen Vertrag erfüllt.


Grüße aus dem Kernel Debugging Land
vom 17. November 2011

Seit dem letzten BeGeistert ist Michael in Kernel und Speichermanagement vertieft. Während des BeGeistert Code Sprint hat er zusammen mit Ingo Weinhold Abstürze durch zufällig überschriebene Speicherbereiche und nicht freigegebenen Speicher untersucht. Dazu haben sie diverse Mechanismen zum Debuggen entwickelt, die helfen die Ursachen von speicherabhängigen Abstürzen zu ermitteln.
Ein weiteres Debugging Tool wurde geschaffen, um nachvollziehen zu können welcher Prozess Speicher anfordert ohne ihn wieder freizugeben. So konnte Michael feststellen warum selbst bei einem ruhenden System die Speicherauslastung stetig stieg. Dabei stellte sich heraus, dass der freie Speicher gar nicht wirklich immer weniger wurde, sondern dass er nur falsch berechnet wurde. Jetzt wird die Speicherauslastung richtig angezeigt, was nicht nur eine kosmetische Korrektur ist, da dieser Wert natürlich auch beeinflusst wie das System reagiert (wenn es z.B. denkt der Speicher würde knapp).

All diese Debug Tools wendet Michael an, wenn er Tickets in dieser Richtung aus dem Bugtracker bearbeitet. Oft müssen dazu vom Bugmelder noch einige Infos erfragt werden, was durch das hin und her der Emails und evtl. Zeitzonenunterschiede eine oft mal recht langwierige Geschichte sein kann.
Zudem konnte er den Bug meistens nicht auf seiner Hardware nachvollziehen, wodurch er viel blind in der Logik des Codes herumstochern muss. Jetzt lässt Michael auf einigen seiner anderen Rechner Stresstests laufen und hofft so die Fehler reproduzieren zu können.

Auch wenn dieses Kerneldebugging nicht dafür taugt aufsehenerregende Berichte zu schreiben, die Enduser - immerhin die Mehrheit der Spender für diese Aktion - gerne sehen, so ist es doch dringend nötig. Nur so kann Haiku zu einem stabilen System werden und Alpha/Beta-Phasen irgendwann hinter sich lassen.
Auftragsarbeit ist dazu wie geschaffen, da man sonst kaum Zeit findet so tief in das System einzusteigen und dran zu bleiben. Außerdem gibt es nur wenige, die sich dazu gut genug auskennen, und noch weniger, die sich dazu offenbar so gut wie Michael Lotz dazu motivieren können.

Freitag, 11. November 2011

Wechsel von SVN zu Git

Am 12. November 2011 ist es soweit, der komplette Haiku Sourcecode wandert aus dem Subversion (SVN) Repository in ein Git basiertes System. Durch das einfachere Abspalten und Zusammenführen in/aus privaten Kopien der offiziellen Codebasis, soll Entwicklern die Mitarbeit an Haiku erleichtert werden. Außerdem ist dieser Prozess unter Git erheblich schneller als mit SVN und lokale Änderungen (Patches) können auch nach längerer Zeit noch in die Codebasis eingefügt werden. Durch Dienste wie GitHub oder Bitbucket kann man auch einfach seine lokalen Änderungen veröffentlichen und damit anderen Entwicklern Einblick gewähren. Gefallen die Änderungen, können sie einfach in die offizielle Codebasis übernommen oder dazu ein Patch generiert werden.

Zu diesem Thema gab es beim letzten BeGeistert einen Vortrag von Oliver Tappe, der die Recherche für den Wechsel des Systems durchführte und natürlich auch maßgeblich bei dessen Umsetzung beteiligt ist.
Den Vortrag gibt es in vier Teilen als "Migrating Haiku from SVN to Git" [1][2][3][4] bei YouTube.

Für alle Entwickler und Image-Bauern bedeutet das, dass ab 12. November 2011 das SVN Repository nur noch schreibgeschützt existiert und alle auf das neue Git Repository zugreifen sollten. Dazu existiert bereits eine kleine Anleitung.

In Kürze (und unter Vorbehalt, da ich es noch nicht selbst ausprobiert habe) geht das Runterladen des Sourcecodes für alle ohne Commit-Rechte nun so:

1. Git installieren - in Zukunft ist das natürlich automatisch in den Images

installoptionalpackage git

2. Git konfigurieren - wird unter ~/.git/ gespeichert
git config --global user.name "Hans Mustermann"
git config --global user.email "hans.mustermann@email.de"

3. Source runterladen
git clone git://git.haiku-os.org/haiku
Wer nicht unter Haiku arbeitet, benötigt noch die Buildtools:
git clone git://git.haiku-os.org/buildtools

4. Source updaten
cd /Pfad/haiku/haiku
git pull

Google Code-In 2011

Wie schon im letzten Jahr, ist Haiku auch dieses Jahr wieder beim "Google Code-In (GCI)" mit dabei. Das ist praktisch der kleine Bruder des "Google Summer of Code (GSoC)", nur das hier viele kleine Aufgaben zu lösen sind, die nicht unbedingt mit Programmierung zu tun haben und sich an jüngere Schüler/Studenten richtet.

Die Kategorien sind wie letztes Jahr: Dokumentation, PR, Qualitätssicherung, Recherche, Training, Übersetzung und User Interface Untersuchungen.

Anders als im letzten Jahr können diesmal nicht mehr jederzeit neue Aufgaben hinzugefügt werden. Am 21. November geht's los und erst am 16. Dezember kann nochmal nachgelegt werden. Der ganze Spaß endet dann am 16. Januar 2012. Details zu den Regeln gibt's auf der offiziellen Google Code-In Seite.

Wer neben den schon vorhandenen Ideen noch weitere für mögliche Aufgaben hat oder als Mentor mithelfen möchte, möge sich bitte auf der allgemeinen Haiku Mailingliste melden.