What is a Tiny X?

"TinyX" as an appellation, has referred to several different of very small or little versions of XFree86 over the years. The earliest reference we could find was in version 1.1 of the Linux XFree86 HOWTO dated 5 November 1993 which describes a package for low memory systems based on XFree86® 1.3.

In the past few years though, TinyX has jelled as the name for a collection of small X servers that are included in the XFree86® source tree. Quoting from XFree86's TinyX(1) manual page, it is "a family of X servers designed to be particularly small."

Specifically, the TinyX servers are targeted towards environments where non-volatile file system space is limited i.e. the size of the executables is small, and the run-time dependency on other files is minimal most typically this is found in the networked Linux markets..

The memory (RAM) requirements of the TinyX servers is highly dependent on the applications used and for applications with high server-side resource usage, the memory requirements may not be much different than for the regular full XFree86 servers. There is, however, a significant memory usage benefit for applications with low server-side resource usage.

The executable size for the TinyX server itself is minimized by excluding functionality that is not widely used, or not typically required in the targeted environments. The default TinyX build includes support for bitmapped server-side fonts and some commonly used extensions like: BIG-REQUESTS, MIT-SHM, MIT-SUNDRY-NONSTANDARD, RANDR, RENDER, SHAPE, XC-MISC, XTEST.

By changing the various build options though, it is possible to trade off the tiny size against additional functionality and increased memory usage. These decisions must be weighed carefully.

Portability Issues

The current version of TinyX is only supported on Linux platforms,and primarily Linux/i386.

In preparation for porting TinyX to other UNIX-like platforms, we reviewed the code particularly with an eye towards portability issues. In this manner, we were able to make several corrections to reduce the build problems reported with most modern C compilers. Several bugs were also found and fixed, during this lengthy and reiterative process.

Integrated Build Process

Until now it has been impossible to build the XFree86 and any of the TinyX servers simultaneously because of the differences in build options. Each Server's device-independent X (DIX) server components were incompatible and to change that and make an integrated build possible, we reviewed each Server's build settings.

There are two classes of differences:

The first difference between the two concerns the highly modular components, such as font renderers and modular X server extensions. These differences can easily be disabled on a per-X server basis.

The second difference is regarding the less modular components, like X server extensions that are implemented in a way that intertwines them with many other components. Some examples of these are the XINPUT, XKEYBOARD, and LBX (low bandwidth X) extensions. To disable these types of extensions for only some X servers in a build requires building two copies of some components: a standard fully featured copy, and a "tiny" copy with the unneeded features disabled.

The integrated build has served to:

Make the TinyX code part of the main-line XFree86 build, ensuring that it is updated along with the main XFree86 server when there are future interface changes. This will make for easy spotting of build issues in either X server.

Identify unnecessary differences between the requirements of the two device dependent (DDX) models and so by resolving these superfluities, improvements in the non-DDX areas of the X server code as a whole will result.

Future Work

This foray into an Integrated TinyX raises some interesting possibilities, among them:

  • highlighting the inefficiencies in the main Xserver and where redundancy could be reduced.
  • the whole idea of a multi-seat X configuration, where multiple video displays are harnessed by a single CPU, a concept vastly different than multi-headed X.

X-Oz offers for a fee, tutorials detailing what these technologies are, how they can be applied to different scenarios and how their comparative value. Also, available is a customized analysis of how they can be applied to your specific environment. Contact us if you are interested in any or all of these options.

Source Patches

Our preparatory work on Integrated TinyX is available as a source patch from our downloads page.

XFree86 is a registered trademark of The XFree86 Project, Inc.