As many Linux (and Unix) users know, the graphical user interface (GUI) is made up of many parts. There is the window manager, widget-toolkits, input devices (mouse and touchscreen), output devices (for graphics like the monitor), and many other GUI components. But how does all this seamlessly work together? Well, there is what is called a display server or window system. The display server controls and manages the low-level features to help integrate the parts of the GUI. For instance, display servers manage the mouse and help match the mouse movements with the cursor and GUI events caused by the cursor. The display server also provides various protocols and communicates with the kernel directly. There are different sets of display server protocols and different display servers that implement a specific protocol. NOTE: Display servers do not draw anything. They just manage the interface. Libraries, toolkits, and other software perform the drawing. Protocols X11 (X window system version 11) is a set of protocols. Often times, users may say they have X11 on their computer. They are referring to the fact that they have a display server installed on their computer that uses the X11 protocol. When a user installs an X11 library, they are installing a binding for the X11 protocol or some extension for X11-compatible software. X11 itself is not a program. However, many display servers use the X11 protocol. An X server is a display server that uses the X11 protocol. X11 client libraries provide applications a way to interact with the X server without the programmer needing to know the X11 protocol. Xlib (libx11) and XCB are two examples of X11 client libraries. However, many applications use widget-toolkits which function as a client library for the application. Toolkits can do this since they contain a client library themselves. X11R* is a naming scheme that specifies a release, so X11R7.7 denotes a specific release. FUN FACT: The X window system uses an "X" because it is the successor of the W window system. Wayland is another display server protocol. A "Wayland Compositor" is a display server that uses the Wayland protocol. GTK+, Clutter, and QT5 have full support for Wayland. Wayland compositors also function as window managers. Mir is the only display server that uses the Mir protocol, so in this case, the display server and protocol are referred to by the same name. Mir is developed by Canonical Ltd. and is intended to become the default display server for Ubuntu. The SDL toolkit supports Mir, but the support feature is disabled by default. SurfaceFlinger is the display server typically used by Android. SurfaceFlinger uses EGL for 3D rendering. Compatibility Not all window managers and widget-toolkits are compatible with all of the display servers. So, when installing display servers, window managers, or toolkits, make sure the desired GUI components are all compatible. Also, keep in mind that display servers communicate directly with the kernel. Since display servers are so close to the kernel, this means display servers are operating system specific. For example, Xorg is a native X11 display servers for Linux. However, FreeBSD also uses Xorg, but it is a ported package. Display servers that were designed for the Linux kernel will very likely work on Android as long as the ARM architecture and libhydris are supported. The Mir, Wayland, and X11 protocols are Android compatible. Display servers using these protocols are available for Android. MeeGo also uses the Linux kernel, so developers could also port display servers to MeeGo. NOTE: A window manager is the part of the GUI that controls the way windows appear as well as perform other functions. Differing Roles The roles that a display server plays (or the functions it performs) can be different for each display server. Some display servers can take over the job of window managers. For example, the Quartz compositor used by OS X (the Unix OS made by Apple) functions as both a display manager and window manager. Wayland compositors are another example. Display Servers X.Org or Xorg is a very popular X server made by the X.Org Foundation. Xorg is used by many Linux distros and other Unix systems. Xorg is the reference implementation for the X11 protocol. XWayland is a series of patches to help give Xorg the ability to run on top of a Wayland server. Some special ports of Xorg include XQuartz (X11.app on OS X), Xming (for Windows using the MinGW compiler on Linux), XDarwin (Darwin), Xsgi (IRIX), Xsun (Solaris), Cygwin/X (Windows), and many others. XFree86 is a dormant X server project. This open-source software later forked to become Xorg. Other forks of XFree86 include Xouvert and Xwin. WeirdX is a Java Applet that makes X11 GUIs possible in a web-browser. WeirdX is run by the remote server, and users use their web-browser to access the server. (http://www.jcraft.com/weirdx/) X386 was the first IBM computer compatible X-server implementation. It was based on X11R4, but then merged with X11R5. Mir is both a protocol (discussed above) and a display server. Mir uses some code from Android and utilizes EGL (from Mesa) and libhydris. Mir also contains XMir which is a compatibility layer for X11. Unity 8 will be the first desktop environment to use Mir natively. (http://unity.ubuntu.com/mir/) Weston is the Wayland compositor reference implementation. A plugin called "Maynard" can be used to provide a graphical shell that is similar to the GNOME shell. Clayland is a Wayland compositor that uses Clutter. SurfaceFlinger (as mentioned before) is the display manager for Android. Not much info can be found concerning SurfaceFlinger. Display servers are a very important part of any GUI. Without a display server, the GUI will crash. Various display servers exist for various systems, needs, and kernel types. Xorg is the most popular Linux and Unixoid (Unix and Unix-like systems) display server, but Wayland is planned to become the dominant display server. Understanding display managers helps users and developers understand computer systems more clearly.