Protocol backwards compatibility requirements?

Scott Anderson scott at anderso.nz
Tue Apr 21 08:59:18 UTC 2020


On 21/04/20 12:57 pm, Christopher James Halse Rogers wrote:
> On Mon, Apr 20, 2020 at 15:05, Pekka Paalanen <ppaalanen at gmail.com> wrote:
>> On Thu, 16 Apr 2020 17:47:56 +1000
>> Christopher James Halse Rogers <chris at cooperteam.net> wrote:
>>
>>>  On Wed, Apr 15, 2020 at 14:27, Simon Ser <contact at emersion.fr> wrote:
>>>  > Hi,
>>>  >
>>>  > On Monday, April 13, 2020 1:59 AM, Peter Hutterer
>>>  > <peter.hutterer at who-t.net> wrote:
>>>  >>  Hi all,
>>>  >>
>>>  >>  This is request for comments on the exact requirements for protocol
>>>  >>  backwards compatibility for clients binding to new versions of an
>>>  >> interface.
>>>  >>  Reason for this are the high-resolution wheel scrolling patches:
>>>  >> https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/72
>>>  >>
>>>  >>  Specifically, the question is: do we **change** protocol 
>>> elements or
>>>  >>  behaviour as the interface versions increase? A few random 
>>> examples:
>>>  >
>>>  > What we can't do is:
>>>  >
>>>  > - Change existing messages' signature
>>>  > - Completely remove a message
>>
>> Indeed.
>>
>>>
>>>  It should be relatively easy to modify wayland-scanner to support both
>>>  of these things, *if* we decide that it's a reasonable thing to do.
>>>  (You'd do something like add support for <request name="foo"
>>>  removed_in="5"/> and the like)
>>
>> How would that work, given the version is negotiated at runtime?
>>
>> The message signature structs are now ABI as well, and we have no room
>> for alternate signatures, do we?
> 
> Sure we do. Internally we can just give them different names, with 
> different contents, and switch based on the version requested at runtime.
> 
>  From the client API side it's more difficult (at least for requests), 
> because we can't remove any symbols - we *can* make it a client error 
> with a good error message, though.
> 
> On the events side it's easier, as we can add a wl_foo_listener_v5 
> struct and wl_foo_add_listener_v5.
> 
> This does add a new sharp edge to the raw wl_proxy_* interface, but 
> client code isn't expected to be using that and this doesn't seem 
> particularly hard for language bindings to adapt to.

There is more than just libwayland and wayland-scanner for C that needs 
to be taken into consideration here. Adding any of these kinds of 
changes requires that _everybody_ updates to handle this, including 
things like the Rust Wayland binding/reimplementation and Qt's own 
Wayland scanner.

I really don't think it's worth the effort.

Scott


More information about the wayland-devel mailing list