In Wayland, shells are extensions which provide surface semantics . This means that they provide ways for the server and client to communicate about surfaces. Surfaces, in this context, are often also referred to as "windows", which is typically the representation of the surface in the compositor.
Shell extensions provide tools for the client and server to communicate about certain things:
Like other extensions, support for shells is added to a compositor by instantiating them as direct children of the WaylandCompositor top-level object. The shell extensions supported by Qt are: WlShell , XdgShell and IviApplication .
When designing an embedded system from the bottom up, there are no rules determining which shell extension to use. It will typically be either XdgShell or IviApplication . The decision should be influenced by what features the system will need, and whether there are applications involved which are not written in Qt and which have their own requirements.
A Qt Wayland Compositor can also support multiple shell extensions at once. See the Minimal QML example for an example where all three shell extensions listed above are supported.