Going down the programmable pipeline road

As you might know OpenGL comes in two flavors: fixed functionality and programmable pipeline. With the fixed functionality you have to use API calls to influence the execution of each stage of the rendering pipeline. It is a very powerful API allowing you to do most of the stuff we use in KWin. The programmable pipeline allows to directly execute code (called a "Shader") to do vertex and fragment processing. For example we are able to saturate a complete window as a whole with fixed functionality, but we need a fragment shader to be able to change the color of each pixel depending on the input color. This is for example used in the invert effect. A vertex shader can be used to influence the geometry. E.g. we could use it to transform a cube into a sphere. OpenGL 1.x is completely fixed functionality, in OpenGL 2 the programmable pipeline was introduced to exchange parts of the rendering stack, but fixed functionality was still around. With OpenGL 3 everyone expected the fixed functionality to be removed, but it was only deprecated and you can still use it. All the modern calls have been moved into a "core profile".

KWin uses OpenGL 2, that is most of our code is fixed functionality as it was around with OpenGL 1, but we can use shaders to exchange parts of the rendering pipeline to e.g. invert a window. As our shaders are used to emulate fixed functionality the code they use is mostly deprecated as well, KWin does not yet use the core profile.

To make it all more complicated there is also an OpenGL version for Embedded Systems (ES/EGL), which also comes in a flavor for fixed functionality (1.1) and programmable pipeline (2.0). In opposite to the desktop version of OpenGL, the ES version does not include the fixed functionality API calls in ES 2. This means that our source code cannot be compiled directly for ES.

Up to now I only blogged about that I want to port KWin to ES. I started working on it and in 4.6 there is some code already which was written to ease the porting effort. The rendering code has been partly split into legacy painting and modern painting, which makes it easier to just #ifdef away the unsupported calls when compiling for mobile. My initial plan was to first port KWin to ES 1.1 as the code base is closer to 1.1 than to 2.0. The work on it is quite boring and basically stalled. So I decided that this is no solution and instead want to add a core profile compatible rendering path to KWin – this would work both with OpenGL 3 and OpenGL ES 2. Of course no existing code will be removed and most likely it will become opt-in as I expect the changes to break some current effects when using the core profile (at least I can see that cube is partly broken in my special kwin version I’m running here).

With the feature freeze for 4.6 behind us, it’s the perfect time to play around with a new rendering path as it can mature on my systems before it is made available to a broader developer testing. So yesterday I set down and implemented a core profile compatible shader for basic rendering without transformations. This is to be used when no effect is active and only parts of the screen need to be repainted (visible with show paint effect). The first results of this change look promising as our EffectFrame overlays can already be rendered with this new coding path. I would like to present a screenshot, but it is boring as it just looks as always. If you want beautiful pictures, go to Nuno’s blog 😉 As soon as the window rendering is also based on this new shader I have a base to use it in the ES porting. Luckily I can reuse the work I spent for porting to ES 1.1, as the same code has to be removed there. So the initial version for mobile will be based on this code and by that just support basic compositing of windows without any effects as those might do transformations or use own GL calls, which have to be ported, too.

Unfortunately the state of the OpenGL API with all the deprecated function calls make it unnecessary difficult to port to the core profile. When passing the geometry to the graphics card we have to either use the legacy code path (for OpenGL 1) or a modern one. Now the modern one we already have, is also deprecated and the code path which has to be used with the core profile and core shaders is incompatible with our existing shaders replacing fixed functionality and the no shader case (but not legacy). Changing all shaders is a lot of work without any gain and the risk to break them. This means that the easy check based on is a shader used, is impossible to decide which code path to use and we have to introduce states into our rendering code to decide which path to use.

These changes will allow us to optionally use OpenGL 3 in KWin. I would like to have at least one effect using a geometry shader in 4.7. And it is required to get KWin on OpenGL ES 2. While that used to be a nice to have feature with a low priority up to now, it looks like it will become very important in the future as Wayland requires ES. This is a very sane decision by the wayland developers. As everybody is writing about wayland nowadays I had to mention it at least once 😛 I am very interested in the topic and hope that it will happen.

And now to something completely different: There is an old saying that something didn’t happen, till you blogged about it. So… Lubos stepped down as KWin Maintainer this week and asked me to become the new Maintainer. I want to thank Lubos for the long time as maintainer and all the work he has done for KWin to make it the extraordinary window manager it is today.

=-=-=-=-=
Powered by Blogilo

Interessante Zeiten liegen vor uns

In der Nacht auf den heutigen Freitag war der große Freeze für die KDE Plattform, Workspaces und Application Releases in Version 4.6. D.h. es dürfen keine neuen Features eingespielt werden und keine Änderung an Texten vorgenommen werden. Die KDE Entwickler Community wird sich nun ganz auf das Stabilisieren und Bugfixing konzentrieren bis zum Release Ende Januar. Die erste Beta Version wird bereits am 24.November erscheinen.

Wie man sich vorstellen kann, war der gestrige Abend noch etwas stressig. Code wollte noch geschrieben werden (sonst müssten die User noch ein halbes Jahr auf ein Feature warten), Review Requests angeschaut, getestet und kommentiert werden und so weiter. Zum Glück ist das Release Team nicht ganz so streng was das Einhalten der Frist angeht und so hat ein KWin Entwickler heute morgen um halb sieben noch einen Commit eingespielt 😉

Für mich war der 4.6 Entwicklungszyklus auch sehr interessant. Es war der erste Zyklus in dem ich nicht mehr Student bin und musste diese Doppelbelastung auch erst einmal organisiert bekommen. Gerade wenn man als Softwareentwickler arbeitet, hat man ja abends nicht immer die Lust noch einmal zu programmieren. So muss ich leider auch erkennen, dass ich weit weniger für KWin implementieren konnte, als ich mir eigentlich vorgenommen hatte.

Das 4.6 Release ist aus KWin Sicht nun für mich besonders interessant, da es das erste Release ist, bei dem mein Name in den aboutData als Maintainer aufgeführt ist. Natürlich fühle ich mich geehrt Maintainer einer der wichtigsten, ältesten und ausgereiftesten Komponenten des KDE Workspaces sein zu dürfen. Wenn mir jemand vor drei Jahren gesagt hätte, dass ich Maintainer von KWin werde, hätte ich ihn wohl nur verwirrt angeschaut. Aber das ist ja das schöne, dass man nicht in die Zukunft schauen kann.

Trotzdem werde ich das nun machen. Mit dem Freeze hinter sich, hat man mehrere Monate Zeit um sich Gedanken zum nächsten Zyklus zu machen. Was wollen wir in 4.7 neues bieten, worauf sollen wir achten? In den letzten Wochen hat sich für mich angedeutet worauf wir uns konzentrieren müssen. Wayland wird vermutlich kommen, genauso wie ARM. KWin ist hier sicherlich die Anwendung aus dem KDE Lager, welche am stärksten angepasst werden muss. 4.7 wird also der erste Releasezyklus auf dem langen Weg zu Wayland. Insgesamt ist es nicht so viel Arbeit wie ich anfänglich dachte, jedoch wird es sicherlich mindestens zwei Jahre dauern, bis diese Anpassung abgeschlossen sind. Ich hoffe hier vor allem mit den Compiz Entwicklern zusammenarbeiten zu können.

Insgesamt bedeutet das nun eine Verschiebung meiner Implementierungsideen. Wollte ich eigentlich KWin zuerst auf OpenGL ES 1.1 portieren, werde ich die Arbeit daran nun einstellen und direkt auf OpenGL ES 2 gehen. Dies ist nicht nur für mobile Geräte interessant, sondern wird auch benötigt um Wayland zu unterstützen. Alle Änderungen, die ich dabei mache, werden auch direkt für die aktuelle Desktop Version vorteilhaft sein. So plane ich das einfache Rendern von Fenstern (keine Effekte aktiv) auf einen moderneren Code zu heben. Der Shader dafür liegt schon auf Papier niedergeschrieben auf meinem Schreibtisch 😉 Leider ist das auch immer eine Gratwanderung: Optimierung bei einem Treiber kann zu riesigen Performanceproblemen bei einem anderen führen. Da aber der alte Code nicht entfernt wird, sollte es problemlos zurückschaltbar sein.

Interessante Zeiten liegen vor den Entwicklern von s/Fenstermanagern/Compositor/.

=-=-=-=-=
Powered by Blogilo

Tragt Fahrradhelme

Mein Fahrrad hat heute morgen gemeint, mich nicht mehr zu mögen. Das Vorderrad hat blockiert und mich vornüber geworfen. Wie man merkt, geht es mir ganz gut und bin mit einer Platzwunde am Kinn davon gekommen. Ich möchte aber nicht wissen, wie es mir gehen würde, wenn ich keinen Helm getragen hätte, denn ich bin auf den Kopf gestürzt.

Daher einfach an alle: tragt bitte einen Fahrradhelm. Egal wie sicher ihr euch auf dem Fahrrad fühlt – es gibt immer auch unaufmerksame Autofahrer oder nachlassendes Material, wie in meinem Fall. Ach und auch wichtig: neuen Fahrradhelm kaufen nach jedem Sturz (ich lasse jetzt mein Fahrrad stehen bis ich einen neuen habe (das Fahrrad mit dem ich gestürzt bin, wird verschrottet)).

=-=-=-=-=
Powered by Blogilo

Wayland in Ubuntu – oder viel Lärm um Nichts?

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

Wechsel auf KDE SC 4.6

Diese Woche war es mal wieder soweit und ich bin auf den Entwicklungszweig der kommenden Version 4.6 der KDE Plattform, KDE Plasma und KDE Anwendungen umgestiegen. Normalerweise wechsel ich erst zum ersten Beta Release, jedoch wurde der Wechsel bereits nun erforderlich. Auf Grund der schlechten Erfahrungen des letzten Entwicklungszyklus, hatte ich mein Entwicklungsmodell angepasst und hatte unter Plasma 4.5 immer den Fenstermanager KWin in der Entwicklungsversion (plus persönliche Anpassungen) eingesetzt. Ich hoffe dass dies hilft Probleme früher zu bemerken, als wenn die Nutzer mit dem Beta Release die ersten Tester sind.

Um KWin "trunk" fahren zu können, darf KWin natürlich keine Abhängigkeiten auf andere Komponenten aus trunk haben. Das einzige Problem war dabei bisher die Fensterdekoration Oxygen, welche mit dem Widget Style zusammen eine gemeinsame Bibliothek in kdebase/workspace hat. Da diese sich verändert, zerstört das eine Übersetzung (ich sage als immer, dass ich ein reicher Mann wäre, wenn ich für jedes Mal wenn mein KWin trunk nicht kompiliert wegen Oxygen, einen Cent bekäme). Meine Lösung war Oxygen einfach in der Build Datei zu deaktivieren. KWin lädt dann einfach Oxygen von 4.5 (dank binärkompatibilität der Fensterdekorationen möglich) und das Problem ist umschifft. Und ich bin stolz, dass ich mehrere Monate entwickelt habe ohne jemals Oxygen durch ein git commit -a && git svn dcommit deaktiviert zu haben 😉

Letztes Wochenende wurden nun Änderungen für die "Activities" eingespielt, welche auch eine weitere trunk-Abhängigkeit haben. Da diese Änderungen nicht mit einem Kommentar in CMakeLists rückgängig gemacht werden können, stand ich vor einem kleinen Problem: zurück auf 4.5 und test Account zur Entwicklung oder kompletter Wechsel. Das ganze verbunden mit dem Zeitdruck des aufkommenden Feature Freeze. Also einmal trunk neu durchkompiliert und auf 4.6 als primärer System gewechselt. Hat mich leider einen Abend gekostet, an dem ich eigentlich noch wichtige Features für 4.6 einbauen wollte 🙁

Für mich war es das erste mal seit Wochen, dass ich 4.6 neugebaut habe und es war für mich auch spannend, zu sehen woran die anderen Entwickler gearbeitet hatten und noch erfreulicher war, festzustellen, dass man nach Änderungen regelrecht suchen muss. Ein klares Zeichen dafür, dass KDE Plasma mittlerweile sehr ausgereift ist und die größten Änderungen weiter unten im Stack sind – so wie die Optimierungen in KWin.

Sehr erfreulich ist auch bereits die Stabilität von 4.6. Bisher ist mir noch keine Anwendung abgestürzt, obwohl wir gerade in der Phase sind, die wohl die instabilste überhaupt ist: zwischen soft feature freeze und hard feature freeze. Der klassische Zeitraum für "it compiles, ship it". Ich freue mich, dass wir in 4.6 den Nutzern wohl ein noch besseres Produkt liefern werden können als wir bereits in 4.5 konnten.

=-=-=-=-=
Powered by Blogilo

KDE erfolgreich bei den Readers’ Choice Awards 2010

Auch dieses Jahr hat das Linux Journal seine Leser abstimmen lassen über die besten Anwendungen/Softwareprodukte und hat die Readers’ Choice Awards 2010 vergeben. Dabei hat KDE Software sehr erfolgreich abgeschnitten. Amarok und digiKam konnten jeweils in ihrer Kategorie gewinnen. Besonders für die Amarok Entwickler freut mich das sehr, da sie doch in den letzten Jahren viel Kritik einstecken mussten. Da ist es schön zu sehen, dass die Anwender die Arbeit schätzen.

Ein sehr schöner Erfolg ist auch das Abschneiden der KDE Plasma Workspaces (im Artikel als KDE bezeichnet): es konnte mit GNOME gleichgezogen werden und beide Desktopumgebungen belegen den ersten Platz. Im Vergleich zum Letzten Jahr konnte Plasma GNOME 10 % abknapsen. Als Plasma Entwickler freut es mich, dass die Anwender unserer Arbeit schätzen. Hier bin ich auch schon auf die Ergebnisse nächstes Jahr gespannt. Ich hoffe dass die Kategorie in Desktop Shell umbenannt wird, um auch unsere neuen Kollegen GNOME Shell und Unity neben KDE Plasma, GNOME Panel, XFCE, etc. antreten zu lassen.

KDE hat auch ein paar richtig tolle zweite Plätze belegt: Platz zwei hinter Android als "Product of the Year", OwnCload hinter MeeGo als "Best New Open-Source Project", KDevelop hinter Eclipse als "Best IDE", Choqok hinter Gwibber als "Best Microblogging Client". Hier sind auch ein paar neue und vielversprechende Projekte dabei. Gratulation und weiter so. Gerade KDevelop freut mich als Nutzer ungemein – ich muss leider auf Arbeit mit Konkurrenzprodukten arbeiten.

Man kann allen Lesern des Linux Journals nur danken für diese tollen Ergebnisse. Aber natürlich auch Gratulation allen anderen ausgezeichneten Produkten. Ein ganz besonderer Dank jedoch und Gratulation an all unsere Nutzer. Wir können zwar Software für uns selbst schreiben, aber ohne Nutzer ist es halt doch nichts. Und nur Nutzer können uns so tolles Feedback, wie diese Auszeichnungen geben. Daher: Danke

=-=-=-=-=
Powered by Blogilo

Unity – Herausforderung und Chance für den freien Desktop

Letzte Woche wurde auf dem Ubuntu Developer Summit von Mark Shuttleworth angekündigt, dass 11.04 mit Unity statt GNOME Shell ausgeliefert wird. Dank Canonical hatte ich die Chance nicht nur die Ankündigung live zu erleben, sondern mich auch intensiv mit den Unity Entwicklern auszutauschen und mir einen Eindruck von der Entwicklung zu bilden. Als KDE Entwickler habe ich hoffentlich einen groß genugen Abstand um die Thematik objektiv zu bewerten.

Der Wechsel zu Unity wird sehr kontrovers diskutiert, persönlich überrascht er mich nicht und ich begrüße insbesondere den Wechsel zu Compiz von Mutter. Die Entwickler hatten sehr starke Performanceprobleme und waren auch mit der Technologie nicht wirklich zufrieden. Compiz stellt dazu im Vergleich einen sehr ausgereiften Compositing Manger da, von dem sich KWin auch schon öfter dankend bedient hat (in umgekehrter Richtung übrigens auch). Mutter hingegen hat ein Design, dass Austausch weder in die eine, noch in die andere Richtung möglich macht.

Viele Anwender hätten sich in 11.04 GNOME Shell gewünscht und das Canonical daran mitarbeitet. Nur wäre das überhaupt denkbar gewesen? Ubuntu wird in 12.04 wieder eine LTS ausliefern. Auf diese wird Canonical drei Jahre Support gewähren. Die Frage ist, ob GNOME Shell bis dahin ausgereift genug ist. Was aber wenn nicht? Weiter auf GNOME Panel setzen, auch wenn es im Prinzip von Upstream aufgegeben wurde? Für Canonical war das sicher keine einfache Entscheidung und es ist eine Herausforderung – darauf hat auch Mark in der Keynote hingewiesen.

Die Frage ist ob Mutter und GNOME Shell bis 12.04 ausgereift genug wären. Meiner Meinung nach ist das ziemlich undenkbar. Dies basiert nun hauptsächlich auf meiner Erfahrung als Entwickler an KWin. Mit 4.0 haben wir Compositing als zusätzliches Feature eingeführt, ein Jahr später mit 4.2 standardmäßig aktiviert. Wir haben uns also ein Jahr Zeit gelassen es out-in-the-wild zu testen. Dies ist bei Mutter so noch nicht wirklich geschehen. Ich weiß wie viele Änderungen wir vorgenommen haben, um den Compositing Stack performant zu bekommen – und dabei hatten wir den Vorteil uns an Compiz bedienen zu können. Wir haben den Vorteil, dass wir sowohl einen Fallback auf XRender als auch auf klassisches 2D rendering haben. Bei GNOME Shell ist dies nicht möglich. Ein anderes Thema ist die Frage ob die Shell funktional ausgreift ist. Schaut man sich an, wie lange es dauert bis so etwas ausgereift ist, denke ich nicht dass dies der Fall sein wird. Natürlich gilt für Unity in diesem Punkt das Gleiche.

Nun zum Punkt der Zusammenarbeit mit GNOME Shell. Canonical hat sehr klare Ideen wie der freie Desktop aussehen soll – ob man das nun gut findet oder nicht ist ein anderes Thema. Die Möglichkeit von Canonical Einfluss auf die GNOME Shell zu nehmen scheint nicht zu existieren. Keine der von Canonical vorgeschlagenen Neuerungen wurden aufgenommen – gerade was den Status Notifier/Indicator angeht ist das sehr schade, denn damit wird auch eine freedesktop.org Spezifikation verhindert. Persönlich habe ich auf der UDS die Erfahrung gemacht, dass Canonical ein sehr großes Interesse an guter Zusammenarbeit hat und KDE für die existierende Zusammenarbeit dankbar ist und auch sehr begrüßt dass KWin und Compiz in vielen Bereichen zusammenarbeiten. Nun da Kernentwickler von Compiz bei Canonical angestellt sind, bin ich persönlich zuversichtlich, dass sich die Zusammenarbeit verbessert. Angesichts der ablehnenden Haltung Seitens der GNOME Entwickler gegenüber Canonical Neuerungen und der Tatsache, dass GNOME Shell bisher fast nur vom Konkurrenten Red Hat entwickelt wird, ist es nicht überraschend, dass Canonical lieber etwas eigenes programmiert, als auf eine Shell zu setzen, die weder ihre Ziele verfolgt, noch darauf Einfluss nehmen kann.

Persönlich denke ich auch, dass Unity für GNOME insgesamt ein Gewinn ist. Wie Mark in seiner Keynote sagte, ist Unity zwar nicht die GNOME Shell, trotzdem eine Shell für GNOME. Mich persönlich hat die GNOME Shell von den Design Dokumenten her, nie überzeugt und ich halte vieles für unglaublich falsch (ich behaupte mal frech, dass ich ein bißchen was von der Entwicklung einer Desktop Shell verstehe). Hier sehe ich eine große Chance für die freie Software und für GNOME. Die Zeit der einen Shell für alle und die Frage zwischen GNOME oder KDE ist wohl endgültig vorbei. Es gibt je Aufgabengebiet eine andere Shell und je Zielgruppe. Viel wichtiger als GNOME Shell oder KDE ist doch ob die Shell den Anforderungen der Zielgruppe gerecht wird. Und ich denke, dass Ubuntu nun eine Shell baut, die auf ihre Zielgruppe gerichtet ist. Das dürfte eins der Probleme sein mit Unity: viele der heutigen Nutzer gehören nicht zur Zielgruppe. Ubuntu strebt mehr an, als den ca. 1 % Marktanteil, den Linux aktuell wohl so hat. Aus diesem Aspekt heraus, ist die größere Vielfalt durch Unity nur zu begrüßen.

Abschließend möchte ich noch einen Hinweis geben an all die, die nun meckern und mit Wechsel der Distro drohen: Auch GNOME Panel wird auf der Live CD enthalten sein, denn Unity benötigt OpenGL und FBOs. So wird ein NVIDIA Nutzer auf der Live CD kein Unity haben können – wir haben das auf dem Summit durchaus diskutiert (hab da auch ein Interesse dran aus KWin Sicht). GNOME Panel ist also weiterhin vorhanden. Und dann möchte ich darauf hinweisen, dass die Ankündigung auch hätte sein können, dass Ubuntu auf Plasma wechselt – angesichts der Architektur zum Erstellen eigener Shells wäre dies auch nicht überraschend gewesen. Sogesehen ist GNOME noch ganz gut weggekommen 😉

=-=-=-=-=
Powered by Blogilo

Optimization in KWin 4.6

Apart from the scripting interface KWin will not ship any major new feature in 4.6. Most of the work I did for 4.6 was to improve the overall performance of our compositing engine. One of the first improvements I added was for the text and icon overlays in our effects. Now the texture and geometry is always cached and Texture from Pixmap (TFP) is used instead of costly QPixmap/QImage conversations.

Another area which saw great improvements are effects which transform one window. These effects used to cause the whole screen to repaint even if only a small region changed. Most prominent visible is this with the Show Paint effect enabled and for example Sliding Popups or Wobbly Windows. Those effects are now repainting only the changed area which is a great improvement, especially considering that there is less blurring involved. The changes seem to make a difference as developers running trunk asked in #kwin if we changed something in Wobbly Windows. Of course not each effect does benefit from this change. It is an ongoing issue and one effect after another has to be improved.

Another area for optimization is not directly in the compositing engine but more in making use of the advantages of compositing in general. 4.6 will include a new effect to render the startup notification ("bouncing cursor"). The current way involves resizing and shaping a window and moving this window. With compositing enabled this can be a costly operation (for me the performance was so bad, that I disabled the notification completely). The new effect does the same animation as the legacy system without using a window at all. It is just a texture rendered on the screen. This means the whole window transformations are not needed and also the costly TFP operations are not required. Another nice side-effect is that the icon can now use an alpha channel – the old animation transformed each icon to a RGB-only icon. If compositing is not used the system will fall back to the legacy rendering which is btw. not part of KWin.

During the last week I worked on another optimization for our Lanczos filter. Especially in Present Windows the filter was causing some performance regressions. Highlighting one of the windows causes the complete screen to repaint (optimization opportunities see above) which caused a new Lanczos filtering for each visible window. The highlighting animation lasts for something like 200 msec with constant fullscreen repaints. It is obvious why this caused a performance regression. My changes cache each generated texture and use this whenever a repaint without change of content is required. So the highlighting does not require a recreation of the texture (the highlighting is added in a later step). So Present Windows in 4.6 will have the performance as it used to be in 4.4 with the improved thumbnails from 4.5. Of course the cache is useful to all places where the Lanczos sampling is used – be it Box Switch or Taskbar Thumbnails.

I hope that with this change the blacklist is no longer required for performance problems but can be used for driver problems only as intended. Also this allows to integrate the Lanczos improved thumbnails in more effects – e.g. Desktop Grid as in the image.

Improving the performance is of course an ongoing issue and there are still some areas where we can get some clever caching in place. For example blur might be a good candidate for improvements. But this is topic for a blog post "Optimization in KWin 4.7".

=-=-=-=-=
Powered by Blogilo

KWin at UDS

The last week I had the opportunity to attend the Ubuntu Developer Summit in Orlando, Florida. I want to thank Canonical for making this possible. UDS is quite different from other Open Source conferences I have been so far (Akademy, Desktop Summit, Plasma sprints). UDS is really centered about the idea to get things done. The schedule is very exhausting with several one hour sessions per day and up to 14 parallel tracks.

Like Desktop Summit UDS offers the possibility to talk with developers from the "other side". But in addition to the GNOME folks you also have the X, kernel, etc. people around. This is especially from a KWin point of view a real advantage.

I am really glad that I had the opportunity to talk to the people working on Unity. This new desktop shell is a great challenge but also a great opportunity for the free desktops. There is lots to collaborate on and I noticed that Canonical wants to collaborate and is thankful that we as an upstream are collaborative – for example with the Status Notifier/Indicators. This brings me to KWin. As you might have heard of Unity will become the primary desktop shell in Ubuntu 11.04 with Compiz instead of Mutter as the Compositing Manager. This change (which I was aware of for quite some time) is in my opinion the right decision and like Sam I am glad to see development effort in Compiz increase and not Compiz becoming obsoleted by us and GNOME Shell. For us as KWin this brings great opportunities. Canonical is also aware of the driver regressions we run into our latest release. The hardware requirements for Unity are slightly higher than ours. Unity requires Framebuffer Objects (FBO), which we use in various effects (e.g. Blur). Canonical will set up a great testing environment to ensure that the quality of drivers does not regress. With KWin having a similar set of requirements chances are very good that we can profit from that effort. So at least for Kubuntu I am quite confident that 11.04 will be a great release for our users.

Apart from the collaboration on driver requirements the switch to Compiz will hopefully benefit us further. Canonical is really interested in improving the already good collaboration between KWin and Compiz further. Getting us exchanging more ideas and code will help us both and provide our user bases the best window management and compositing experience. The ideas of Canonical are very interesting and I am looking forward to see them happen. So great times are hopefully before us 🙂

One of the first areas we are going to collaborate is the future of window decorations. The idea of client side decorations is dead and we will work on improving what has be started at KDE with allowing the decorations to paint the background of the windows. This will hopefully result in a new theme specification which is finally worked out by the major window managers and cross desktop.

Apart from KWin/Unity I attended quite some Kubuntu sessions and I hope I could give some ideas and feedback to the developers. There is great stuff going on, but I keep that to other bloggers 🙂

=-=-=-=-=
Powered by Blogilo

KWin Bug Day am Sonntag 10.10.10

Wie gerade auf dem Dot angekündigt, wird morgen der erste KWin Bug Day sein. Es geht darum die immer größer werdende Zahl an offenen Bugs zu ordnen. Dazu gehört Bugs zu reproduzieren oder auch zu überprüfen ob Bugs überhaupt noch gültig sind, oder ob wir sie schon längst behoben haben. Hierzu braucht es überhaupt keine Programmierkenntnisse, eine aktuelle KWin Version ist völlig ausreichend. Daher meine Empfehlung: Morgen Update auf Kubuntu 10.10 und danach ab 13 Uhr im #kde-bugs IRC Channel auf FreeNode vorbeischauen und mithelfen.

Schon mal im Voraus vielen Dank an alle, die mithelfen 🙂

=-=-=-=-=
Powered by Blogilo