X Window从逻辑上分为三层:X Server、X Client和X协议。最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X Client(X客户端)作出反馈,而由X Client传来的输出信息也由它来负责输出;最上层的X Client则提供一个完整的GUI界面,负责与用户的直接交互(KDE、GNOME都是一个X Client)。X协议则是衔接X Server与X Client的通讯协议,它的任务是充当这两者的沟通管道。尽管UNIX厂商采用相同的X Window,但终端的X Client并不相同。
XLIB在X Window系统中进行图形编程时,可以选择直接使用Xlib。Xlib实际上是对底层X协议的封装,可通过该函数库进行一般的图形输出。对一般用户而言,由于Xlib的接口太原始而且复杂,因此一般的图形程序选择其他高级一些的图形库作为基础。比如GTK、QT等等。这两个函数库同时还是一些高级的图形用户界面的支持函数库。
KDE和GnomeKDE早于Gnome出现,但是KDE基于的Qt是不遵循GPL开源协议的,Qt是一个跨平台的C++图形用户界面库 ,它是挪威TrollTech公司的产品(2008年底被NOKIA收购)。 Qt具有优良的跨平台特性(支持Windows、Linux、各种UNIX、OS390和QNX等)、面向对象机制以及丰富的API,同时也可支持2D/3D渲染和OpenGL API。在当时的同类图形用户界面库产品中,Qt的功能最为强大。但底层的基础 Qt却是一个不遵循GPL的商业软件,这就给KDE上了一道无形的枷锁并带来可能的法律风险。一大批*程序员对KDE项目的决定深为不满,它们认为利用非*软件开发违背了GPL的精神。于是这些GNU的*信徒兵分两路:其中一部分人去制作Harmonny,试图重写出一套兼容Qt的替代品,这个项目虽然技术上相对简单,但却没有获得KDE项目的支持;另一路人马则决定重新开发一套名为“GNOME(GNU Network Object Environment)”的图形环境来替代KDE。
GNOME选择完全遵循GPL的GTK图形界面库为基础,因此我们也一般将GNOME和KDE两大阵营称为GNOME/GTK和 KDE/Qt。与Qt基于C++语言不同,GTK采用较传统的C语言 ,虽然C语言不支持面向对象设计,看起来比较落后,但当时熟悉C语言的开发者远远多于熟悉C++的开发者。加之GNOME/GTK完全遵循GPL版权公约,吸引了更多的*程序员参与。
Qt、GTK 和KDE、GNOME的关系为了方便开发人员编写X-clients,就有了Xlib来封装X协议;Xlib还不够方便,于是就有了QT和QTK,它们提供了很多窗口控件(widgets)。为了方便用户 ,就出现了Gnome和KDE等桌面管理系统。一般来说,,linux用户看到的界面就是其中之一了。Gnome用的是QTK库,KDE用的是QT库。
XWindow、Server、Client和QT、GTK之间的关系