Login
Newsletter
Werbung

Fr, 24. April 2015, 11:16

Software::Kernel

Kernel D-Bus im Schlamm steckengeblieben

Der Vorschlag von Greg Kroah-Hartman, eine Implementation von D-Bus in den Linux-Kernel aufzunehmen, hat erneut zahlreiche Diskussionen ausgelöst. Bis jetzt hat daher Linus Torvalds den Code nicht in den Kernel aufgenommen, so dass er voraussichtlich nicht in Linux 4.1 erscheinen wird.

Larry Ewing

D-Bus ist ein Nachrichtenbus-System, mit dem Anwendungen auf einfache Weise miteinander kommunizieren können. Es stellt sowohl einen System-Daemon (für Ereignisse wie »neues Gerät hinzugefügt« oder »Druckwarteschlange geändert«) als auch einen Sitzungs-Daemon pro eingeloggtem Benutzer (für allgemeine Kommunikation zwischen Anwendungen) bereit. D-Bus wurde unter dem Dach von freedesktop.org entwickelt und ist mindestens seit 2005 ein Standard für Linux-Systeme.

Während D-Bus sich zur Steuerung von Anwendungen bewährt hat, ist es zur Übertragung von nennenswerten Datenmengen nicht geeignet, da es nicht effizient genug ist. Es ist so gesehen keine vollständig brauchbare Interprozess-Kommunikation. Diese existiert unter Linux zwar in Form von anderen Mechanismen, aber konkurrierende Systeme einschließlich Android sind hierbei bereits weiter und bringen eine vollständige und leichter zu programmierende Implementation mit. Nachdem dieses Problem erkannt wurde, gab es mehrere Anläufe, D-Bus in den Kernel zu verlagern, da dies die Effizienz enorm steigern würde. Doch erst der dritte Versuch des sogenannten kdbus, der maßgeblich von Lennart Poettering, Kay Sievers und Daniel Mack entwickelt und von Greg Kroah-Hartman unterstützt wurde, konnte schließlich technisch überzeugen.

So dachte jedenfalls Greg Kroah-Hartman, als er die Aufnahme von kdbus bereits für Linux 4.1 anvisierte. Denn der vorgestellte Patch war nach Auffassung der Entwickler bereits ausgereift und hatte in der langen vorausgegangenen Diskussion versucht, alle Kritikpunkte der anderen Kernel-Entwickler zu beseitigen.

Doch für die Entwickler wohl recht überraschend flammte die Diskussion um kdbus erneut auf und erreichte wiederum epische Ausmaße. Von den üblichen Poettering-Hassern abgesehen, die auch hier den Mund nicht halten konnten, aber keinerlei Relevanz besitzen, gab es vor allem zwei hauptsächliche Streitpunkte. Der eine betrifft die grundsätzliche Implementierung und zerfällt wiederum in zwei Fraktionen. Von diesen stellt eine in Frage, dass man überhaupt eine kdbus-Implementierung benötigt, und die andere wünscht eine allgemeinere IPC-Lösung, von der kdbus dann ein Spezialfall wäre. Der zweite Streitpunkt betrifft das - im bisherigen D-Bus nicht vorhandene - Mitsenden von Metadaten mit jeder Nachricht. Diese Metadaten liefern beispielsweise Informationen über Berechtigungen.

Zahlreiche Gründe, warum kdbus sinnvoll ist, hatte Kroah-Hartman allerdings bereits im Patch aufgezählt. Unter anderem ist D-Bus als Daemon zu langsam für große Datenmengen. Es werden keine Zugriffsrechte-Informationen mit übertragen, ebenso fehlen Zeitstempel. Es ist in der frühen Bootphase nicht verfügbar, die Verbindung mit Sicherheits-Frameworks wie SELinux erfolgt in Benutzerprozessen und es gibt Race-Conditions bei der Aktivierung und Deaktivierung von Diensten.

kdbus wurde als Gerätetreiber implementiert, um den Netzwerkstack zu umgehen. Der Grund für diesen Weg war hauptsächlich der, dass die Betreuer des Netzwerk-Subsystems sich gegen eine Implementation in ihrem Subsystem ausgesprochen hatten. Mittlerweile gibt es aber auch wieder Proponenten, die eine Implementation im Netzwerk-Subsystem als besser ansehen, darunter insbesondere auch Alan Cox. Dies könnte kdbus auch zu einer allgemeineren Lösung machen.

Kompliziert scheint auch die Frage der Metadaten, die kdbus mit jeder Nachricht mitsenden will. Außerhalb des Kernels ist diese Funktionalität nicht möglich, der Kernel jedoch kann sicherstellen, dass dies auf sichere Weise geschieht. Einige Entwickler zweifeln an der Sicherheit dieses Ansatzes, oder auch an dem Ansatz an sich. Die kdbus-Entwickler haben jedoch bereits Einschränkungen vorgenommen, um Sicherheitslücken oder Informationslecks zu vermeiden.

kdbus hat das Potential, in zahlreichen bestehenden Anwendungen eingesetzt zu werden, die bisher speziell entwickelte Mechanismen verwenden mussten, weil D-Bus zu langsam war. Durch diese Vereinheitlichung wird redundanter Code eingespart und die Fehlerquellen werden reduziert. Genannt werden in der kdbus-Dokumentation das Authentifikations-Framework von Tizen, PulseAudio, Wayland und Logging-Daemonen. Zudem werden Latenzen beim Booten reduziert und Operationen ermöglicht, die bisher nicht auf sichere Weise möglich waren. Die Diskussion um die Implementation ist jedoch immer noch im Gange. Linus Torvalds hat sich aus der Diskussion überwiegend herausgehalten, scheint jedoch ihren Ausgang abwarten zu wollen. Daher hat er bisher den kdbus-Code nicht in den Kernel-Entwicklungszweig importiert. In Anbetracht der Tatsache, dass in zwei Tagen die Integrationsphase für Linux 4.1 endet, muss man nun davon ausgehen, dass kdbus nicht in Linux 4.1 erscheinen und nochmals mehr oder weniger stark überarbeitet wird. Der Patch ist trotzdem verfügbar und kann von allen Interessenten getestet oder genutzt werden.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung