<p dir="ltr"><br>
On Oct 6, 2014 12:45 AM, "Pekka Paalanen" <<a href="mailto:ppaalanen@gmail.com">ppaalanen@gmail.com</a>> wrote:<br>
><br>
> Re-adding CCs and some more...<br>
><br>
> On Mon, 06 Oct 2014 09:17:41 +0300<br>
> Rémi Denis-Courmont <<a href="mailto:remi@remlab.net">remi@remlab.net</a>> wrote:<br>
><br>
> >     Hello,<br>
> ><br>
> > Le 2014-10-06 03:29, Jason Ekstrand a écrit :<br>
> > > Remi,<br>
> > > While this would probably be nice, your approach isnt going to work. <br>
> ><br>
> > Yeah, I figured that much after I submitted the patch. And then I<br>
> > rediscovered that the client library does not actually know the version<br>
> > of the project objects, and wl_registry_bind() cannot be modified<br>
> > without breaking backward compatibility.<br>
> ><br>
> > But now, I am even wondering whether this makes any sense. Assuming<br>
> > wl_proxy_get_version() gets implemented "somehow", what should the<br>
> > library do if the proxy version is *higher* than version the library<br>
> > knows of? Say a new version Y of an interface FOO adds a new request and<br>
> > a new event compared to older version X. If a FOO object is instantiated<br>
> > with version Y but the new request is never used and there is no event<br>
> > handler for the new event, will it still work as with version X? I guess<br>
> > not :-(<br>
><br>
> If there is no event handler set, the client will abort/crash if the<br>
> event is ever sent.<br>
><br>
> > In my specific case, can the Wayland client treat a wl_surface version<br>
> > 4 or higher as a wl_surface version 3? If not, I cannot rely on<br>
> > 'wl_proxy_get_version(surface) >= 2'...</p>
<p dir="ltr">You have to do some sort of negotiation between The client and the library.  If you have the get_version stuff you can enforce it somewhat by giving the client an error if it goes too high.</p>
<p dir="ltr">><br>
> Changing the semantics[5] of wl_surface.damage is a good example where<br>
> this would fail indeed. If a library only knows up to version 3, but<br>
> the app gives it a wl_surface of version 4, the damage coordinates<br>
> would be wrong.<br>
><br>
> Originally we had the idea, that all version bumps are backwards<br>
> compatible. Simply testing for version >= X would always work. The<br>
> wl_surface.damage change is not backwards compatible in that sense.<br>
><br>
> Looks to me like if we don't fix damage, then this versioning problem<br>
> would be solvable... :-(</p>
<p dir="ltr">I'll respond to that on the bug.  I don't want to side-track this conversation with damage.</p>
<p dir="ltr">><br>
> > Also somewhat related to this question, what happens (or should happen)<br>
> > if a Wayland client binds a version supported by the display server, but<br>
> > not supported by the client's protocol bindings? That would happen if<br>
> > the client blindly copies the version from wl_registry.global to<br>
> > wl_registry.bind.<br>
><br>
> Such blind copy is a bug: a client will always need some code changes<br>
> to support new features added to an interface, so it always needs to<br>
> bind with MIN(advertized, my_supported). And my_supported cannot be<br>
> higher than the available XML definition during client build. But here<br>
> is a problem with client-side libraries: my_supported cannot be higher<br>
> than the supported version in any used library, if not all protocol<br>
> version bumps are backward compatible.<br>
><br>
> And even then, I can imagine a case where it would still fail: app<br>
> creates version 5 of a global, hands the global to a library that only<br>
> knows up to version 4. The library creates a new object with the<br>
> version 4 interface, automatically gets version *5* new object, the new<br>
> object delivers an event added in version 5, kaboom.<br>
><br>
> A compositor does not advertise a version that libwayland-server does<br>
> not support, but that includes the assumption that both server and<br>
> client use the same libwayland version... which might not be true.<br>
><br>
> And it's not really remedied by adding new protocols as XML-only into<br>
> libwayland, either. Such protocols would simply be built in to the<br>
> users, i.e. the client apps and libraries, which brings a problem if a<br>
> library is built with version lower than what the app uses.<br>
><br>
> Oh dear... :-/<br>
><br>
> I'm not sure there is any way around *bidirectional* explicit version<br>
> negotiation between an app the libraries it uses. Bidirectional means<br>
> that the library tells the max versions it can support and the app<br>
> needs to obey that, and any objects the app passes to the library needs<br>
> to pass the version, too. Well, the latter case might be able to be<br>
> automated via wl_proxy_get_version(), but not the former AFAICS.</p>
<p dir="ltr">Yes, I don't think we can get around that.<br>
--Jason</p>
<p dir="ltr">><br>
> > (...)<br>
> > ><br>
> > > <a href="http://lists.freedesktop.org/archives/wayland-devel/2014-April/014004.html">http://lists.freedesktop.org/archives/wayland-devel/2014-April/014004.html</a><br>
> > > [4]<br>
> ><br>
> > I see, thanks.<br>
> ><br>
><br>
> Thanks,<br>
> pq<br>
><br>
><br>
> [5] <a href="https://bugs.freedesktop.org/show_bug.cgi?id=78190">https://bugs.freedesktop.org/show_bug.cgi?id=78190</a></p>