Re-using interfaces across protocols
libwayland currently assumes that interfaces created by a global (recursively) have the same version as the global. This prevents re-using interfaces between protocols in this way. E.g. the dmabuf protocol contains a lot of tooling to transmit information about supported formats and modifiers, but none of it can be used by other protocols, and they have to (poorly) re-implement this tooling.
A way should be added for an object X to declare that it creates an object Y at version Z.