【X视窗系统】
X Window系统（X Window System，也常称为X11或X，天视窗系统）是一种以位图方式显示的软体视窗系统。最初是1984年麻省理工学院的研究，之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软体工具套件及显示架构的运作协定。X Window系统透过软体工具及架构协定来建立作业系统所用的图形用户界面，此后则逐渐扩展适用到各形各色的其他作业系统上。现在几乎所有的作业系统都能支援与使用X。更重要的是，今日知名的桌面环境——GNOME和KDE也都是以X Window系统为基础建构成的。
由于X只是工具套件及架构规范，本身并无实际参与运作的实体，所以必须有人依据此标准进行开发撰写。如此才有真正可用、可执行的实体，始可称为实现体。目前依据X的规范架构所开发撰写成的实现体中，以X.Org最为普遍且最受欢迎。X.Org所用的协定版本，X11，是在1987年9月所发布。而今最新的参考实作（参考性、示范性的实作体）版本则是X11 Release 7.8（简称：X11R7.8），而此专案由X.Org基金会所领导，且是以MIT授权和相似的授权许可的自由软体。
GNOME 3.32
== X的C/S模式和网络透明性 ==
X能为GUI环境提供基本的框架：在屏幕上描绘、呈现图像与移动程式视窗，同时也受理、执行、及管理电脑与滑鼠、键盘的互动程序。不过，X并没有管辖到使用者介面的部份，而是由其他以X为基础的实现体来负责，也因为如此，以X为基础环境所开发成的视觉样式非常地多；不同的程式可能有截然不同的介面呈现。
X采用C/S的架构模型，由一个X服务器与多个X客户端程序进行通讯，服务器接受对于图形输出（窗口）的请求并反馈用户输入（键盘、鼠标、触摸屏），服务器可能是一个能显示到其他显示系统的应用程序，也可能是控制某个PC的视频输出的系统程序，也可能是个特殊硬件。
X的一大特点在于“网路透明性”：应用程式（“客户端”应用程式）所执行的机器，不一定是使用者本地的机器（显示的“伺服器”）。X中所提及的“客户端”和“伺服器”等字眼用词也经常与人们一般想定的相反，“伺服器”反而是在使用者本地端的自有机器上执行，而非是在远端的另一部机器上执行。
在图例中，X伺服器从键盘、滑鼠端取得输入资讯，之后将输入反应显示于银幕，而网页浏览器及终端机模拟器则在用户端的本机系统上执行。此外用户端也透过网路与远端的机器、伺服器保持联系，以保讯息状态的更新。如此的机制及架构能使远端执行的软体如同在本机端执行一样。
服务器和客户端之间的通信协议的运作对计算机网络是透明的：客户端和服务器可以在同一台计算机上，也可以不是，或许其架构和操作系统也不同，但都能运行。客户机和服务器还能够使用安全连接在互联网上安全地通讯。
为了使远端客户程序显示到本地服务器，用户一般需要启动一个终端窗口和到达远端计算机的telnet或者ssh，令其显示到用户计算机，（例如：在运行bash的远端计算机上export DISPLAY=用户的计算机:0）然后启动客户端。然后客户端就会连接到本地计算机，并且远端应用程序会显示到本地屏幕并被本地输入设备所控制。与之对应，本地计算机上也可以执行一个连接到远端计算机的小型代理程序，并在该端启动与执行自有需求与指定的应用程序。
实际的远端客户端的例子有：图形化管理远程计算机；在远端UNIX计算机上运行计算密集的仿真程序并把结果显示到本地的Windows桌面计算机；用一套显示器、键盘和鼠标控制同时运行在多台计算机上的图形化软件。
== X的设计原则 ==
X的设计原则，早在最初仍在麻省理工学院的阶段（1984年）就已经成形，由Bob Scheifler和Jim Gettys两人制订出X最早的开发、强化、改进原则，原则大体如下：
* 除非没有它就无法完成一个真正完整的应用程式，否则不用增加新的功能。
* 决定一个系统不是什么和决定它是什么同样重要。与其去适应整个世界的需要，宁可使得系统可以扩展，如此才能以持续相容的方式来满足新增需求
* 只有完全没实例时，才会比只有一个实例来的糟。
* 如果问题没完全弄懂，最好不要去解决它
* 如果可以透过10％的工作量得到90％的预期效果，应该用更简单的办法解决。（参见：更糟就是更好）
* 尽量避免复杂性。
* 提供机制而不是策略，有关使用者介面的开发实现，交给实际应用者自主。
之后，上述原则中的第一项原则在设计X11时被加以修改，修订成：「除非已有真正的应用程式，真的需要X为其修订、增订等支援，否则不会为X增加新功能。」X基本上一直遵循这些原则，参考实现的扩展及改进也是以此原则的角度来著手，也因为奉行上述原则，使至今的最新版X仍能与最初（1987年）发布的协定标准近乎完全相容。
== 使用者界面 ==
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的相容本色。
== 实现 ==
X的标准实现是X.Org的参考实现。由于其许可证比较宽松，出现了大量自由的或者专有的实现。商业的UNIX商家倾向于采用参考实现并使之适应其硬件，例如高度定制并加入专有的扩展。
直到2004年，在自由的类UNIX系统上最常见的X变体是XFree86。顾名思义，它源于X的386兼容的PC机的移植，到了上个（20）世纪90年代末期成为X的技术创新的主要来源和X开发的事实标准。但是从2004年起，最流行的X服务器是XFree86的分支—X.Org的参考实现。
虽然X一般和UNIX联系在一起，X服务器也能够自然地存在于其他图形环境。DEC／COMPAQ／HP的OpenVMS操作系统用X加上CDE做为其标准桌面环境，称为DECwindows。苹果公司的Mac OS X v10.3（研发时的代号：Panther，美洲豹）包括Apple X11，它基于XFree86 4.3和X11R6.6，并能和Mac OS X更好地集成。
Microsoft的Windows本身不包含对X的支持，但是有不少第三方的实现可用，其中有自由软件如Cygwin/X、Xming、WeirdMind和WeirdX，另外专有、专属性的也有Xmanager、X-Deep/32、、WiredX和。它们多用于控制远程X客户端。
当X寄生在其他窗口系统（例如：Windows或Mac OS）时，X系统一般是“rootless，无根”的，也就是说：宿主（主体）窗口系统担当根窗口（背景和相关菜单）并管理寄生（客体）的X窗口的位置。但是也有些服务器，例如Exceed，能够在宿主系统上创建根窗口使得远程客户端能够做为分离的窗口在其上显示。
=== X终端机 ===
X终端机（X Terminal）是做为仅运行X服务器的瘦客户机的专用硬件。该架构广泛用于为了使多人同时使用同一个大型服务器而构造终端。这也符合MIT的计划的初衷。
X终端搜索网络，使用X显示管理器产生允许其运行客户机的主机列表。初始主机需要执行X显示管理器。
专用的X终端机（硬件）现在已经不太常见了，现在经常使用个人计算机并搭配执行X终端机的实效模拟程式（Emulator）来完成相同的功能，过去（1990年代初期）业界在推行X终端机时也将其称为「穷人的UNIX工作站」。
== X的局限和批评 ==
在《UNIX-HATERS Handbook》一书中有个章节为："X视窗所造成的灾祸（The X-Windows Disaster）"，该书用此整个章节的篇幅内容来讨论X在20世纪80年代末到同世纪90年代初的问题与困扰。
=== 视频硬件 ===
==== PC ====
在PC世界里，需要第三方硬件的驱动的非主流的个人计算机软件往往不能支持所有为Microsoft Windows出品的设备。X Window也不例外，它的实现往往缺少较新（或者非常旧）的显示卡高效驱动程序。
X.org和XFree86这样的开源X实现中，开发社区通过复用已有代码，可以很快更新改进驱动程序，从而能够为较陈旧的或者很通用的硬件开发出高质量的驱动。
高性能图形计算目前是顶级的图形功能，一般由厂家通过专有驱动来实现，而且往往优先考虑是Windows（最大的消费市场）。由于高性能视频市场的显赫地位，一些硬件／驱动厂商会考虑通过将技术细节变为商业秘密或者将其中创新变为软件专利，而这阻碍了开源驱动的实现。
==== 其他设备 ====
在PC机之外的世界里，很多X的实现是为非传统设备如PDA和手机而编写（或者移植）的。这样的实现必须提供为在此之上运行的平台提供至少且必须的设备支持。
==== 性能 ====
X Window的C/S体系（主从式架构）设计在应用程序和视频硬件之间多加了一层软件，导致绘图效率下降，所以引起了一些批评。因此开发了若干扩展，在设备和客户机在同一个系统上时，通过在取得适当许可的情况下，以直接访问设备来改善这一问题。而在Linux上，一些视频驱动已经部分移入内核以提高效率。
==== 稳定性 ====
另一方面，X也被批评为需要（或者提供）了过多的对硬件的直接访问，从而影响了系统稳定性。行为不良的显卡驱动（有时也可能是应用程序）甚至能够导致整个系统崩溃或者重启；有时即使操作系统仍在工作，它也不能继续渲染其显示（这时除了重启，缺乏好的恢复手段）。
根本上，目前所有的桌面GUI操作系统都提供某种对硬件的直接访问，支持者认为市场已经证明为了提供图形性能牺牲一点稳定性是值得的。或许将来随着技术和用户的演化这一平衡会有所变化。
=== 用户界面特征 ===
X刻意不去规范用户界面和程序之间大多数的通信，导致出现了几种非常不同的界面，同时程序之间协同困难；而客户机之间的互操作规范ICCCM以难以正确实现而闻名。后来的标准化尝试，如Motif和CDE，也于事无补。长久以来这已经成为用户和程序员的巨大的挫折的源头。目前，程序的感观一致性和通信一般是通过为特定桌面环境或者构件工具箱编程来处理，这也避免了直接和ICCCM接触。
X缺乏良好的网络与透明的音效系统。当用户对音效日益期盼时，各种不兼容的音效子系统便出现了。过去，大多数程序员只好忽略网络问题，简单地使用本地的并且是OS专用的音效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服务器的显示。
X服务器和远端客户机之间的网络通信使用明文的缺陷，让攻击者使用封包撷取程式就能够截获和阅读它。这一缺陷一般可以通过在SSH通讯上使用X来解决。
设备中立和客户机与服务器分离还带来了一定开销。X的网络透明性要求客户机和服务器分别运行。在其早期，与同时的采取窗口系统嵌入操作系统这一方法的Microsoft Windows和Mac OS比较，这给独立系统带来明显的性能影响。为了获得可以接受的性能，推荐起码要4到8MB的RAM，但在1990年代之前，这被认为与Windows或者Mac OS相比太超过了。
当前版本的Windows和Mac OS X Quartz也包含了和X的客户机／服务器相类似的子系统划分，其性能和资源需求同X加上KDE或者GNOME也类似。现在主要的消耗来自于客户机和服务器之间的网络往返延迟（非协议本身产生的滞后时间），应该通过应用程序的设计来改善。
== X的竞争者 ==
X在类Unix系统上几乎完全占据统治地位。但是仍然有人尝试提供替代品和更多的选择。过去曾经有升阳的，但它遭到市场淘汰；还有NeXT的Display PostScript，它最终转变为苹果公司的Mac OS X内的Quartz。
应对对于X的批评的更前卫的尝试有Berlin/Fresco和Y Window System这样的完全替换。这些代用品被认为不值得采用，而任何不能做到与X向后兼容的的替代品的可行性都被广泛置疑。
其他有的竞争者通过直接操作硬件来避免X的开销，这样的项目包括DirectFB。但是由于DRI正在致力于使用可靠的内核级接口提供帧缓冲，这些努力可能变成是多余的。
freedesktop.org所主持的Wayland显示伺服器同时运用了前述两种方法处理X的缺点，它完全替换了X的架构而且运用DRI来直接操作硬体。Canonical公司替他旗下的Ubuntu Linux作业系统开发中的Mir是一个类似的计划。预计支援ARM晶片组和x86架构的电脑。Mir透过Xmir向后兼容使用X Window的程式。
其他以图形终端服务形式达到网络透明性的尝试还有VNC（很底层的系统，通过网络发送压缩的位图；UNIX上的实现包括X服务器）、思杰系统（类似X的Windows软件）、塔朗泰拉（为网络浏览器提供Java客户机）和NX技术（用于远程显示的节省带宽的协议）。
== 历史 ==
=== 前身 ===
事实上，早在X出现前已有几个-{zh-hans:位图;zh-hk:点阵图;zh-tw:点阵图;}-式的软体显示系统已经存在，例如帕洛阿尔托研究中心（施乐公司）提出的Alto（1973年）和Star（1981年）、苹果电脑提出的Lisa（1983年）和麦金塔（1984年）、在UNIX世界也有-{zh-hans:雅典娜工程;zh-hk:Athena计划;zh-tw:Athena计划;}-（1982年）和Rob Pike的Blit终端机（1984年）。
X从1983年之前称为W Window系统的视窗系统中，推衍出它的名字当作是继任者（在拉丁字母里面X直接接在W后面）。W Window系统是运行于V作业系统。W使用一个支援终端机和图形视窗的网路协定，而伺服器维护显示的列表。
=== 起源和早期的发展 ===
X起初是MIT于1984年的构想，当作为-{zh-hans:雅典娜工程;zh-hk:Athena计划;zh-tw:Athena计划;}-的Jim Gettys和MIT电脑科学实验室的Bob Scheifler的共同研究。Scheifler需要一个可以使用的显示环境来对Argus系统除错。-{zh-hans:雅典娜工程;zh-hk:Athena计划;zh-tw:Athena计划;}-，是DEC、MIT、和IBM之间的联合计划，用来提供给需要一个平台独立显示系统，可把不同种类多个制造商之系统连结在一起，给所有学生容易存取电脑资源；该视窗系统曾经在卡耐基美隆大学（Carnegie Mellon University，CMU）的-{zh-hans:雅典娜工程;zh-hk:Athena计划;zh-tw:Athena计划;}-中发展过，但是在授权上并可能得到且没有其他可替代可选择。
该计划借由创立一个可以执行本地应用程式且能够拜访远端资源的协定来解决这个问题。起初在1983年中期W视窗系统的UNIX移植在V作业系统下以1/4速度运行；在1984年5月，Scheilfer将W的同步协定换成非同步协定，以及将显示列表换成直接模式绘图，而创造出X的版本1。X是第一个真正的硬体和制造商无关的视窗系统环境。
Scheifler、Gettys和Ron Newman著手工作且X快速地进展著。版本6于1985年1月推出。DEC正准备要推出它的第一个Ultrix工作站，且X是唯一最有希望即时准备妥当的视窗系统。于是X6被移植到MicroVAX的DEC QVSS显示器。
1985年第二季，为了支持DEC的VAXstation-II/GPX增加了色彩支持，由此形成了版本9。尽管MIT此前已经免费许可X6给一些外部群体，它此时决定在后来演变为MIT授权的许可证下发放对X9和后续版本。X9于1985年9月发布。
布朗大学的一些人将版本9移植到IBM RT/PC，为了读取RT的非对齐数据对协议做了不兼容的修改，导致1985年稍后发布版本10。1986年有若干外部团体对X提出需要。X10R2发布于1986年1月。1986年2月的X10R3是第一个广泛发行的版本，DEC和惠普都基于它发布产品。别的一些团体把X10移植到Apollo或者Sun工作站甚至IBM PC/AT。X10的最后一个版本X10R4于1986年12月发布。
尽管X10既有趣又强大，但很明显在X被更加广泛地采纳前人们期待X的协议更加设备中立；但是这样大规模地完全重新设计所要求地资源超出了MIT自身能够提供的。于是DEC的Western Software Laboratory跻身该项目。DEC WSL的Smokey Wallace，另外还有Jim Gettys提议X11在DEC WSL创建，但能够使用与X9和X10同样的方法自由获取。该项目于1986年5月开始，协议部分于8月结束，软件的alpha（内部）测试于1987年2月就，beta（外部）测试开始于5月。X11最终于1987年9月15日发布。
X11协议设计由Scheifler领导，并在nascent Internet的开放邮件列表上广泛讨论。于是X成为最早的较大规模的开源软件项目之一。
=== MIT X协会与X协会公司 ===
1987年，随着X11取得明显成功，MIT希望免除X的管理责任。但是1987年6月与9个厂商举行会晤，这些厂商表示他们相信为了避免X由于商业因素而分裂，需要中立方的参与。1988年1月，X协会（X Consortium）做为非营利厂商团体而成立，由Scheifler担任主管，而Keith Packard担任高级开发人员，确保X能持续以中立超然的立场提供商业与学术教育所需的开发。此后MIT X协会（MIT X Consortium）完成了一系列重要的X11版本，第一个就是1988年1月的版本2（X11R2）。
1993年，X协会公司（X Consortium, Inc.；非营利性质的公司）做为MIT X协会的接继者而成立。它于1994年5月16日发布了X11R6。1995年X协会公司接手了UNIX系统的Motif工具箱和CDE（Common Desktop Environment）共通桌面环境。而原有的X协会在发布了最后一个版本的X11R6.3后，于1996年末解散。
=== 开放团体 ===
1997年中，X Consortium将X的管理交给开放团体，而它是1996年由开放软体基金会（OSF）和X/Open合并成立的厂商团体。
开放团体于1998年首次发布X11R6.4。为了确保X开发上的资金，所以X11R6.4偏离传统的自由许可条款，进而引起争议。新条款阻碍了许多项目（例如：XFree86）采纳它，甚至包括一些厂商。在XFree86以分离相威胁后，X11R6.4于1998年9月在传统许可条款下发布，而开放团体的最后一个发布是X11R6.4 patch 3，即第三度发布的补强程式。
=== X.Org ===
1999年5月开放团体组建了X.Org。X.Org指导了X11R6.5.1之前的版本发布。在此期间X的开发死气沉沉。2003年，随着Linux的流行X被大量安装。但是X.Org几乎无声无息，活跃的开发由XFree86承担。
=== XFree86 ===
在1989年至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和开放式开发的细节。
最终就像是X11R6.4许可证争议的回响，XFree86于2004年2月在更加严格许可证下发布了4.4。许多依赖X的项目认为该许可证无法接受，特别是它和GNU General Public License不兼容。这引起一场论战，许多人认为到了该对XFree86分叉（fork）的时候了，许多Linux发行版，包括Fedora、Gentoo都纷纷在最新的版本中使用X.Org基金会的发布代替XFree86。
=== X.Org基金会 ===
2004年年初X.Org基金会成立。这意味著X在管理上的根本转变。1988年以来X的管理者（包括过去的X.Org）都是厂商组织，而基金会由软件开发者领导，采用依靠外部参与的集市模式的社区开发。其成员身份对个人开放，法人成员则成为赞助者。X.Org还开始同freedesktop.org密切合作。
在XFree86 4.4RC2基础上合并了X11R6.6的修改，基金会在2004年4月发布了X11R6.7。Gettys和Packard使用了在旧许可证下发布的XFree86的最后的版本，但是强调了开放的开发模式并保持了与GPL的兼容性，从而带来了很多过去XFree86的开发者。
2004年9月X11R6.8发布。它加入重要的新特性，包括对半透明窗口的初步支持、很多复杂的视觉效果、屏幕放大和简图，以及与3D沉浸式显示系统（例如Sun的Project Looking Glass和Croquet project）集成的设施。而外观策略由称为合成管理器（compositing managers）的外部应用程序提供。
== 未来方向 ==
有了X.Org基金会和freedesktop.org，X的开发再度加速。目前和未来的版本都将是可使用的最终产品，而不仅仅是在其上构筑产品的骨架。
随着硬件操作被移入内核，几乎对视频硬件的访问将通过OpenGL（没有硬件OpenGL的系统使用Mesa 3D）和基层直接渲染模块进行。这由XFree86 version 4引入并出现在X11R6.7及其后续版本。
参考实现的架构被模块化，每个独立模块做为分离的项目维护。X11R6.9将是单体源代码而X11R7.0将有具备相同特征集的模块化源代码。。
== 写法、称呼上的误混 ==
“X Window系统”一般也简称成“X11”或“X”，而“X Windows”的称写方式（类似“Microsoft Windows”的称写）并没有被正式认可，不过这种误会的称写法却很普遍且经常出现（例如在UNIX-HATERS Handbook一书中）。
== 版本历史 ==