summaryrefslogtreecommitdiff
path: root/doc/Wayland/en_US/Overview.xml
blob: c9990a9f65815ef94b710d08d4958d1ac88e0521 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?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-Wayland-Overview">
  <title>Wayland Overview</title>
  <para>
    <orderedlist>
      <listitem>
	<para>
	  Wayland is a protocol for a new display server
	</para>
      </listitem>
      <listitem>
	<para>
	  Weston is the open source project implementing a wayland-based
	  copmositor
	</para>
      </listitem>
    </orderedlist>
  </para>
  <section id="sect-Wayland-Overview-Replacing-X11">
    <title>Replacing X11</title>
    <para>
      In Linux and other Unix-like 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-Wayland-Overview-Make-compositing-manager-display-server">
    <title>Make the compositing manager 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>