CNET科技资讯网7月1日国际报道 十年前,Sun 将Java搬到世人面前,这种软件最初协助企业建立思想前进的美誉,后来则扩散到电脑业的几乎每个角落。James Gosling 则是这项技术背后的主要推手。
1990年代初期,Gosling 带头发展了代号为Green 的项目,最后演变为Java。Java 的基本理念是创造一种程序,可以在不需修改情况下执行在各种运算设备上。例如,一支具备Java虚拟机器(virtual machine)的手机游戏软件也应该可以在别的手机上使用。
这项技术过去十年来面临许多挑战。早期的合作伙伴微软发现Java程序的通体适用性对Windows 不很有利,于是稍做改变、另创Windows 版本的Java,引发七年的官司。
由于消费性设备、PC及服务器需要有不同的Java,Sun 一直找不到适当方法把Java掌控权分享给其他人,以致于包括IBM 在内的许多公司不断呼吁Sun 把Java的主体之源代码开放出来。
尽管如此,Java已经在运算业界站立脚步。Sun 首席执行官Scott McNealy 可能不免还是会发布冠冕堂皇的演说,但在星期二的Sun JavaOne 会上他的一番话却十分中肯,他说:“七、八、九年前的JavaOne 演说现在真听不下去,我们那时真是太小看它了。我们根本不知道这项技术要做什么。”。
Gosling 全程参与了JavaOne 本周的活动,现在的他一头蓬乱的白发,一身穿着牛仔裤、T 恤和Birkenstock 鞋。“他看来像是一个老嬉皮,”Gosling 的女儿在周二大会的影片中现身说道,惹得这位五十多岁的Java教父在台上满脸通红。
CNET 新闻网站周二请Gosling 畅谈他的Java理念。
问:在设计Java之初时你心中有想像过它会变什么样子吗?
Gosling :在Green 项目时期,我们曾经大谈了许多长程愿景。我们曾写过一本使用情境的小册子,许多Java设计都是依据这些情境来发展。我觉得那比较像是科幻小说的作法,你其实不知道世界会变什么样子。你可以任意预测技术的发展,但想像和相信它实际会发生,两者之间有很大的距离。我非常相信摩尔定律会如实发生,而把一个个点连成一个网也很容易。
我非常有信心许多科技一定会那样发展,而问题最后来到安全、稳定性及可携性上。我们参与回答这些问题的大计划,最后的结果一定会让众人出乎意料。
问:但你的Green 项目的重点一开始不是只是在消费性设备上吗?
Gosling :项目初期我们花很多时间和各界人士谈过,我们看到问题发生在消费性电子及新兴的手机及嵌入式控制系统上。我们和电梯、火车头、电力控制系统及汽车零件制造商谈过。我们也和VCR 和电视机开发商聊过。Green 项目一开始我们决定要有个原型(prototype),我们必须要把心力集中在一点上,结果我们选上了消费性电子,因为这样比较有趣。
许多人都觉得很有意思,但之后我们开始自问是不是能把它用在自我支持的用途上?差不多同时间时代华纳为全方位服务(full services)网络公开招标,那正是我们梦寐以求的事──网络连到家庭、在网络上传递语音和影像、互动内容等等之类的事。“Yes !这就是我们要的、我们的目标!”于是我们就跳进来。
问:那差不多是在互动电视的发展初期吧?
Gosling :没错,那真是一个具有远见的企划书。很多人都说:“我们也想这么做。”
时代华纳的计划因为一些理由后来变得十分奇怪,我们最后没有拿下标案。现在想起来,我还很庆幸我们那时输(给SGI )了。SGI 后来进去,花了不知多少钱在做那个单子,但拿不到什么钱。
问:你认为Java是用在这种狭窄领域上的技术呢,还是可能在整个电脑业开枝散叶的东西?
Gosling :我们并没有计划要把它推到整个业界。但我们看到的是整个产业都有类似的问题。每个系统内都有电子控制器,但却有着严重的相互操作性问题。所有东西都在相互整合,这事实在不容小觑。就像你站在暴力赛车(demolition)场外看到所有车子都在朝竞赛场中心开去,势必一定会撞在一起。
问:所以Java解决了相互操作性的问题。但微软另辟蹊径创出了.Net,引发了更高层的兼容性问题。有什么方法可以把.Net 及Java整合成一种技术吗?
Gosling :某种程序Web services算是一个,它就像一座桥梁。但你不能把不想融在一起的东西硬融合在一起。微软很明显地就是想要走自己的路,他们一向喜欢标新立异。他们曾当过Java社区里非常杰出、可爱的成员六个月到一年左右,后来他们又认为这样不好。
问:那是发生在1995还1996年?
Gosling :我想应该是在1996年。但共同合作需要大家都有这个意思。对微软而言这是一个很长的教育过程,他们好像不太喜欢这种方式。他们好像跟你走更近一点,例如我们和他们做了不少很棒的东西,但其实彼此间还隔了一个手臂之遥。但我们的确有共通点,像是Web services 或相互操作性。
问:你们不能把C#写成的.Net 程序加上Java虚拟机器(Java virtual machine)上吗?
Gosling :我们的差别在于他们大量使用这种不安全的方式,但我的信念之一是不应该用不安全的方式。
问:什么叫不安全?
Gosling :源代码有分受管(managed )的和不受管(unmanaged )的。受管源代码是你可以确保安全与稳定性的,而不受管的源代码你无法保证什么事。有时正确行为也会发生内存损害,程序运作十分不容易分析。C 程序(一种不受管程序)可能莫名其妙就挂了,最后造成安全上的重大影响。用C 语言你得要能假造事物的身份,但用Java,你绝对不可以说谎。
问:微软为什么会想加入Java Community Process(JCP)?
Gosling :我不了解,你可以问问(Sun 首席技术官)Greg Papadopoulos。
问:你希不希望双方能回到当初的蜜月期状态?
Gosling :我很期待看到他们和JCP 其他成员合作。
问:你们刚把Java应用服务器软件以称为GlassFish 项目开放源代码。你们是不是也有可能把Java标准版(Java SE,Java 的基础)以开放源代码发布?
Gosling :或许。只是我们过去为Java SE 做的一切和开放源代码项目其实差不多。主要差别只是在于我们的授权要求要有测试。在做过 Java使用量大的领域的调查后,我们认为测试是非常重要的。但开放源代码界有人一方面说,我们愿意做测试,另一方面又说我们不同意测试。我们可能有一天会公开Java SE 的源代码,主要要考虑社区觉得怎么做比较好。
有很多事让我们十分紧张。许多人都有过JavaScript的经验,不同JavaScript就有着相当严重的相互操作性问题,对网页制作者来说是一大梦魇。如果你想在这种浏览器上执行,就这么做,想在那种浏览器上执行就那么做。Java界的人都得拿着JavaScript手册才能做事,真是太可怕了。
问:但在Java上,像BEA 等公司会加入一些东西使得Java程序只有在他们的应用服务器上才能执行。到头来Java也会变得不可携不是吗?
Gosling :没错,这的确是个问题。但至少,这还只是在特别功能上而已。Java有项套件命名(package naming)的工具。当你在用API 时,你得表明用的是公开标准的API ──像是Java等──或是某公司的专有API ──例如com.bea.你作为一个开发者就一定要十分小心。开发人员真得很在乎可携性,你每次用com.bea 你会觉得芒刺在背。JavaScript的一个困难就是你无法判断你用的是不是某个浏览器专用的功能。
另外,事情也会演变成某个应用伺器厂商具有一些想法,而大家都觉得不错,这个想法就会送到JSR (Java Specification request),那么这家厂商第二或第三版本也会是在标准的Java框架内。
问:难道不能在开放Java源代码后通过品牌名称来控制兼容性吗?像是要求软件在被充许使用Java名称前取得认证?
Gosling :这点我们做过许多讨论。Sun 是十分民主的公司,有人认为可行,有人反对,目前反对者多过赞成。
问:你是反对的那一阵营吗?
Gosling :我有时是站在赞成一方,不过我得承认我常反覆不定。
问:可否比较五年前后的Java技术发展?
Gosling :第一和第二个五年的主要差别在于Java已经变成许多大型、关键系统的中心。这就要非常保守了。当你的系统是一个每晚结算数百亿笔交易的银行系统时,小小一个bug 也会酿成巨祸。早期我们有很多异想天开的点子,但现在我们得考虑到哪些人会受到我们影响。我们每修补一个bug 就会对以前用些奇怪方法达成任务的人带来困难。现在一切都要思考周详才可以。
问:通过Groovy等项目,Sun 正在让Java及描述语言的世界更平易近人。但我坦白讲我不太了解这些程序语言和P 惠普、Perl或Python等描述语言有什么不同。
Gosling :你的困惑其实其来有自。世界上有太多松散的语言,提供给在不同人做不同用途。
当人们提到描述语言时,往往想到的是可以很快让开发人员把东西拼凑好,很快拿出去跟客户做demo. 程序的性能好不好、扩充性大不大,或是能不能建成一个大系统比较是次要考虑。但在Java设计上,我们不太在乎能不能很快让你写成一个程序出门去demo,我要在乎的是我能不能很快让你写成一个大型而扩充性高的程序。我们最后为止做了困难的决定。一般来说,描述语言在设计上很容易,但不是在实际的程序撰写上。
Java设计有二层:Java virtual machine(JVM )和Java语言。难是在JVM 及它以下的部份。如果你把描述语言用在JVM 上,你就能两者兼顾了。
问:所以你也这么做吗?
Gosling :是啊。所有Java函式库都提供Groovy开发的东西。Java应用也可以使用Groovy。他们可把Groovy sciptlet 包含在内。