标题：X Window
简介
X Window是一种以位图方式显示的软件窗口系统，最初是1984年麻省理工学院的研究成果，之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具包及显示架构的运作协议。[1]
X Window通过软件工具及架构协议来建立操作系统所用的图形用户界面，此后则逐渐扩展适用到各形各色的其他操作系统上，几乎所有的操作系统都能支持与使用X Window，GNOME和KDE也都是以X Window为基础建构成的。[2]　
X Window向用户提供基本的窗口功能支持，而显示窗口的内容、模式等可由用户自行定制，在用户定制与管理X Window系统时，需要使用窗口管理程序，窗口管理程序包括AfterStep、Enlightenment、Fvwm、MWM和TWM Window Maker等，供习惯不同的用户选用。
可以定制的窗口环境在给用户带来了个性化与灵活性的同时，要求用户有相对比较高的使用水平，不过这种机制带来的好处也是明显的，它不象Microsoft Window那样将窗口元件的风格、桌面、操作方式等千篇一律地规定死，只可以换一下墙纸、图标、调整字体大小等等，在X Window系统中可以有多种桌面环境的选择。[3]
发展历程
前身在X-Window出现前已有几个位图式的软件显示系统已经存在，例如帕洛阿尔托研究中心(施乐公司)提出的Alto(1973年)和Star(1981年)、苹果计算机提出的Lisa(1983年)和麦金塔(1984年)、在UNIX世界也有雅典娜工程(1982年)和Rob Pike的Blit终端机(1984年)。
1983年之前称为W-Window系统的窗口系统是X的真正前身(在拉丁字母里面 X 直接接在 W 后面)。W-Window系统运行于系统V之上，W使用一个支持终端机和图形窗口的网络协议，而服务器维护显示的列表。[2]　
起源X-Window于1984年在麻省理工学院(MIT)电脑科学研究室开  版本发展历史一[2]始开发的，当时Bob Scheifler正在发展分散式系统(distributed system)，同一时间DEC公司的 Jim Gettys 正在麻省理工学院Athena计划的一部分。两个计划都需要一个相同的东西——一套UNIX机器上运行优良的视窗系统。因此合作关系开始展开，他们从斯坦福大学得到了一套叫做W的实验性视窗系统。因为是根据W视窗系统的基础开始发展的，当发展到了足以和原先系统有明显区别时，X Window为开发基于图形的分布式应用程序提供软件工具和标准应用程序编程接口。完成的应用与硬件无关，这意味着它们可以在支持X Window环境的任何系统上运行，这种完整环境通常被简称“X”。[2-3]　
管理历史1)MIT X协会与X协会公司
1987年，随着X11取得明显成功，MIT希望免除X的管理责任。但是1987年6月与9个厂商举行会晤，这些厂商表示他们相信为了避免 X 由于商业因素而分裂，需要中立方的参与。19  版本发展历史二[4]88年1月，X协会(X Consortium)做为非营利厂商团体而成立，由Scheifler担任主管，而Keith Packard担任高级开发人员，确保 X 能持续以中立超然的立场提供商业与学术教育所需的开发。1993年，X协会公司(X Consortium, Inc.;非营利性质的公司)做为MIT X协会的接继者而成立
2)开放团体
1997年中，X Consortium将X的管理交给开放团体(The Open Group)，而它是1996年由开源软件基金会(Open Software Foundation;OSF)和X/Open合并成立的厂商团体。
3)X.Org
1999年5月开放团体组建了X.Org。X.Org指导了X11R6.5.1之前的版本发布。在此期间X的开发死气沉沉。2003年，随着Linux的流行X被大量安装。但是X.Org几乎无声无息，活跃的开发由XFree86承担。
4)XFree86
在19*至1990年期间，托马斯?罗尔把X11R4分类器上提供的X服务器程序的源代码下载到运行速度仅为33MHz的386PC 上，成功运行了被他称为是X38611.1的X服务器。这就是XFree86的雏形。
1992年后多数技术创新都发生在XFree86项目中。1999年，由于众多对于XFree86在Linux上应用有兴趣的硬件厂商的推动，并也已经成为最普及的X版本，XFree86成为X.Org的荣誉成员(不付费)。
但是自2003年开始，XFree86内部却发生了争论。它被认为太教堂式了，如同它的开发模式;开发者不能通过CVS做提交，而厂商被迫维护大量补丁。2003年3月，自从最初的MIT X Consortium结束之后就参加XFree86的Keith Packard由于被认为态度不良而被驱逐
X.Org和XFree86开始讨论能够有助于X开发的重组Jim Gettys早在2000年就热心于开放的开发模式。Gettys、Packard和其他几个人开始讨论有效管理X和开放式开发的细节。
最终就像是X11R*许可证争议的回响，XFree86于2004年2月在更加严格许可证下发布了4.4 。许多依赖X的项目认为该许可证无法接受，特别是它和GNU General Public License不兼容。这引起一场论战，许多人认为到了该对XFree86分叉(fork)的时候了，许多Linux发行版，包括Fedora、Gentoo都纷纷在最新的版本中使用X.Org基金会的发布代替XFree86。
5)X.Org基金会
2004年年初X.Org基金会成立。这意味着 X 在管理上的根本转变。1988年以来 X 的管理者(包括过去的X.Org)都是厂商组织，而基金会由软件开发者领导，采用依靠外部参与的集市模式的社区开发。其成员身份对个人开放，法人成员则成为赞助者。X.Org还开始同freedesktop.org密切合作。[4]
部分版本第10版
1985年底。直到此时，在MIT以外的人和组织，才开始对X有实质的贡献。
第一套商业化的X产品DEC于1986年1月推出 VAXstation-II/GPX。
第10版第3次发行：1986年 2月。从此时起，X开始流传于世，人们把它移植到许多新的系统上。
第10版第4次发行：1986年11月。
1987年 1月在MIT举办第一次X技术会议。
在1986年，第10版X无法满足所有的需求已非常明显。MIT 和 DEC便从事于完整协议（protocal）的重新设计。这就是X第11版（这就是所谓的X11）。[5]　
第11版
第 1次发行：1987年 9月。
X协会成立：MIT X协会成立的目的是为了研究发展及控制标准。
第二次X技术会议：1988年 1月。
第11版第 2次发行：1988年 3月。
第11版第 3次发行：1988年10月。[6]
特性
X Window在位映射屏幕上的一个或多个窗口中运行程序。用户可以在每个窗口中同时运行多个程序，并且可以通过用鼠标在窗口之间进行切换。
x服务器的程序在本地工作站上运行，并且管理它的窗口和程序。
每个程序窗口都被称为x Client，并且与在同一个机器上运行的x Server程序以C/S进行交互。
x Server处理所有X Client处理程序，以及通过消息传递系统和其它客户交互工作。x Server控制整个本地环境，因而当访问存储器和其它系统资源时，程序间进行合作。
x Server运行x Window管理器程序，这个程序提供GUI界面。现在可以使用两种窗口管理器：Motif和Open Look。它们在功能上是类似的，并且运行相同的程序。
在本地机器运行的x Server可以和远程计算机上运行的程序进行交互，并且在本地窗口显示这些程序的输出结果。它是一种C/S的关系，但是本地服务端具有完整权限，远程进程被称为客户端，而不是服务端，这是因为它们处于这个本地的x Server的控制之下。
在Internet和其它广域网环境中，上面的最后一点是非常重要的。用户可以对让在远程计算机上的程序工作。这个远程程序在它需要经常访问的资源(如磁盘数据)附近运行。只有修改用户屏幕信息才会通过远程链路进行传输，从而避免了整个程序和它的数据都传输到本地系统进行处理时可能出现的瓶颈。
x Server和远程X Client之间的接口是面向事件的，并且是基于X协议的。这种协议在传输控制协议/Internet协议(TCP/IP)之上运行。在一些情况下，一些厂商通过增加像三维图象这样的功能来增强了X Window环境。X Window环境的一个优势是，服务器应用程序可以在任何平台上运行，并且这个应用程序可以在公用运输协议之上与这个客户机交换一组消息。于是，开发人员就可以在许多系统上建立X Window-认可的应用程序，并且这些应用程序可以被任何支持X Window的工作站访问。
X Window是开放软件基金会(OSF)的Motif和Open Look系统的用户接口。SunSoft的Solaris2操作系统也实现了由AT&T开发的X Window实现。[7]
在X Window下，服务资源为X服务端的显示提供处理能力，X客户端用于显示图形图像，但它不能直接控制显示设备，只能使用用户面前的X服务端提供的显示资源。同样它也不能接受用户输入，也只能使用X服务端控制的键盘或鼠标接受输入。在这里，X服务端控制硬件的运行状况，X客户端只是单纯的执行程序，只能使用X服务端提供的服务进行输入输出。[8]
基本部件
X系统由3个相关的部分组合起来的。　
服务端（Server）
Server是控制显示器和输入设备（键盘和鼠标）的软件。Server可以创建视窗，在视窗中绘图和文字，回应Client程序的“需求”（requests），但它不会自己完成，只有在Client程序提出需求后才完成动作。
每一套显示设备只对应惟一的Server，而Server一般由系统供应商提供，通常无法被用户修改。对操作系统而言，Server只是一个普通的用户程序而已，因此很容易更换新版本，甚至更换成第三方提供的原始程序。[9]　
客户端（Client）
Client是使用系统视窗功能的一些应用程序。在X下的应用程序称做Client，原因是它是Server的客户，要求Server回应它的请求完成特定动作。
Client无法直接影响视窗行为或显示效果，它们只能送一个请求（request）给Server，由Server来完成这些的请求。典型的请求通常是“在某个视窗中写‘Hello World’的字符串”，或者从A到B划一条直线。
Client的功能大致可分为两部分：向Server发出“需求”只是它的一部分功能，其他的功能是为用户执行程序而准备的。例如输入文字信息、作图、计算等等。通常，Client程序的这一部分是和X独立的，它对于X几乎不需要知道什么。通常，应用程序（特别是只大型的标准绘图软件、统计软件等）对许多输出设备具有输出的能力，而在X视窗中的显示只是Client程序许多输出中的一种，所以，Client程序中和X相关的部分只占整个程序中很小的一部分。
用户可以通过不同的途径使用Client程序：通过系统提供的程序使用；通过第三方的软件使用；或者用户为了某种特殊应用而自己编写的Client程序来使用。[9]
通讯通道　(communication channel）　
client藉著它送 "需求" 给server，而server藉著它回送状态 (status) 及一些其它的资讯 (information)。 
只要 client 和 server 都知道如何使用通道，通道的本身并不是很重要，在系统或网路上支援通讯型态的需求是内建於系统基本的X视窗函数馆(library)，所有和通讯型态有关的事都从函数馆独立出来，client和server之间的通讯只要藉著使用这函数馆（在标准X版为xlib）。[9]
Server和Client之间的通信
Server和Client通信的方式大致有两类，对应于X系统的两种基本操作模式。
第一类，Server和Client在同一台机器上执行，它们可以共同使用机器上任何可用的通信方式做互动式信息处理。在这种模式下，X可以同其他传统的视窗系统一样高效工作。
第二类，Client在一台机器上运行，而显示器和Server则在另一台机器上运行。因此两者的信息交换就必须通过彼此都遵守的网络协议进行，最常用的协议为TCP/IP。这种通信方式一般被称为网络透明性，这也几乎是X独一无二的特性。[10]
用户接口
X的设计目标之一就是能创建许多不同形式的用户接口。其他的是视窗系统提供具体的交互方式，而X只提供一般的架构，让系统创建者建造所需的交互风格。这种特性使得开发者可以在X的基础上建造全新的接口，并且可以在任何时刻根据自己的需要选用适当的接口。
一般来说，用户接口可以分为两部分。管理接口也就是视窗管理器，是命令的最高层，它负责在屏幕上创建或重建视窗，改变视窗的大小、位置，或者将视窗改变成图示等。
应用接口确定了用户和应用程序之间的交互风格，即用户如何利用视窗系统的设备程序来控制应用程序并传递输入行为。例如，如何用鼠标来选定一个选项。[10]
用户界面
X刻意不去规范应用程序在用户界面上的具体细节设计，这些包括按钮、菜单和窗口的标题栏等等，这些都由窗口管理器（window manager）、GUI构件工具包、桌面环境（desktop environment）或者应用程序指定的GUI（如POS）等等的用户软件来提供，然而因为架构设计上保留了高度的弹性发挥空间，致使多年来X在“基础、典型、一般性”的用户界面上，也都有数目惊人的多样性选择。
在X的系统架构中，窗口管理器用于控制窗口程序的位置和外观，其界面类似Microsoft的Windows或者Macintosh（例如：KDE的KWin或者GNOME的Metacity），不过在控制机制上却截然不同（如：X提供的基本窗口管理器twm）。窗口管理器可能只是个框架（如：twm），但也可能提供了全套的桌面环境功能（如：Enlightenment）。
虽然不同的X用户界面可以有很大的差异，然而绝大多数的用户在使用X时，多是用已经打包的桌面环境，这种桌面环境不仅包含窗口管理器，还具备各种应用程序以及风格一致的界面，目前最流行的桌面环境是GNOME和KDE，二者已普遍应用于Linux操作系统上，而UNIX所用的标准桌面环境多是通用桌面环境CDE，然而有些UNIX也开始采用GNOME。
此外，X桌面环境及组件虽然很多，但同时也需要保持兼容性与互通性，这些由freedesktop org积极与努力地维持各种不同X桌面环境的兼容性，使竞争态势下仍不失X的兼容本色。[11]
优点
任务划分优点客户端可以在远程电脑上执行计算任务，而X Server仅负责复杂的图形显示，充分发挥X Server在显示上的优势。
只有X Server服务端与硬件打交道，所有的客户端都与硬件无关，这让不同的平台上的移植变得很容易。
客户端可以在不同的电脑上运行，从巨型机到个人电脑，从而充分发挥网络计算的优越性。
尽管每个X客户端都可以对整个屏幕范围进行显示操作，但标准的做法是先创建一个显示视窗，此后客户端的所有显示都是相对于这个视窗进行操作。这样在同一屏幕内就能同时显示多个独立的客户端，通过对视窗的管理可以在不同的程序之间切换。每个视窗应该位于屏幕的位置、何时显示、何时隐藏，以及视窗的标题、四周如何显示等，这些都不应该由产生这个视窗的客户端进行控制和维护，否则就不能达到简化设计的目的。X Window并没有自己实现这些任务，在X的设计原则中，这些代表 GUI风格的任务仍然是客户端的任务，因此X将管理视窗的任务给予了一个特殊客户端——视窗管理器，使用不同的视窗管理器会使X Window的外观看起来截然不同。
X系统只负责显示图形，并不限制显示和操作的风格，因此不同的X Window的风格并不相同，用户可以根据自己的喜好进行选择。
在X Window上，所有的视窗形成了一个树状结构。X Window的视窗管理程序运行在根视窗上，所有的其他视窗为根视窗的子视窗，而其他视窗上也有相应的按钮、对话框等元件，这些是它的子视窗。如图7-2所示。
由于X Window系统只提供了最基本的系统调用，而具体的视窗都有很多共性，因此要开发X应用程序，应该首先使用开发工具包，而没有必要直接使用最基本的X Window 的系统调用，以简化编写程序的工作量。不同的公司或组织开发了各种工具包来提供创建和管理具体视窗的构件，例如Motif套件、OpenLook套件等。每种套件都提供了菜单、按钮、对话框等图形接口的标准组件，还提供基本的视窗管理器。使用不同套件开发的程序，其显示风格也不相同，因此就在不同程序之间形成了不同的GUI风格。Motif和Openlook 就是两种不同的图形接口风格，当前Motif成为了商业X Window的一个标准，很多商业软件均基于Motif进行开发，而Openlook则没有获得更普遍的支持。[10]
独立于操作系统X不是内置于操作系统，它只是比用户层次稍高一些。在系统中也是一个相对独立的元件。这样做有如下优点：
易于安装和改版，甚至去除。这种工作不需要重启系统，也不会对其他应用程序造成干扰。
第三方很容易支持并加强它的功能。例如你的生产厂商提供的系统不够好，你可以向别人买更好或更快的版本。
X不会制定操作系统，只是一个标准，这也是第三方开发软件的原动力。
为了开发者。在Server上进行工作时，如果程序异常中断，只会影响到视窗系统，不会造成机器的损坏或操作系统内核的破坏。[10]
缺点
稳定性不强在PC世界里，需要第三方硬件驱动的非主流的个人计算机软件往往不能支持那些专为Microsoft Windows出品的设备。X Window也不例外，它的实现往往缺少较新（或者非常旧）的高效的显卡驱动。
在X org和XFree86这样的开源X中，开发社区通过复用已有代码，可以很快更新改进驱动程序，从而能够为较旧的或者通用的硬件开发出高质量的驱动。
图形高效运算是目前顶级的图形功能，一般由厂家通过专有驱动来实现，而且往往会优先考虑Windows（最大的消费市场）。由于高性能视频市场的显赫地位，一些硬件/驱动厂商会考虑通过将技术细节变为商业秘密或者将其中的创新申请专利，而这阻碍了开源驱动程序的实现。
在PC机之外的其他设备，很多X应用是为非传统设备如PDA和手机编写（或者移植）的。这样的实现必须提供为在此之上运行的平台提供至少且必须的设备支持。
性能 X Window的C/S体系（C/S架构）设计在应用程序和显示硬件之间多加了一层软件，导致绘图效率下降，所以引起了一些批评。因此开发了若干扩展，在设备和客户机在同一个系统上时，通过在取得适当许可的情况下，以直接访问设备来改善这一问题。而在Linux上，一些显卡驱动已经部分移入内核以提高效率。
稳定性 另一方面，X也被批评提供了过多的对硬件的直接访问，从而影响了系统的稳定性。行为不良的显卡驱动（有时也可能是应用程序）可能导致整个系统的崩溃或重启；有时即使操作系统仍在工作，也不能继续渲染显示效果（这时除了重启，缺乏好的恢复手段）。
根本上，目前所有的桌面GUI操作系统都提供某种对硬件的直接访问，支持者认为市场已经证明了为了提供图形功能牺牲一点稳定性是值得的。或许将来随着技术和用户的演化这一平衡会有所变化。
不规范的用户界面X刻意不去规范用户界面和程序之间大多数的通信，导致出现了许多非常不同的界面，同时造成程序之间协同的困难；而客户机之间的互操作规范ICCCM以难以正确实现而闻名。后来的标准化尝试，如Motif和CDE，也于事无补。长久以来这已经成为用户和程序员的噩梦。目前，程序的感观一致性和通信一般是通过为特定桌面环境或者构件工具箱编程来处理，这也避免了直接和ICCCM接触。
X缺乏良好的网络与透明的音效系统。当用户对音效日益期盼时，各种不兼容的音效子系统便出现了。过去，大多数程序员只好忽略网络问题，简单地使用本地操作专用的音效API。第一代客户端-服务端音效系统有rplay和Network Audio System。而最近的努力产生了EsounD（GNOME）和ARts（KDE），而这也并非标准。而其他系统如Media Application Server则正在开发当中。
直到最近，X也没有好地解决显示与打印机所打印的内容一致性（所见即所得）的解决方案。许多X客户机完全用PostScript实现打印，而这与发送到服务端的几乎是分离的。从X11R6.3起包含了Xprint，此时客户端已经不错，但是服务器实现还不行。而从X11R6.8起实现的质量已经很好，并且获得了组件支持。
网络通信能力弱X不能像VNC那样把客户端的通信从一个服务端卸下然后再附加到另一个上，但现在正在为X增加此功能的工作，另外还要实现通过VNC实现X Server的显示。
X Server和远端客户机之间的网络通信使用明文的缺陷，让攻击者使用封包截取程序就能够截获和阅读它。这一缺陷一般可以通过在SSH通信上使用X来解决。
设备中立和客户端与服务端的分离还带来了一定开销。X的网络透明性要求客户机和服务器分别运行。在其早期，与同时期采取窗口系统嵌入操作系统这一方法的Microsoft Windows和Mac OS比较，这给独立系统的性能带来明显的影响。为了获得可接受的性能，推荐起码要保留4到8MB的RAM，但在1990年之前，这被认为与Windows或者Mac OS相比太耗资源了。
当前版本的Windows和Mac OS X Quartz也包含了和X的C/S相类似的子系统划分，其性能和资源需求同X加上KDE或者GNOME也类似。现在主要的消耗来自于客户机和服务器之间的网络延迟（非协议本身产生的滞后时间），应该通过应用程序的设计来改善。[12]
发展状况
X在类UNIX系统上几乎完全占据统治地位。但是仍然有人尝试提供替代品和更多的选择。过去曾经有Sun的NeWS，但它遭到市场淘汰；还有NeXT的Display PostScript，它最终转变为苹果电脑的Mac OS X内的Quartz。
应对对于X的批评的更前卫的尝试有Berlin/Fresco和Y Window System这样的完全替换。这些代用品被认为不值得采用，而任何不能做到与X向后兼容的的替代品的可行性都被广泛置疑。
其他有的竞争者通过直接操作硬件来避免X的开销，这样的项目包括DirectFB。但是由于DRI正在致力于使用可靠的内核级接口提供帧缓冲，这些努力可能变成是多余的。
其他以图形终端服务形式达到网络透明性的尝试还有VNC（很底层的系统，通过网络发送压缩的位图；UNIX上的实现包括X Server）、Citrix MetaFrame（类似X的Windows软件）、Tarantella（为网络浏览器提供Java客户机）和NX技术（用于远程显示的节省带宽的协议）。[12]