Saturday, 26. September 2009, 13:29:54
Vor Kurzem hat
martingr für
Ikhaya einen Artikel zu
Kubuntu und Notify-OSD geschrieben. Darin beleuchtet er Nachteile von Ubuntus Notify-OSD gegenüber KNotify. Die Integration von Notify-OSD in KDE sei daher ein Rückschritt gegenüber den Fähigkeiten, die KDE von Haus aus mitbringt.
Die Situation in KDE kann ich als GNOME-Nutzer gar nicht beurteilen. Aber auch der Einzug von Notify-OSD in GNOME, das mit notification-daemon ja ebenfalls ein eigenes Benachrichtigungssystem hat, sorgte für einige Diskussionen. Wie so oft ist vieles natürlich Ansichtssache, und einige Positionen lassen sich auch nicht miteinander in Einklang bringen. Um den Meinungsbildungsprozess ein bisschen ausgewogener zu gestalten, möchte ich an dieser Stelle einmal ein paar Argumente
pro Notify-OSD anführen.
Dass ich dabei Martins Ausführungen zum Anlass nehme, soll dabei nicht heißen, dass ich seine Position für falsch halte. Aber in der Gegenüberstellung von Argument und Gegenargument lassen sich vielleicht einige Punkte verdeutlichen.
Argument 1: Für Notify-OSD müssen bestehende Anwendungen gepatcht werden.
Martin schreibt über die GNOME-Version von Notify-OSD:
Für die GNOME Implementierung müssen die existierenden Anwendungen angepasst werden.
Das Argument scheint auf den ersten Blick schwer zu entkräften, schaut man sich die
lange Liste von Anwendungen an, die noch gepatcht werden müssten, um mit Notify-OSD kompatibel zu sein.
Wozu genau sind aber diese Anpassungen notwendig? Es geht, wie auch Martin schreibt, darum, dass Notify-OSD keine
Actions unterstützt, also in die Benachrichtigung eingebettete Buttons. Ist damit nicht Notify-OSD unvollständig, und sollte nicht lieber dieser Bug in Notify-OSD behoben werden, anstatt alle Anwendungen anzupassen? An dieser Stelle kommen Standards und desktopübergreifende Spezifikationen ins Spiel: notification-daemon und KNotify implementieren eine Spezifikation des
Galago-Projekts. Das ist auch sehr nützlich, denn so funktionieren Benachrichtigungen unabhängig vom Desktop.
Warum implementiert Notify-OSD diese Spezifikation dann nicht? Denn offenbar ist Notify-OSD ja umständlicher als die bisherigen Systeme. Der Eindruck entsteht zumindest, wenn Martin schreibt, es
sollen die Anwendungen einzeln überprüfen, ob der Benachrichtigungsprozess Aktionen unterstützt, dann sollen sie global verworfen werden.
Doch dies ist genau das, was die
Spezifikation vorsieht: Nicht alle Implementierungen müssen alle möglichen Details umsetzen. Statt dessen gibt es eine Methode, mit der Anwendungen abfragen können, welche Fähigkeiten sie voraussetzen können, und welche nicht.
Damit muss man es also eigentlich genau andersherum formulieren: Die Änderungen, die die Ubuntu-Entwickler an den Anwendungen vornehmen, sind
Bug-Fixes. Diese Bugs bestehen darin, dass die Anwendungen die Spezifikation nicht korrekt umsetzen, sondern sich daran orientieren, was
de facto von den beiden bisherigen Implementierungen dieser Spezifikationen unterstützen. Das entspricht aber gerade nicht dem Sinn solcher Spezifikationen.
Warum aber implementiert Notify-OSD nicht einfach diese Aktionen in Benachrichtigungen? Das hängt mit dem zweiten Punkt zusammen:
Argument 2: Notify-OSD zeigt störende Dialoge, während KNotify ohne Dialoge auskommt.
Es geht bei dieser These um den Fall, dass eine Benachrichtigung eine direkte Aktion des Benutzers ermöglichen soll. Bisherige Benachrichtigungssysteme betten in diesem Fall einfach einen Button in das Benachrichtigungsfeld ein. Martin schreibt hierzu:
Die Plasma Benachrichtigungen haben das Ziel den Arbeitsfluss des Anwenders nicht zu unterbrechen und folgen dem Kein-Dialog Ziel für die Desktop Shells. Das Problem mit Dialogen ist, dass diese aus Versehen aktiviert werden können. Ein Dialog öffnet sich – wie der Name schon nahe legt – im Dialog mit einer Anwendung. Ein Dialog welcher nicht durch eine Interaktion des Nutzers geöffnet wird, ist daher falsch und der Fenstermanager verhindert zum Beispiel, dass dieser fokussiert werden kann.
Es bietet sich aber auch eine ganz andere Deutung an: Die Benachrichtungsfelder von KNotify (und übrigens auch von notification-daemon)
sind eigentlich Dialoge. Sie haben zwar keine Fensterrahmen, aber sie bieten die Möglichkeit zur Interaktion mit dem Benutzer an. Die angesprochenen eingebetteten Buttons sind genau ein solcher Fall. Das Argument, dass solche Buttons versehentlich aktiviert werden können, trifft also auf klassische Dialoge ebenso zu wie auf Notification-Felder mit Buttons.
Die Entscheidung, Actions in Notify-OSD nicht zu implementieren, ist deswegen die eigentliche Neuerung: Ein Benachrichtigungssystem soll Benachrichtigen, aber eben keine Interaktionen ermöglichen. Deswegen kann man auch durch eine Benachrichtigung von Notify-OSD „hindurchklicken“. Praktisch etwa, wenn man ein Fenster schließen will, während oben rechts eine Benachrichtigung erscheint. Man klickt nicht versehentlich auf die plötzlich auftauchende Benachrichtigung, sondern, wie beabsichtigt, auf den Schließen-Knopf des Fensters.
Deswegen hat Martin auch die Ideen des Projektes etwas verzerrt wiedergegeben:
Nun sieht die Ayatana Implementierung vor, dass Dialoge anstelle von Aktionen in Benachrichtigungen angezeigt werden.
Die Implementierung zeigt Dialoge an, falls Anwendungen (fälschlich, wie ich oben dargestellt habe) Aktionen vorsehen, ohne die Fähigkeiten der Implementierung abgefragt zu haben. Damit ist das Anzeigen von Dialogen anstelle der Aktionen gerade nicht gewollt, sondern eine Übergangslösung für fehlerhafte Anwendungen. Bei der Implementierung von Notify-OSD wurde gerade sehr darauf geachtet, möglichst gut in der aktuellen Situation zu funktionieren, ohne die Vorteile des neuen Systems aufzugeben.
In einem Punkt muss ich Martin jedoch Recht geben: Auch ich bin nicht wirklich überzeugt davon, ob die vorgesehene Dauerlösung mit den Indikator-Applets wirklich der beste Weg ist. Es ist das eine, eine spezifikationskonforme Implementierung eines Standards zu entwickeln. Es ist aber etwas anderes, ein eigenes Aktions-System zu entwerfen, was von den Anwendungen upstream umgesetzt werden soll, ohne dass dieses System mit breiterer Beteiligung verschiedener Projekte entwickelt und spezifiziert wurde.
Ein
Vorschlag für eine Spezifikation besteht, und es werden auch Kommentare erbeten. Um wirklich breite Akzeptanz für die meiner Auffassung nach richtige Idee zu finden, sollte der Prozess aber deutlicher von Ubuntu gelöst werden. Vielleicht wäre Freedesktop.org ein geeigneterer Ort für diese Diskussion als das Ubuntu-Wiki.