Closed heuer closed 6 months ago
I believe that the 0.16 version we ship has some backports from 0.17. They were initially needed for wayfire. But now that we're moving away from wayfire and we have walroots 0.17 in the repo, maybe the 0.16 changes can be reverted.
@spl237
The files in question have been modified to improve performance on Raspberry Pi; in some cases the changes have been pulled from a newer version of wlroots, but in others they are specific to Raspberry Pi. They are needed in the 0.16 version to provide acceleration to wayfire.
Thanks for your valuable post. It does not solve the problem, though. Users assume that a package called libwlroots-0.16.0 contains wlroots 0.16.0 and not other stuff which is incompatible with wlroots 0.16.0
The files in the package are compatible with wlroots 0.16, because they are built into our version of it! This is not something we can change without incurring a significant performance degradation on our version of wayfire.
wlroots 0.16 is obsolete anyway - Debian's standard versions are now 0.15 for bookworm and 0.17 for trixie, sid and experimental, so whatever your users are using it for ought to be made compatible with 0.17 instead.
The files in the package are compatible with wlroots 0.16
They are not. At least include/wlr/types/wlr_linux_dmabuf_v1.h
contains code from wlroots 0.17 which is incompatible with wlroots 0.16:
You ship 0.17:
struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create(struct wl_display *display,
uint32_t version, const struct wlr_linux_dmabuf_feedback_v1 *default_feedback);
0.16.x version of the function:
struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create(struct wl_display *display,
struct wlr_renderer *renderer);
I've not checked all files but wlr_linux_dmabuf_v1.h
is clearly incompatible with wlroots 0.16
In that case, it is at least possible to modify 0.16 to work with that header file, because the package we ship is fundamentally 0.16 code, albeit with some optimisations taken from 0.17.
That said, there is nothing we can do to fix this. Optimisations in our code rely on these changes, and we cannot take them out. From what I can see, the only clean version of 0.16 in the Debian repos is in sid, so you would need to backport this to bookworm yourself, but as said before, 0.16 appears to be obsolete, and all future development should be on 0.17.
At least Ubuntu manages to provide packages that contain what the name promises.
In my opinion, advising all projects to switch to a newer version of wlroots doesn't make much sense. Smaller projects require time and developers to implement the changes. When Raspberry PI OS offers packages that promise wlroots 0.16 but do not deliver on the promise, it is very confusing for end users.
Why can't Raspberry PI OS provide wlroots 0.16 and wlroots 0.17? If I understood @XECDesign correctly, the deviations from wlroots 0.16 are now obsolete?
In the worst case scenario, Raspberry PI OS should not offer the libwlroots 0.16 packages at all, but only 0.15 and 0.17 to follow the same line as Debian.
Why can't Raspberry PI OS provide wlroots 0.16 and wlroots 0.17?
As already explained - we require custom modifications to 0.16 to improve performance. We do also provide vanilla 0.17, but our optimised packages require the modified 0.16.
If I understood @XECDesign correctly, the deviations from wlroots 0.16 are now obsolete?
They will become obsolete at some point in the future. They are not obsolete at present.
In the worst case scenario, Raspberry PI OS should not offer the libwlroots 0.16 packages at all, but only 0.15 and 0.17 to follow the same line as Debian.
As above - we require the modified 0.16. As and when the packages we ship which use it migrate to 0.17, we will drop it, but until then, it is needed. I'm afraid I do not currently have a timescale for when this might happen.
Great solution. Thanks for your time. 👍
The package should only contain files for wlroots 0.16, but some files are from wlroots 0.17.
All wlroots 0.16 files have a timestamp of November 2022, but some files with a timestamp of February 2024 have been replaced. These files come from wlroots 0.17, which is incompatible with wlroots 0.16 in some respects due to API changes.
More background: https://github.com/flacjacket/pywlroots/issues/150