mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-29 05:40:16 -04:00
This is the style used in wayland.xml which is the only file we really care about for git blame information. So let's adjust all others to that style for consistency and fix editorconfig to avoid messing this up in the future. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
116 lines
5.5 KiB
XML
116 lines
5.5 KiB
XML
<?xml version='1.0' encoding='utf-8' ?>
|
||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||
<!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent">
|
||
%BOOK_ENTITIES;
|
||
]>
|
||
<chapter id="chap-Introduction">
|
||
<title>Introduction</title>
|
||
<section id="sect-Motivation">
|
||
<title>Motivation</title>
|
||
<para>
|
||
Most Linux and Unix-based systems rely on the X Window System (or
|
||
simply <emphasis>X</emphasis>) as the low-level protocol for building
|
||
bitmap graphics interfaces. On these systems, the X stack has grown to
|
||
encompass functionality arguably belonging in client libraries,
|
||
helper libraries, or the host operating system kernel. Support for
|
||
things like PCI resource management, display configuration management,
|
||
direct rendering, and memory management has been integrated into the X
|
||
stack, imposing limitations like limited support for standalone
|
||
applications, duplication in other projects (e.g. the Linux fb layer
|
||
or the DirectFB project), and high levels of complexity for systems
|
||
combining multiple elements (for example radeon memory map handling
|
||
between the fb driver and X driver, or VT switching).
|
||
</para>
|
||
<para>
|
||
Moreover, X has grown to incorporate modern features like offscreen
|
||
rendering and scene composition, but subject to the limitations of the
|
||
X architecture. For example, the X implementation of composition adds
|
||
additional context switches and makes things like input redirection
|
||
difficult.
|
||
</para>
|
||
<mediaobject>
|
||
<imageobject>
|
||
<imagedata fileref="images/x-architecture.png" format="PNG" />
|
||
</imageobject>
|
||
<textobject>
|
||
<phrase>
|
||
X architecture diagram
|
||
</phrase>
|
||
</textobject>
|
||
</mediaobject>
|
||
<para>
|
||
The diagram above illustrates the central role of the X server and
|
||
compositor in operations, and the steps required to get contents on to
|
||
the screen.
|
||
</para>
|
||
<para>
|
||
Over time, X developers came to understand the shortcomings of this
|
||
approach and worked to split things up. Over the past several years,
|
||
a lot of functionality has moved out of the X server and into
|
||
client-side libraries or kernel drivers. One of the first components
|
||
to move out was font rendering, with freetype and fontconfig providing
|
||
an alternative to the core X fonts. Direct rendering OpenGL as a
|
||
graphics driver in a client side library went through some iterations,
|
||
ending up as DRI2, which abstracted most of the direct rendering
|
||
buffer management from client code. Then cairo came along and provided
|
||
a modern 2D rendering library independent of X, and compositing
|
||
managers took over control of the rendering of the desktop as toolkits
|
||
like GTK+ and Qt moved away from using X APIs for rendering. Recently,
|
||
memory and display management have moved to the Linux kernel, further
|
||
reducing the scope of X and its driver stack. The end result is a
|
||
highly modular graphics stack.
|
||
</para>
|
||
|
||
</section>
|
||
|
||
<section id="sect-Compositing-manager-display-server">
|
||
<title>The compositing manager as the display server</title>
|
||
<para>
|
||
Wayland is a new display server and compositing protocol, and Weston
|
||
is the implementation of this protocol which builds on top of all the
|
||
components above. We are trying to distill out the functionality in
|
||
the X server that is still used by the modern Linux desktop. This
|
||
turns out to be not a whole lot. Applications can allocate their own
|
||
off-screen buffers and render their window contents directly, using
|
||
hardware accelerated libraries like libGL, or high quality software
|
||
implementations like those found in Cairo. In the end, what’s needed
|
||
is a way to present the resulting window surface for display, and a
|
||
way to receive and arbitrate input among multiple clients. This is
|
||
what Wayland provides, by piecing together the components already in
|
||
the eco-system in a slightly different way.
|
||
</para>
|
||
<para>
|
||
X will always be relevant, in the same way Fortran compilers and VRML
|
||
browsers are, but it’s time that we think about moving it out of the
|
||
critical path and provide it as an optional component for legacy
|
||
applications.
|
||
</para>
|
||
<para>
|
||
Overall, the philosophy of Wayland is to provide clients with a way to
|
||
manage windows and how their contents is displayed. Rendering is left
|
||
to clients, and system wide memory management interfaces are used to
|
||
pass buffer handles between clients and the compositing manager.
|
||
</para>
|
||
<mediaobject>
|
||
<imageobject>
|
||
<imagedata fileref="images/wayland-architecture.png" format="PNG" />
|
||
</imageobject>
|
||
<textobject>
|
||
<phrase>
|
||
Wayland architecture diagram
|
||
</phrase>
|
||
</textobject>
|
||
</mediaobject>
|
||
<para>
|
||
The figure above illustrates how Wayland clients interact with a
|
||
Wayland server. Note that window management and composition are
|
||
handled entirely in the server, significantly reducing complexity
|
||
while marginally improving performance through reduced context
|
||
switching. The resulting system is easier to build and extend than a
|
||
similar X system, because often changes need only be made in one
|
||
place. Or in the case of protocol extensions, two (rather than 3 or 4
|
||
in the X case where window management and/or composition handling may
|
||
also need to be updated).
|
||
</para>
|
||
</section>
|
||
</chapter>
|