DIX и DDX
Разделение X-сервера на машинно-независимое ядро, говорящее на протоколе, и аппаратно-зависимый слой, который рисует: чертёж 1987 года, которому следует каждый X-сервер.
Эталонный сервер, поставлявшийся MIT с X11R1, написали в Western Software Laboratory компании DEC Фил Карлтон, Сьюзан Ангебрандт, Реймонд Дрюри и Тодд Ньюман, и их документ о «слое портирования» сервера разрезал его надвое. DIX, Device Independent X, принимает запросы протокола, хранит дерево окон, ресурсы, атомы, захваты и выделения и доставляет события нужному клиенту. DDX, Device Dependent X, — всё, что касается конкретного экрана или устройства ввода: настройка кадрового буфера, заливка прямоугольников, перемещение курсора, чтение клавиатуры. Между ними лежит mi — машинно-независимые запасные реализации, рисующие программно, когда у DDX нет ничего лучше, плюс слой ОС для сокетов и аутентификации.
В дереве исходников DIX — каталог dix/, а DDX — hw/, где hw/xfree86 с драйверами xf86-video и xf86-input — тот сервер, который большинство имеет в виду под X.Org. Но Xvfb, Xnest, Xephyr, Xwayland, XWin в Cygwin и XQuartz на macOS — тоже просто разные DDX поверх одного DIX. Граница — таблица указателей на функции для каждого экрана, а расширения вроде Composite и Render подменяют указатели и затем вызывают оригинал: приём, который X-хакеры называют wrapping, а все остальные — нечитаемым кодом.