I am happy to announce the 0.2 release of smithay. Smithay is a library for writing wayland compositors. With this release, it now contains all the fundamentals for building a working compositor.
A lot of things have changed since the 0.1 release one year ago. A large part of the crate has been completely rewritten, and work in smithay has also driven evolutions in its dependencies (a large part of which are also hosted in the smithay project).
What has changed
Here's a quick summary of the changes that occured since 0.1.
Smithay now comes with
anvil, a reference implementation of a compositor built on smithay. It
helps a lot with developing and testing new features and reproducing bugs. Anvil can be started
as a Wayland or X11 client (using winit), or directly in a tty.
Anvil running on my laptop, with alacritty started
The DRM rewrite
The whole graphics backend has been deeply refactored by @Drakulix, especially the DRM-handling code and the GBM and EGL abstractions on top of it, which are now clearly separated from one another. This improved the structure and clarity of the API, and paved the groundwork for future integration of new features, like atomic modesetting, EGLStreams, and vulkan support.
Full core-protocol support
Port to wayland-server 0.21
Smithay has been ported to wayland-server version 0.21 and calloop, which opens the way for use of the pure-rust implementation of the wayland protocol. Smithay can already run with it, but support for OpenGL clients on the rust implementation is still blocked, waiting on some evolutions of the dma-buf protocol extensions.
Basic XWayland support
Smithay is now capable of starting and monitoring the XWayland server, for running X apps under wayland. However the XWayland server actually also requires to have an X window manager implemented in the wayland compositor, which Smithay does not have yet.
The path forward
There is of course still a lot of work to do, but the path forward can now be split into several more or less independent tasks, now that the core is mostly established. You can have a detailed view of them in the issue tracker, but here is a quick overview of the biggest ones:
- Support for input events from touchscreens (#48)
- Implementation of an X Window Manager for XWayland support (#25)
- Support for the DMABUF protocol extension (#96)
- Implement classic shell interactions in anvil (#94)
- Write some stand-alone focused examples for smithay (#99)
- Design and introduce higher-level abstractions over the low-level support currently implemented
A large part of the work needed on smithay does not require extensive knowledge on the wayland protocol or the linux internals, and we are happy to mentor anyone interested in getting familiar with the project!