X Window System

X Window Systems is a network-oriented windowing system. The X server controls the display and is responsible for drawing graphics on the screen. Typical applications are X clients which exchange messages with the X server via the X Window protocol. Application are typically written through high level toolkits such as GTK, Tcl/TK, etc.


X Window Architecture

Above picture shows application communicating with a X server in a unix environment, typically through a socket. Most of the complexity of X windows is due to the client-server architecture. Design aspect that makes X windows complex and slow are:

  • Client and Server have to buffer and format commands and responses as per the X window protocol.
  • Synchronous and round-trip requests are inefficient.
  • On processors with virtually addressed cache (ARM 9), context switch between application and X server results in cache flush further degrading performance.
  • Graphics rendering can only start after X server starts running.

MicroXwin

MicroXwin implements graphics processing in the kernel as a load module and provides a character driver interface to the associated X11 library. The main components are:

  • X11.ko kernel load module that is accessible via /dev/x11dev.
  • Library libX11.so that provides a binary compatible Xlib API.
  • Library libXext.so that provides stubs for extensions.
  • A set of SNF bitmapped fonts stored in /usr/fonts used by the kernel module.
  • Complete user space anti-aliased fonts based on fontconfig and Xft.

MicroXwin Architecture

The advantages of this design are:

  • Low latency and round trip.
  • Minimal buffering of requests and responses.
  • No context switch overhead and possible cache flushing (ARM 9).
  • Graphics data is copied directly from user space to frame buffer by kernel module.
  • Graphics rendering can start very early in the boot sequence resulting in better user experience.
  • No changes required for existing applications.