Mark Shuttleworth hat in einem Blog Post geschrieben, dass Ubuntu eine der ersten Distributionen sein wird, die Wayland verwendet, was einiges an medialem Echo hervorgerufen hat. Persönlich hat mich der Blogpost überrascht, da auf dem Ubuntu Developer Summit für mich nicht ersichtlich wurde, dass Wayland schon zur Diskussion steht. Nur in einer Sitzung zu OpenGL ES in Composited Window Managers hatte ich Mark eine Frage zu Wayland stellen hören und war etwas verwundert. Für mich auch Anlass mal wieder in die Commit Historie zu schauen und ich habe erfreut festgestellt, dass die Entwicklung an Wayland aktiver geworden ist.
Nun was ist Wayland überhaupt? Wayland ist im Prinzip der Nachfolger des X-Servers, jedoch bedeutend schlanker. Wayland ist nur noch ein sehr dünner Display Manager mit eingebautem Compositor, der die Fenster zeichnet. Damit das ganze funktioniert braucht es viele der Technologien, die in den letzten Jahren Einzug erhalten haben, wie KMS und GEM. Genau hab ich mich auch noch nicht mit Wayland auseinandergesetzt, da es meiner Meinung nach, noch viel zu weit in der Zukunft ist. Jedoch sollte ich mich langsam aber sicher, damit beschäftigen, denn sonst steht KDE am Ende ohne Compositor dar (KWin als X WindowManager ist natürlich in einem X freien System nicht wirklich sinnvoll) 😉
Warum sollte man X überhaupt ersetzen? X11 ist älter als ich, xlib ist nicht gerade die schönste API um mit zu arbeiten – nicht überraschend bei einem Alter von fast 30 Jahren. X11 ist entwickelt für die Ansprüche der Rechner aus den 80er Jahren. Xlib enthält also einiges was man heute nicht mehr braucht: Farbverwaltung, Zeichnung, etc. und so ziemlich alles was man heute mit OpenGL machen sollte. Heutige Anwendungen nutzen die primitiven Funktionen von X zum Zeichnen nicht mehr, so ziemlich jedes Toolkit hat dafür bessere Methoden. So bietet Qt an komplett auf der CPU zu zeichnen, statt native Aufrufe zu verwenden und ist dabei bedeutend performanter. Das ganze führte so weit, dass Bereiche von X über Jahre kaputt waren ohne dass es irgendjemand aufgefallen ist.
Die X Entwickler um Keith Packard kennen auch die Probleme und haben immer wieder neue Lösungen angebracht. So zum Beispiel XCB – ein etwas schönerer Ersatz um nicht auf Xlib aufsetzen zu müssen. Nur hat das erst mal niemanden interessiert – KWin zum Beispiel verwendet immer noch XLib und nicht XCB. Genauso die Toolkits: mittlerweile hat man die Erfahrung an den Problemen von X herumzuprogrammieren und warum sollte man etwas neu programmieren, wenn es funktioniert? Ein anderer Bereich ist die Erweiterung des Protokolls durch Erweiterungen wie XFixes – welche wie der Name sagt Fehler im X Protokoll behebt.
Warum sollte aber ein Display Manager eine bessere Lösung sein? Dazu kann man sich anschauen wie aktuell Fenster auf den Bildschirm kommen. Das Fenster wird zuerst gemappt – erhält also einen Bereich auf dem Bildschirm. Der X Server sorgt dafür, dass nur die nicht überlappten Bereiche gezeichnet werden. Die Anwendung zeichnet in der Regel in Pixmaps als Buffers und diese werden von X dann auf den Screen geblittet. Der X Server ist also zuständig dafür zu sorgen, dass die Inhalte aktualisiert werden. Wenn man also ein Fenster über einem anderen verschiebt, werden ständig beide neu gezeichnet. Nun schalten wir die XComposite Erweiterung dazu und betrachten uns das neue Verhalten. X leitet die Ausgabe der Fenster in eine off-screen Pixmap um (Moment? Die Anwendung zeichnet selbst doch auch schon in eine Pixmap…) und benachrichtigt einen externen Client (in der Regel den Fenstermanager) über die XDamage Erweiterung wann sich die off-screen Pixmap verändert. Das geschieht schön asynchron und in klitze kleinen Häppchen (man kann sich vorstellen, was passiert, wenn der Compositor nicht alle Änderungen mibekommt). Der Fenstermanager (oder auch Compositor) nutzt nun die GLX Erweiterung Texture from Pixmap um aus der Pixmap eine Textur zu erstellen und mittels OpenGL diese auf den Bildschirm zu zeichnen. Der ganze "legacy" Bereich des X Servers wird nun nicht mehr benötigt. Man muss keine Zeichenoperationen unterstützen, keine Fenster verschieben können und so weiter und so fort.
Ein kleiner Display Manager ist genau das was man will. Jede Anwendung wird automatisch und immer umgeleitet. Sie braucht also auch keine Informationen wo sie sich befindet. Interessant ist nur die Größe, ob sie aktiv ist oder nicht und vllt. ob sie sichtbar ist oder nicht (z.B. für Videoplayer um automatisch zu pausieren). Wenn man sich nun auch festlegt, dass Compositing generell über OpenGL erfolgt, kann man auch statt einer Pixmap direkt einen Buffer verwenden, der in OpenGL direkt benutzt werden kann. Der X Fenstermanager entfällt und kann nun durch einen viel schlankeren Compositor ersetzt werden.
Viele der heutigen Probleme im Compositing Stack von X sind vermutlich unlösbar. Ich denke da zum Beispiel an das Problem der "Löcher in Fenstern" oder die Tatsache, dass man keine Live Bilder von minimierten Anwendungen hat (was auch der Grund ist für das Stottern der de-minimier Animationen ist). Auch Lösungen um Live Bilder von Anwendungen auf anderen Desktops zu erhalten ist eigentlich nur ein riesiger Hack. Warum wird mein Bildschirm neu gezeichnet, wenn sich etwas auf einem anderen Desktop ändert? Bei einer Architektur, die sich primär auf Compositing ausrichtet, ist das natürlich viel einfacher.
Der Wechsel auf Wayland ist natürlich nichts, was schnell vollzogen werden kann und ich denke mal, dass es locker noch fünf Jahre dauern wird. Alle Toolkits müssen dazu die X Abhängigkeit verlieren, Desktop Shells müssen portiert werden – hier ist es vor allem wichtig gute Compositor zu erstellen, da sonst Funktionalität verloren geht und die wichtige Adaptierung von Wayland verhindern wird. Dies ist zum Beispiel bei KWin ein etwas schwieriges Unterfangen, da die Anwendung komplett X voraussetzt – nur die Effekte könnten fast komplett wiederverwendet werden (nach einer Portierung auf OpenGL ES 2). Es gibt sicherlich auch Anwendungen und Toolkits die niemals portiert werden – für diese wird es dann in Wayland auch einen eingebetteten X Server geben. Die Angst, dass geliebte Anwendungen durch die Transition verloren geht, besteht also nicht. Auch die Netzwerktransparenz von X bleibt somit erhalten.
Und was ist nun von der Canonical Ankündigung zu halten? Für mich klingt es danach, dass sie Unity so schreiben, dass es keine X Abhängigkeit erzwingt (wie zum Beispiel Plasma auch nicht) und dass sie wohl daran arbeiten werden Compiz als Compositor für Wayland fit zu machen. Dies wäre natürlich sehr interessant, da ich mich dort dann auch bedienen kann 😉 Bzw. dass man in den Bereichen zusammenarbeiten kann. Wir sind glücklicherweise so weit, dass wir grundlagen Technologie nicht mehr getrennt entwickeln. Vorerst bedeutet das wohl, dass Compiz auf OpenGL ES portiert werden muss – genauso wie KWin. Abgesehen davon wird wohl nicht viel passieren. Die Anwendungen werden weiter X verwenden.
Natürlich ist das jetzt auch nichts unglaublich herausragendes von Canonical in dem Bereich früh dabei zu sein. Sie werden es wohl auch nicht schaffen als erste Wayland einzusetzen, da MeeGo auch daran arbeitet (Kristian Høgsberg arbeitet für Intel) und gerade für Mobile Devices X nicht die beste Technologie ist. Außer Maemo setzt aktuell kein Linux Handy OS auf X. Um es ganz klar zu sagen: alle Distributionen werden so schnell wie möglich ein etwas funktionierendes Wayland ausliefern, um den Entwicklern eine Basis zum Portieren geben zu können.
Ich persönlich begrüße die Entwicklung, auch wenn es gerade für meine Anwendung viel Arbeit bedeuten wird, auf Wayland zu portieren und ohne eine Vollzeit Stelle wird so etwas kaum machbar sein. Dass Ubuntu nun diese Ankündigung macht, ist wirklich nicht überraschend, aber man muss Mark gratulieren zum guten Marketing 😉
=-=-=-=-=
Powered by Blogilo