Problems in KWayland causes by API and ABI compatibility promises

Martin Flöser mgraesslin at kde.org
Thu Mar 5 19:50:13 GMT 2020


Am 2020-03-05 13:21, schrieb Vlad Zahorodnii:
> I'm writing this email to bring problems that we currently have in
> KWayland up to discussion and find the way in which we can address
> them.

For historic context I want to add that we made KWayland an ABI stable 
framework before the unstable-mess of Wayland protocols happened. If 
I/we would have foreseen this problem we would probably have addressed 
this differently. Some of the unstable protocol changes really took me 
by surprise and I had no idea how to handle it at all. Most negative 
example was Qt creating a proprietary input method protocol using the 
official name.

Luckily frameworks 6 is approaching which gives us a chance to address 
it.

I fully agree that the current situation is not good and won't scale for 
future. For me it was clear that we have to clean up with the next ABI 
break. Somehow I sneaked out of the mess prior to doing the cleanup - 
sorry. (I still hope to find time again to do coding, at least I have 
sufficient time to write long mails :-P )

Personally I would suggest to keep KWayland in frameworks. It is a 
powerful framework and I still see needs outside of Plasma - especially 
as QtWayland Compositor is going GPL only. I would still love to see QML 
bindings for it. Also what served KWin really well was having the X 
abstracting in KWindowSystem which was a driving factor for me to have 
the KWayland library split out of KWin and provide it as a framework. 
And it's always the joker in case we think we want to start over and 
write a new wayland only window manager.

Being in frameworks means we cannot cleanup - except for ABI breaks. On 
the other side we cannot cleanup anyway - it's a wishful thinking to 
hope to only have to support one version of a protocol. This was 
something I didn't expect to be so bad in practice. Due to distributions 
not moving everything at the same time we have various toolkits running 
different versions of the protocols. I rather doubt that this will 
improve.

Somewhere in the stack we need the compatibility.

My suggestion would be the following:

  * only stable protocols get abstracted the way they are today
  * unstable protocols get the UnstableVX in their class name and get the 
code copied
  * as soon as a new unstable version gets supported the abstraction for 
the previous class gets deprecated
  * KWin can support multiple versions, although that means more work on 
KWin side, but it also creates pressure to drop support for the old code 
- which is a good thing


Cheers
Martin


More information about the kwin mailing list