Java秘史:隐藏在SWT/Swing背后的故事

译注:本文来自straight_talking_java@yahoogroups.com讨论组,已经是一 年多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自 他在IBM的一个消息来源。SWT和Swing的论争我见过不少,Netbeans和Eclipse的 也同样多。译者翻译此文并不是要激起什么争执,也不是支持哪一方(虽然我的 确是站在SWT一边的),更不是要攻击Amy。我最重要的理由是,这是一篇有趣的 文章。里面有内幕、线人、公司政治、垄断巨头、美女、商界风云……足够拍一 出电影。有趣,这就够了。不过此文反映了IBM对Swing的看法和SWT的由来,还 是有一点营养的。

要想弄清楚为什么一切都被弄得如此混乱,要从几年前只存在AWT的时候说起 。SUN当时已经建立了一套基本的可移植控件类,这些类映射到不同操作系统上 的原生窗口组件(native widget),显然下一步应该继续增强这套模型,除了 初始的CUA 92组件(文字、按钮等等),再继续加上表格、树、记事本、滑块等 等……当时的AWT还满是漏洞,远不能称为可靠,还需要SUN的coder们去修补。 SUN的developer们如Graham和Otto总是习惯于公开把他们的bug归咎为操作系统 的差异,比如“Windows和OS/2的焦点次序不同”或者“在……之间Ctrl-X的行 为不一样”,以及其他苍白的托辞,好让批评的火力从SUN太早释出代码这个问 题的真相上移开。然后Amy Fowler来到了SUN。不是我大男子主义,Amy是个聪明 的美女,大多数呆头呆脑只懂技术的开发人员都要被她捏在手里。Amy来自一家 Smalltalk公司,叫做Objectshare,在那里她负责搞UI类库。

跟Java相比Smalltalk的历史有些悲惨,曾几何时有3家庞大的Smalltalk公司 ——IBM、Parc-Place和Digitalk。在90年代初期3家公司的市场份额大致相等, 生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的设计(即 Swing的设计),IBM和Digitalk则采用原生窗口部件(native widgets)。后来 IBM压倒了另外两家,因此他们打算合并成一家,假设叫做Parc-Place Digitalk 。随后当他们试图将他们的产品融合到一个叫做Jigsaw的计划中时爆发了一场大 战,计划由于政治原因失败了(开发人员实际上已经能让它运转起来),就因为 原生和仿造两派的死战。

Amy赢得了精神上的胜利,不过在IBM我们赢得了他们所有的生意,因为这两家公司在一整年里除了吵架什么都没做。当尘埃落定之后PPD(Parc-Place Digitalk当时已改名为Objectshare,跟Windscale改名为Sellafield的原因相同 ——让人们淡忘之前发生的灾难)的股票价格从60美元掉到了低于1美元1股。他 们因为伪报收入被NASDAQ摘牌,从此消失。此时SUN正走上与PPD类似的技术方向 ,于是PDD的技术人员都把他们的简历投到了SUN。Amy被雇佣了,她承诺通过轻 量级方案解决所有窗口组件的问题,因此说服SUN管理层让她当了GUI开发部门的 头头。她是拿着“这里原来的人都搞砸了,我是来解决的”的钥匙进来的。随后 Amy雇佣了所有她过去在Parc-Place的旧朋友,让他们来开发Swing。

显然Swing应该做的是仅仅成为一个绘制框架,给那些希望创建地图软件或者 绘图软件的人们使用,无论如何,应该围绕AWT类库来建造它,按钮之类的东西 仍然交给AWT来管。SUN的人比如Philip和Mark已经让AWT能够处理表格、树和记 事本(notebook,?),所以Swing的方向应该说很明显了。但那些毁了PDD的人 不干,他们非要把一切都弄成轻量级的。由于SUN管理层的无知,再加上Amy无情 的政治手段,造成了我们今天所见的混乱局面。Amy还使SUN相信Swing是作为 Mozilla项目的一部分与Netscape联合开发的,事实上这只是她的宣传伎俩。

在IBM,我们从第一天起就憎恶Swing。庞大、满是错误,而且难看至极。原 先我们的工具如VisualAge for Java都是用Smalltalk(用的是原生窗口组件) 写的,所以当我们将这些工具向Java代码库迁移时,我们需要一套窗口组件。 IBM这边的开发人员都是原来搞Smalltalk的那一批人,我们对管理层要求用 Swing来构建WebSphere Studio工具都非常不情愿。Swing是个可怕的充满缺陷的 怪兽。

在WebSphere Studio最初的预览中,当与Microsoft Visual Studio作对比演 示的时候,我们所有的客户都讨厌它,就因为它的外观,而不管它的功能有多强 。大多数消费者都不会买一辆让人觉得难看的车,哪怕这车有一台出色的引擎。 因此我们开始了一个项目,是把我们的Smalltalk原生窗口组件移植到Java上去 。这个项目是加拿大的Object Technology International小组做的。这个项目 获得了成功,被运用在在我们发布的VisualAge Micro Edition产品中,VisualAge Micro Edition后来成为J2ME开发方面一个非常成功的IDE。但是OTI 的人发现,Swing在读取Windows事件方面有极严重的缺陷,我们甚至无法进行 SWT(S开始是Simple的缩写,不过后来变成了Standard的缩写)和Swing间的互 操作。他们在读事件队列的时候用了一种可能留下内存漏洞的方式,所以我们不 得不采用我们自己的查询Windows事件队列的循环,以纠正这个错误。

我们试了一次又一次让SUN修复这个错误,但Amy就是听不进去,所以我们才 决定SWT和AWT/Swing不能共存。我们甚至在SWT中定义了自己的Point和 Rectangle类——整个工具包对AWT或Swing都没有任何依赖。我们把这个工具包 放到了Eclipse中,这是一个工具平台,它的总体设计目标就是要战胜Micrsoft 和Visual Studio。Eclipse是开源的,所以任何人都可以在上面构建自己的东西 ,我们已经有像TogetherSoft和Rational这样的公司移植到了上面。我们的竞争 者是Microsoft,所以我们所有努力和注意力都是从正面针对Microsoft。

不管怎么说SUN对此非常不满。他们的Netbeans跟Eclipse做的是相同的事, 因此他们向IBM高层抱怨。他们认为SWT是要将你绑到Windows上,这纯粹是胡说 ,因为SWT能通过GTK在Mac/Linux上运行,以及一大堆嵌入式平台。他们拒绝让 Eclipse获得Java认证,因为里面有原生代码,所以Eclipse产品必须很小心地使 用单词“Java”这个SUN的商标。Eclipse甚至不能把自己称为一个Java IDE,SUN已经威胁过要采取法律行动来制止IBM在任何时候把Eclipse称作一个Java IDE。结果之一就是IBM在Eclipse上创建的GUI设计工具,允许你构建Swing/AWT GUI,却不让你往里面拖放SWT窗口控件。

将SWT从Eclipse中分离出来是完全可能的,只需要把DLL抠出来放到路径中, 并使用窗口组件工具包来给你的银行或者保险或者其他什么应用程序开发GUI。 再次说明,我们无法更进一步,因为SUN把我们的双手绑上了。虽然作为Eclipse 开放源码协议的一部分,CPL允许我们提供这样的解决方案,但SUN已经很清楚地 表明他们不希望我们这样做。对于用户社区来说,无论IBM和SUN的最终动机是什 么,我发现有一点总是很有趣:喜爱Swing的人总会说“一旦你花上几年时间去 掌握它,你就能正确地使用它”,这基本上是他们在试图证明和维护他们辛苦得 来的用途有限的专门技术;而SWT的拥护者们说的是“哇,这真快,这跟原生的 一样,还可以用XP皮肤……它还又轻又小”。有一句话是我喜欢的,我们的一个 用户说,Swing就像Java决定不通过操作系统来实现原生的IO,而是通过磁头马 达API自己来读磁盘的扇区。Swing基本上就是这样的,它拿着个底层的“paint (Graphics)”方法,自己来绘制所有的窗口组件。

时间: 2024-10-31 09:01:30

Java秘史:隐藏在SWT/Swing背后的故事的相关文章

使用Java Web Start部署SWT应用程序

开发非常漂亮的客户机端的Java应用程序 简介:在过去几个月里,标准窗口小部件工具箱(Standard Widget Toolkit ,SWT)不断地取得进展,并汲取越来越多Java 开发人员的集体智慧.在 SWT应 用程序开发过程中的某一阶段 - 通常是在基本原型运作之后 - 开发人员开始 关注部署过程.与传统的 Java应用程序不同,SWT 应用程序需要在应用程序运 行之前装入某些特定于操作系统的库.虽然正在进行的这些库的部署和维护似乎 是件头痛的事,但是请放心,有一种方案可以解决这种问题,

阿里巴巴开源Java编码规范背后的故事

(作者:无独 | 校对:孤尽) <阿里巴巴Java开发手册>(下称<手册>)凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师,能够帮助更多的开发者少踩坑,杜绝踩重复的坑.  手册下载:https://yq.aliyun.com/articles/69327 此手册从构思到现在的最新版本,历时一年半,历经无数次内部针锋相对的讨论,迭代105次.可以说手册中每一个条目的背后,都有一个很长.很精彩的故事.为了让广大开发者更加深入地了解到项

营销数据库是隐藏在动态内容背后的大脑

用个性化的营销邮件吗?本文将告诉读者如何让企业的网站和社交网络更具个性化. 许多公司多年来一直在让自己的营销电子邮件显得更具个性,而且理由似乎也很充分.据Jupiter Research显示,与营销内容相关的个性化邮件,比普通广播发送的邮件给企业带来的收入多十八倍,并且,如果针对特定用户群而制定邮件发送内容,那么销售机会还会增加20%. 然而,个性化大多只停留在邮件的领域,当收件人点击邮件之时,邮件的生命周期就会在通用网页上戛然而止.出现这种情况,部分原因是由于技术的限制,但是随着越来越多的网络

如何让隐藏在大数据背后的价值发挥出来?

对于普通人来说,大数据离我们的生活很远,但它的威力已无所不在:信用卡公司追踪客户信息,能迅速发现资金异动,并向持卡人发出警示;能源公司利用气象数据分析,可以轻松选定安装风轮机的理想地点;瑞典首都斯德哥尔摩使用运算程序管理交通,令市区拥堵时间缩短一半--这些都与大数据有着千丝万缕的关系. 牛津大学教授维克托·迈尔-舍恩伯格在其新书<大数据时代>中说,这是一场"革命",将对各行各业带来深刻影响,甚至改变我们的思维方式,但同时它也引发"数据暴政"的担忧. 如今

宝宝树:讲述大数据与母婴背后的故事

文章讲的是宝宝树:讲述大数据与母婴背后的故事,宝宝树是中国最具影响力的母婴服务平台,为孕期和孩子在六岁以内的父母提供知识.交流.记录.购物等多元化服务.但宝宝树事实上还是一个名副其实的大数据企业.宝宝树公司COO魏小巍表示:"大数据是宝宝树最宝贵的财富之一,如果没有高效的大数据分析作为支撑,宝宝树的很多业务都难以高速前进." 业务发展的驱动力 大数据的关键并不是比谁拥有的数据量大,而是如何通过最有效的数据分析手段读懂数据背后隐藏的那些信息,对业务提供指导.宝宝树正是利用大数据将社区流量

ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事

从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCorsAttribute特性.但是整个CORS体系不限于此,在它们背后隐藏着一系列的类型,我们将会利用本章余下的内容对此作全面讲述,今天我们就来讨论一下用于定义CORS授权策略的EnableCorsAttribute特性背后的故事. 目录 一.CorsPolicy 二.CorsPolicyProvider 三.CorsPolicyProvid

十三种编程语言和它们名称背后的故事

如果玫瑰不叫玫瑰,芳香是否如故? 程序员们普遍认为,软件开发工作当中难度最高的一项任务就是为成果命名.尽管这种情况并不多见,但命名过程中尤其令人头大的就是面对着一种新型编程语言. 在一种新型语言的设计工作宣告结束后,随之而来的命名过程往往遵循以下几个步骤:以语言本身的特性或者描述为名,采取首字母或者缩写形式(例如BASIC.COBOL.TCL以及LISP);从现有语言当中派生而来的新名称(例如C++.C#以及CoffeeScript);又或者直接取自某位对数学或者计算科学作出卓越贡献的伟人(例如

加密程序 PGP 背后的故事

我不知道有多少人听说过PGP(Pretty Good Privacy):这是一个加密程序,被广泛用于对文件和邮件进行加密.PGP本身是收费商业软件,所以现在最常用的是开源免费的GPG(Gnu Privacy Guard)软件(它使用OpenPGP标准,可以方便的进行PGP加密和解密). 这次我想和诸位分享一下PGP背后的故事,这可是一段传奇啊..... 美国有个软件工程师叫Philip Zimmermann ,同时也是一名活动家.他发现早期的互联网完全没有任何加密,用户之间传递的信息可以被任何人

揭秘Pokémon Go背后的故事:这款游戏不过是AR能做到的冰山一角

◆ ◆ ◆ 导读 在你去学校的路上,一个野生的小火龙出现,而你只要扔几个妖精球,它就可以是你的了!你会停下来抓它吗? 任天堂猜你一定会.不止如此,他们还打赌你为了能在现实世界中看到口袋妖怪已经等候多时了. 一款千呼万唤始出来的游戏,一上线就火爆全球.刷屏了你的各个社交软件和新闻.Pokémon Go到底有哪些过人之处? 大数据文摘今日揭秘这款火爆游戏的相关技术以及研发公司Niantic Labs背后的故事. 这款游戏的上线给你的生活带来的绝不止皮卡丘和小火龙,它还代表着增强现实技术(之后用AR表