DinX is not X

dinx | download | benw

DinX

Welcome to the home of DinX, an experimental windowing system. DinX is designed to be simple, lightweight, and fast. It should be suitable for running multiple windowed programs on a small system, like a Linux handheld.

This is a work in progress, so please expect problems and shortcomings. I appreciate all success/failure stories, bug reports, fixes, suggestions, comments, job offers, etc. Feel free to contact me at the address below.

DinX is most certainly not X. X acheives performance by using huge gobs of code and memory to buffer requests and reduce the number of context switches. It is a gigantic piece of code with a very complicated API. It is also capable of running many many existing programs across a network of machines with different word sizes and byte orderings. It has almost as many window managers as entry points, and enough documentation to sink a small fleet. For all these reasons, DinX is not X.

Distribution

DinX is licensed under the Mozilla Public License, with an option to convert to the GPL if you wish to do so. This is so that the kernel modules might eventually make it into the Linux distribution, and so that the DinX libraries can be linked with other GPL programs.

The latest release of DinX is always available on the download page.

Design

DinX uses the Linux kernel's framebuffer video driver. It adds two new interfaces, /dev/dinxsvr and /dev/dinxwin. A server program connects to /dev/dinxsvr and arbitrates requests from windows to occupy various parts of the display. It also sends them events like mouse movements. The window client programs connect to /dev/dinxwin, and write commands that either communicate messages to the server, or cause drawing to occur in the window.

Drawing in DinX is done without context switches. The kernel module contains just enough logic to clip a drawing operation to any windows that might be obscuring it, and to draw what's left to the framebuffer. It also sends redraw events to windows that need to clean up after some part of the window that was obscured becomes visible again. Everything else, like events, window management, palette configuration etc, is handled by the server process. The kernel module passes through messages between the client windows and the server.

Demonstration

This screenshot of DinX in action shows a couple of test windows with coloured squares, and a couple of image display windows. The windows can all be dragged around, raised, lowered etc.

Documentation

Discussion

There are two mailing lists dedicated to DinX. The dinx-announce list is low volume, read-only, and carries annoucements of new DinX releases. The dinx-general list is unmoderated and carries general discussion of DinX design, code, features, bugs, and everything else.

To subscribe to dinx-announce send mail to dinx-announce-request@lists.sourceforge.net with the word subscribe in the body.

To subscribe to dinx-general send mail to dinx-general-request@lists.sourceforge.net with the word subscribe in the body.

Donations

DinX is a windowing system, not a GUI toolkit. The API it presents is too low-level to directly write widgets and applications on top of. If you have a favourite toolkit, like GTK or Microwindows, you might consider writing bindings to get that toolkit running on top of DinX. Chances are good that a bunch of existing applications using that toolkit will suddenly be able to run on DinX, which will make us all very happy.   :-)

There are lots of other things that need doing too. If you find DinX useful and want to contribute, speak up on the mailing list so we can roll your improvements into the next release.

The DinX sources are licensed under the MPL with GPL option. If you make a change that you wish only to be used under the GPL, please say so when submitting it. Otherwise we'll assume it may be used under the MPL. Changes that are restricted to GPL use might not be accepted.

Copyright © 1999 Ben Williamson