mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-06 18:05:39 +00:00
![Emil Velikov](/assets/img/avatar_default.png)
Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
219 lines
7.5 KiB
Plaintext
219 lines
7.5 KiB
Plaintext
Weston
|
|
======
|
|
|
|
Weston is the reference implementation of a Wayland compositor, and a
|
|
useful compositor in its own right. Weston has various backends that
|
|
lets it run on Linux kernel modesetting and evdev input as well as
|
|
under X11. Weston ships with a few example clients, from simple
|
|
clients that demonstrate certain aspects of the protocol to more
|
|
complete clients and a simplistic toolkit. There is also a quite
|
|
capable terminal emulator (weston-terminal) and an toy/example desktop
|
|
shell. Finally, weston also provides integration with the Xorg server
|
|
and can pull X clients into the Wayland desktop and act as an X window
|
|
manager.
|
|
|
|
Refer to http://wayland.freedesktop.org/building.html for building
|
|
weston and its dependencies.
|
|
|
|
The test suite can be invoked via `make check`; see
|
|
http://wayland.freedesktop.org/testing.html for additional details.
|
|
|
|
Developer documentation can be built via `make doc`. Output will be in
|
|
the build root under
|
|
|
|
docs/developer/html/index.html
|
|
docs/tools/html/index.html
|
|
|
|
|
|
|
|
Libweston
|
|
=========
|
|
|
|
Libweston is an effort to separate the re-usable parts of Weston into
|
|
a library. Libweston provides most of the boring and tedious bits of
|
|
correctly implementing core Wayland protocols and interfacing with
|
|
input and output systems, so that people who just want to write a new
|
|
"Wayland window manager" (WM) or a small desktop environment (DE) can
|
|
focus on the WM part.
|
|
|
|
Libweston was first introduced in Weston 1.9, and is expected to
|
|
continue evolving through many Weston releases before it achieves a
|
|
stable API and feature completeness.
|
|
|
|
|
|
API/ABI (in)stability and parallel installability
|
|
-------------------------------------------------
|
|
|
|
As libweston's API surface is huge, it is impossible to get it right
|
|
in one go. Therefore developers reserve the right to break the API/ABI
|
|
between every 1.x.0 Weston release (minor version bumps), just like
|
|
Weston's plugin API does. For git snapshots of the master branch, the
|
|
API/ABI can break any time without warning or version bump.
|
|
|
|
Libweston API or ABI will not be broken between Weston's stable
|
|
releases 1.x.0 and 1.x.y, where y < 90.
|
|
|
|
To make things tolerable for libweston users despite API/ABI breakages,
|
|
libweston is designed to be perfectly parallel-installable. An
|
|
API/ABI-version is defined for libweston, and it is bumped for releases as
|
|
needed. Different non-backward compatible ABI versions of libweston can be
|
|
installed in parallel, so that external projects can easily depend on a
|
|
particular ABI-version. Thus they do not have to fight over which ABI-version
|
|
is installed in a user's system. This allows a user to install many
|
|
different compositors each requiring a different libweston ABI-version
|
|
without tricks or conflicts.
|
|
|
|
Note, that versions of Weston itself will not be parallel-installable,
|
|
only libweston is.
|
|
|
|
For more information about parallel installability, see
|
|
http://ometer.com/parallel.html
|
|
|
|
|
|
Versioning scheme
|
|
-----------------
|
|
|
|
In order to provide consistent, easy to use versioning, libweston
|
|
follows the rules in the Apache Portable Runtime Project
|
|
http://apr.apache.org/versioning.html.
|
|
|
|
The document provides the full details, with the gist summed below:
|
|
- Major - backward incompatible changes.
|
|
- Minor - new backward compatible features.
|
|
- Patch - internal (implementation specific) fixes.
|
|
|
|
|
|
Forward compatibility
|
|
---------------------
|
|
|
|
Inspired by ATK, Qt and KDE programs/libraries, libjpeg-turbo, GDK,
|
|
NetworkManager, js17, lz4 and many others, libweston uses a macro to restrict
|
|
the API visible to the developer - REQUIRE_LIBWESTON_API_VERSION.
|
|
|
|
Note that different projects focus on different aspects - upper and/or lower
|
|
version check, default to visible/hidden old/new symbols and so on.
|
|
|
|
libweston aims to guard all newly introduced API, in order to prevent subtle
|
|
breaks that a simple recompile (against a newer version) might cause.
|
|
|
|
The macro is of the format 0x$MAJOR$MINOR and does not include PATCH version.
|
|
As mentioned in the Versioning scheme section, the latter does not reflect any
|
|
user visible API changes, thus should be not considered part of the API version.
|
|
|
|
All new symbols should be guarded by the macro like the example given below:
|
|
|
|
#if REQUIRE_LIBWESTON_API_VERSION >= 0x0101
|
|
|
|
bool
|
|
weston_ham_sandwich(void);
|
|
|
|
#endif
|
|
|
|
In order to use the said symbol, the one will have a similar code in their
|
|
configure.ac:
|
|
|
|
PKG_CHECK_MODULES(LIBWAYLAND, [libwayland-1 >= 1.1])
|
|
AC_DEFINE(REQUIRE_LIBWESTON_API_VERSION, [0x0101])
|
|
|
|
If the user is _not_ interested in forward compatibility, they can use 0xffff
|
|
or similar high value. Yet doing so is not recommended.
|
|
|
|
|
|
Libweston design goals
|
|
----------------------
|
|
|
|
The high-level goal of libweston is to decouple the compositor from
|
|
the shell implementation (what used to be shell plugins).
|
|
|
|
Thus, instead of launching 'weston' with various arguments to choose the
|
|
shell, one would launch the shell itself, e.g. 'weston-desktop',
|
|
'weston-ivi', 'orbital', etc. The main executable (the hosting program)
|
|
will implement the shell, while libweston will be used for a fundamental
|
|
compositor implementation.
|
|
|
|
Libweston is also intended for use by other project developers who want
|
|
to create new "Wayland WMs".
|
|
|
|
Details:
|
|
|
|
- All configuration and user interfaces will be outside of libweston.
|
|
This includes command line parsing, configuration files, and runtime
|
|
(graphical) UI.
|
|
|
|
- The hosting program (main executable) will be in full control of all
|
|
libweston options. Libweston should not have user settable options
|
|
that would work behind the hosting program's back, except perhaps
|
|
debugging features and such.
|
|
|
|
- Signal handling will be outside of libweston.
|
|
|
|
- Child process execution and management will be outside of libweston.
|
|
|
|
- The different backends (drm, fbdev, x11, etc) will be an internal
|
|
detail of libweston. Libweston will not support third party
|
|
backends. However, hosting programs need to handle
|
|
backend-specific configuration due to differences in behaviour and
|
|
available features.
|
|
|
|
- Renderers will be libweston internal details too, though again the
|
|
hosting program may affect the choice of renderer if the backend
|
|
allows, and maybe set renderer-specific options.
|
|
|
|
- plugin design ???
|
|
|
|
- xwayland ???
|
|
|
|
- weston-launch is still with libweston even though it can only launch
|
|
Weston and nothing else. We would like to allow it to launch any compositor,
|
|
but since it gives by design root access to input devices and DRM, how can
|
|
we restrict it to intended programs?
|
|
|
|
There are still many more details to be decided.
|
|
|
|
|
|
For packagers
|
|
-------------
|
|
|
|
Always build Weston with --with-cairo=image.
|
|
|
|
The Weston project is (will be) intended to be split into several
|
|
binary packages, each with its own dependencies. The maximal split
|
|
would be roughly like this:
|
|
|
|
- libweston (minimal dependencies):
|
|
+ headless backend
|
|
+ wayland backend
|
|
|
|
- gl-renderer (depends on GL libs etc.)
|
|
|
|
- drm-backend (depends on libdrm, libgbm, libudev, libinput, ...)
|
|
|
|
- x11-backend (depends of X11/xcb libs)
|
|
|
|
- xwayland (depends on X11/xcb libs)
|
|
|
|
- fbdev-backend (depends on libudev...)
|
|
|
|
- rdp-backend (depends on freerdp)
|
|
|
|
- weston (the executable, not parallel-installable):
|
|
+ desktop shell
|
|
+ ivi-shell
|
|
+ fullscreen shell
|
|
+ weston-info, weston-terminal, etc. we install by default
|
|
+ screen-share
|
|
|
|
- weston demos (not parallel-installable)
|
|
+ weston-simple-* programs
|
|
+ possibly all the programs we build but do not install by
|
|
default
|
|
|
|
- and possibly more...
|
|
|
|
Everything should be parallel-installable across libweston major
|
|
ABI-versions (libweston-1.so, libweston-2.so, etc.), except those
|
|
explicitly mentioned.
|
|
|
|
Weston's build may not sanely allow this yet, but this is the
|
|
intention.
|