Jim Gettys,X Window系统的最初作者之一,递交了一篇非常有深度的社论,涉及X Window系统和它可能的将来。这篇文章很难概括,因为它包含了很多信息,事实,和提示,来适当地论述一切。你只要坐下来,花几分钟来阅读它。请注意,这篇社论的版权归作者所有。

双刃剑

                
作者:Jim Gettys
译者:王聪<xiyou.wangcong@gmail.com>

    在过去的几年中,我失去了X Window系统的踪迹,尽管我与它最初的开发有着密切的关系。我的兴趣从X转移了,曾经一时转到音频工作,后来又转到了Web

    为了我最近的工作,我需要商业生产的工具(比如微软的WordPowerPoint等),而不是一个程序员的系统。虽然X有设计良好的可得到的软件,但是这种常用的工具,像WYSIWYG编辑器,或演示程序,是不会以合理的价格得到的(例如通常有接近1000美元的价格),或者不会是我的家用电脑或笔记本可用到的。我对Bob Scheifler和我的创作,它曾经甚至也有像在WindowsMac上的那样的基本的软件,感到绝望。因为我想做完我的工作,而不是打一场看起来就会失败的战争。几年前,我开始在我的大部分工作中使用微软的桌面。

    我发现,让我吃惊的是,时代又一次改变了:个人电脑变得便宜,Linux得到了构建这样的工具的独立软件开发商(ISV)的支持,而且市场已经成长得足够大,因为个人电脑众多的市场价格,而且它运行在我的笔记本电脑上。我感到惊讶,吃惊,满足,对于这种几年前已经发生在X软件开发中的复兴。我已经厌倦于“蓝屏”,和让我的文件被锁的崩溃的编辑器。归功于社区的努力,我现在很感激地身处于颠倒我的根基的过程之中,尽管在那些日子中Windows 98拥有的平滑的GUI(图形用户界面)给我很深的印象(我正好在上面写这篇文章,还没有完成我的再次转变)。我感谢所有让这变成可能的人们。

    但是,虽然目前的Linux环境比过去开箱即用的Unix系统要好很多,但它仍有很长的路要走。

我们的油膏中有苍蝇。

用户化是演变的根本。

    对于生活来说演变是最基本的。对于计算机的进步来说,它也是最基本的,因为要在一个全新的系统上开始的工作现在是那么的巨大。  

    X Window系统的其中一个最大的长处是,它足够灵活来开发大范围的GUI软件。因为如此,这基本上使爆发于10年前的GUI之战成为可能,但是仍然允许它长期的演变(或许和它的生存)。

    我们已经看到了交迭的窗口管理器,铺瓦片式的窗口管理器,GUI看着就像“下一步”的界面,就像微软的Windows那样,还有很多其它东西(包括一些新的让X看起来像一个局域网上的视频游戏(a video game on steroids)。判断这是好是坏留给读者作为练习。)。这种力量,很不幸,也是它最大的弱点。

    10年前写的X应用程序在10年后仍然能运行,不用任何修改,而且在一些系统上,甚至不需要重新链接(或者从一个多年没用过的系统上通过网络运行)。其中一些基本的应用程序已经有10多年了,看看吧。它们是在一台佼幸有2M内存的VAX机器上开发的,甚至通常在有用的开发工具存在之前。一个被广泛使用应用程序(xterm)甚至在X本身之前(一两个月);它现在已经超过14年了。或者你想要的陈旧的应用程序已经好几年没被碰过了,而且使用的是一个陈旧,丑陋,看起来一点也不像你想要的开发工具。

    很多/大部分“开箱即用”的,在X自由的核心中的X工具,需要认真的重新工作来让它们进入90年代;许多CDE的替代品,甚至是在保持Linux吸引力的条款下可以得到的CDE,并不是特别地好,还很庞大。我称赞GnomeKDE对重写/替代这些旧的工具所做的努力。

    但是如果Linux/Unix/X曾经打破这种对于技术狂人们,程序员们和低端服务器来说非常合适的系统生境(the niche of a system),XGUI界面就会成长为你的祖母也能使用的东西,而且成长迅速。(我的母亲,作为你也能达到的非技术的人员,在75岁时还学习使用MacX现在比一些使用它的人们还要老。)

    然而,终端用户真地,真地,真地想要应用程序彼此相似。每当我使用AppleMicrosoft的桌面时,我当然也感激这种一致性,尽管我自己是个程序员。它使学习新的,或重新学习那些偶然用到的应用程序变得更加容易。

    但是让一千朵花盛开才是重要的,而且在X早期的开发中是绝对至关重要的,对于LinuxX来说有真正地变革性的冲击。它必须提供一个可以和其它系统相抗衡的,或比它们更好的用户界面,而且用户界面必须能够进一步发展。我想让这些运行在角落里旧机器上的,我用你构建的新GUI安装的应用程序,能够与它三年或五年后的样子相似。

    另一方面,我们将再次面对同样的问题,即使一个单一的GUI风格和(或)工具包统治X这一代,如果我们想让这种GUI随时间改进。对于X,在某种程度上,这的确是比Windows更困难,源自它的网络本性。你可能需要用一个好几年没有通过网络更新的系统。在这种情况下,旧的共享程序库永远不会升级到新的。

    X被设计有一个“窗口管理器”和应用程序之间清晰的分隔。这允许X窗口管理器被构建的范围宽广,包括像Microsoft Windows,“下一步”和其它X独特的窗口管理器的东西,包括许多很漂亮的新东西。很明显,我们在尝试让这种实验成为现实和窗口管理方面胜利了。

    还有几个其它的重要的设计问题,作为X应用程序的GUI风格只是局限在窗口管理器方面:

    X的资源是另一种在允许跨越时间和不同工具包的定制方面的尝试,但是历史上不如窗口管理器那样成功。这种方法被人们接受多少(这种观点),GUI战争的结果是怎样,我不清楚。无论如何,我们都需要一种单一的用户化机制,它能够跨越工具包和时间。

    匹配GUI风格的困难性,在很大程度上能被共享的工具包库解决,它也能在应用程序中隐藏一些风格问题,也能处理转换应用程序之间的互相作用,我希望,还能分享一种单一的用户化机制。

    那么,我们怎么解决这个问题,并且提供一种令人满意的“开箱即用”的体验呢(为了你的祖母)?不必在你扔掉不用的东西的时候也扔掉了你的宝贝(失去X特有的,允许构建那么多GUI风格的延展性,而且允许长期的发展)?做了这些我们就能在今后5到10年内不必再全部重新做吗?当安装一个软件时,我不必去编辑某一处的一些晦涩的配置文件吗?

    此刻,不论好坏,大多数商业的X软件都是基于Motif的。在短期内,很多/大部分商业应用程序将会以GUI风格抵达Linux,无论我们是否喜欢它。我从来没有喜欢过Motif(庞大,浮肿,缓慢而且不很漂亮)。一种解决方法是(对于应用程序和工具包本身)去迎和那种风格导向,而且就用它来完成。但是良莠不分,我很难把这称为一种长期的解决方法。

    但是我们怎么通过工具包来实现一种甚至只是接近的统一风格?

    我坚信,在人们构建的多种多样的工具包中,必须要有认真的同等重要的用户化工作(在一些工具包中有时称为“主题”),那样我才能选择我喜欢的风格,而不是让一些应用程序看起来只是一种GUI风格,而其它的则是另一种不同风格。这种用户化也有助于解决国际化的需求和使用不便的人们的需求(像你的「祖」母亲那样的需要屏幕上的大字体)。

没有一种“真正的方式”

    你的信仰不是我的信仰。今天一种语言的工具包会被明天另一种语言的工具包取代。五年后的风格将会与今天的风格不一样。一种尺寸不能适合全部。(One size does not fit all.

    你将不用为了N个不同的工具包,把数千个存在的应用程序重新构建来遵循这种统一的风格。那些不能从历史中吸取教训的人注定要去重复它。看看GUI战争从哪里得到了OpenLookMotif

    所以,我相信任何不允许全用户化,或不能被定制成其它工具包默认的风格的工具包,都应该被认为是不完整的。所有的工具包都应该是能够配置成贴近其它风格(包括将来的风格)的。作为所有未来X开发工具的缩影,人们越早接受这种前提越好,我们的悲痛也将会越少。

    到那时,今后五年或十年,你将能使旧的应用程序(可能在角落里你好几年没有碰过的旧的网络机器上)拥有一种至少和你正在开发的,真正好看的新GUI风格稍微相似的风格(而不是今天让人吃惊的新旧应用程序之间的不协调)。

    当然了,我们将会发现一些GUI习语很难或者不可能去对应一种不同的风格,但至少大多数应用程序将能提供同样的基本风格,而不是那些本质上全部是用户界面的极少数应用程序(比如图形化的编辑器)。

    GUI用户化方面需要做重要的工作,特别是当新的应用程序被安装,需要做重要的工作和通过窗口管理器来标准化时。手工编辑令人费解的.rc文件,来把最近的我安装的应用程序加入到一个开启菜单中,不是我说的“用户友好”的意思。我应该可以改变窗口管理器,而且能让应用程序变化来匹配。

    所以我们最好恢复在客户端交互通信转换(ICCCM,Inter-Client Communications Conventions)方面的重要工作。只有那样应用程序,即使是用不同的工具包开发的,也能很好地互相运作,而且某一种(一种单一的更好)资源机制本质就是为了用户化。

模块化

    我们也应该去发掘X的一个长处,它不充分地在多数存在的应用程序中被发掘:在一个子窗口中内嵌一个应用程序的能力,应该常规地去发掘,而不是只是通过窗口管理器。任何简单的文本窗口都应该能成为我最爱的文本编辑器,而不会又是一个不同的,带着我不喜欢或不知道的附件的编辑器。软件应该被设计成模块化;我应该能把任何应用程序嵌入到我自己的之中去。

    工具包越早地允许我把我的工具轻松地嵌入到一个应用程序中,我就能越早地让我的编辑器(或其它工具)成为我想要的,而不是荒谬的,脑死亡的,我不想要的,不需要的,不知道怎么使用的那个。一个工具的实例或许可以同步地去处理很多应用程序,而不消耗很多系统资源。相反,作为一个应用程序开发者,那意味着能够写更少的代码去构建我的应用程序。

    这是唯一的方法,去避免庞大,臃肿的应用程序,关于它,比如说我面对每个应用程序与其它不同的文本编辑器。它还意味着我应该能在旧的应用程序中使用新的我最爱的工具。

WIMP界面并不是未来

    音频在现实世界的应用程序中变得更加普遍。X是网络透明的(network transparent);应该有一台模拟的音频服务器。相信我,如果它是一台独立的服务器,而不是X的一个扩展,那是最好的;原因对于这条信息来说太长了。已经有几个构建的原型了(包括我帮助构建的一个);一个应该具有实际内容并且变成“标准”;否则你的网络透明的窗口系统将会非常安静。互联网最终会变成无处不在的,所以如果目前当地音频仅有的形势继续下去,那你已经在第一地点失去其中一个关于X是什么的要点。

    任何口味的被Windows作为象征的WIMP(Windows, Icons, Menus, and Pointing)图形用户界面,都不是最终的世界。GUI可能会成为电脑用户界面的主流。徒手的(hands free)界面已经变得相当有趣,归功于最近在语音识别方面的进步,更快的机器和便宜的存储器。我们中的一些人(比如Bob Scheifler, Keith Packard, Richard Stallman和很多其它人)已经被迫进入全新的语音识别的世界,去控制他们的应用程序,因为腕神经综合症(carpal tunnel syndrome)。语音识别技术已经进入民众的零售市场,而且将会继续改进。用户界面必须在语音识别系统中可用(不必去翻新每个应用程序)。虽然Xt拥有授予权利的工具让这种帮助程序去构建,但是其它工具包可能没有,而且工具包开发者需要把这作为一种目标接受。如果我们想要一个Linux/X的零售市场,就应该有一个单一的工具,而不是彼此不同的一个工具包。

    除徒手的界面之外的,下一个必然的阶段是不用看(eye free)的用户界面。这里,我是说不用看就能使用很多/大部分应用程序的能力。我想在我的车里使用网络(“转到波士顿交通的页面;给我读一下那一页”),但是我一定也想把我的手放在方向盘上(那是为什么我的手机会造成交通事故)。通过适当的使用和/或增强的ICCCM转换,通过对X能够以非“比特”的形式得到一个窗口的内容的可选性机制的充分发掘,构建能够实现不用眼睛使用很多/大部分GUI应用程序的X工具包,应该是可能的。

    这种工作也将会使一类新的设备和应用程序成为可能(我喜欢看到Linux运行在一个200MHZ手持设备里的两个AAA元件上),那里键盘甚至根本不合适,但可能有一个屏幕,它不是你说大的那种。我喜欢能够在新的环境里使用很多应用程序而不用重新编写。盲人们也将会因为这种工作而感谢你,即使做它是出于自私的动机。随着用户基数的增加,残疾人访问的需求也变得越来越强烈(而且翻新很痛苦)。WindowsMacOS都把这拖后了,而且翻新这种需要的功能存在困难。从MicrosoftJava易用性工作中能学到很多,这应该加进新的X工具包中。再说一次,我们需要一种单一的机制,而不是每一个工具包一种,只要有可能。

    我们应该在展望未来同时回顾过去。

网络整合

    X基本外观的一部分和Web的是相近的。你应该能够在任何地方,任何时间通过网络的任何地方完成你的工作。

    从用户的角度去看,本地资源和网络资源应该只有很小的或者没有差别(与“Web应该成为操作系统的一部分”很不同的句子)。所以不要假设那,只是因为一个特定的应用程序已经有了它自己的X GUI用户界面,在将来它也应该有一个X GUI。通常,应用程序很好地被整合为Web的一部分,从任何桌面,在任何地方都可以得到,而不是作为独立的应用程序。随着Web功能的完善,越来越多的应用程序应该能够以这种通用的时尚来构建。

    应用程序开发者们在构建任何应用程序时都应该问问自己,使用Web及其技术来实现是否会比在X上更好。有时是,而有时不是。但如果你没有问自己这个问题,你可能会作出错误的决定。

Java乱谈

    在我继续胡说时,我应该把另一件事纠正一下。虽然我从来不相信扩展语言是十年前NeWS的拥护者声称的万应药,我自己关于NeWS的最大问题就是它把PostScript作为扩展语言的选择。(我自己是一个古老的Forth程序员;我理解这种语言的长处和短处。)James Gosling(NeWS的作者)吸取了教训。他的语言叫做Java。他这次甚至严重担心这种保护模式。至今你可能已经听说过他和它了。:-)JavaX世界中怎么发挥作用?只是客户端方面吗?一个X的扩展?达到上面提到的其它目的?我不确定。但很值得去思考。

版权

    版权法是服务于让作者因他的努力能够得到回报的社会目的,所以鼓励智力创作。版权一个独特的性质就是那,实际上,你在写版权时你也在写法律。没有版权法,很明显,任何类型的智力成果都将会少得多,因为作者需要吃饭。

    但是回报有很多形式:满足感,从别人那获取发行版,创造公平竞技场(leveling a competitive playing field),等等,而不是金钱的。我对任何人决定他们的努力应该得到金钱的回报没有疑问。对软件收费不是坏的;它可能是唯一一种资助我们需要做的活动的方法。这是基本的经济。

    作为X版权的最初的起草者,我已经给这一些思考。在1986年,我的分析是,X的版权是达到X项目的目标和Athena项目(在本科教育中探索计算机技术)目标的最可能的方式:我们需要的是应用程序;没有它们,基础技术就没有价值。我认为,直到人们倚赖的工具开始使版权和许可证产生变种——那意味着任何应用程序都可能要收版税——X才算成功。这时,只有少数工具才有足够的质量去构建重要的应用程序。这显然不再是我们想要的情况。

    我不是GPL的狂热者。它可能有抑制商业支持和增进的体系效应。例如,卖主可能看到打错误补丁和/或副修值得投资的增进,如果他们能够暂时获益。从长期来看,在X的下一个版本中没有必要去修补同一个错误或重新整合这种增进,它一般会导致大部分的这种开发努力退还给X社区。但是可能会有(L)GPL最适合的境况,也会有更少约束的版权(比如XBSD)更适合的时候,而且为了一个商业软件卖主,一个严格约束的版权可能会更合适。什么更适合主要是作者的意思(不幸的是,一些作者在发布之前从来不考虑版权)。

    我们以彼此的肩膀为基础。因此,面对Unix/Linux和开源运动,工具包(和库)问题变得复杂,因为我们倚赖的版权和/或许可证可能影响到我们对自己的智力作品拥有什么样的权利。因此我关心那些不限制我能对我的智力成果做什么的基础体系。

    软件作者需要了解基本的版权和发布许可证,不论是为他们自己的软件还是他们倚赖的软件。

    考虑到X的先前历史的体验,和基本的Linux系统环境的版权/许可证,我强烈坚信任何“标准的”工具包都应该在X/BSDLGPL下没有阻碍,或者征服我们想要而且需要的应用程序的开发。

这是一个乌托邦梦吗?

    所有这些都是困难的。它可能听起来有点儿乌托邦。选择一个多数自然人都能使用的“缺省”风格是很难的。不同的群体将不得不去合作(比如LessTif, Enlightenment, TK, KDE, Java toolkits, Gnome)。资源定制,软件安装和互用性的ICCCM扩展都将会需要“标准的”工作。有很多事情要做,在构建一个GUI之上,(我们)已经知道那很困难。构建工具来建立不同的表现一种统一GUI“风格”的工具包定制,将会是困难的,痛苦的粗活。而且终端用户必须不用成为一个X资源专家也能配置风格。对于其中一切,它都将是一种挑战。但是为了用户界面能够进化和成功,它也是绝对本质的。我所见的在这个社区中的力量,使我坚信它能够完成。

    或许我们会拔出我们的剑,互相打斗一番,最终掉落到剑上,就像在10年前的UnixGUI信仰大战中发生的。而且GUI基本论者会再一次获胜。到过那,做过那,我保证它受伤了。Linux/Unix/X将继续在那种生境中,永远不会成为它应该成为的那样。

    比起剑来,我更喜欢犁头,我本人。

Jim Gettys, 十月30日, 1998