mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			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>
 |