十年前,Sun微系統(tǒng)公司將Java搬到了世人面前,這是首次協(xié)助企業(yè)建立具有前瞻性的思想的一款軟件,隨后Java迅猛擴(kuò)散,深入到計(jì)算機(jī)業(yè)的幾乎每個(gè)角落。這項(xiàng)技術(shù)的幕后英雄,就是本文采訪的James Gosling。
上個(gè)世紀(jì)90年代初,Gosling發(fā)起并領(lǐng)導(dǎo)了一個(gè)名為Green的項(xiàng)目,此項(xiàng)目最終演變?yōu)镴ava。Java 的基本理念是創(chuàng)造一種可以在不需修改的情況下執(zhí)行在各種運(yùn)算設(shè)備上的程序。例如,一個(gè)裝備了Java虛擬機(jī)器的手機(jī)游戲軟件也應(yīng)該可以在別的手機(jī)上使用。
過去十年,這項(xiàng)技術(shù)身經(jīng)百戰(zhàn)。早期的合作伙伴微軟發(fā)現(xiàn)Java程序的平臺(tái)無關(guān)性對(duì)Windows帶來不利,于是稍做修改,另創(chuàng)適合Windows的Java版本,從而引發(fā)了七年的官司。由于消費(fèi)性設(shè)備、PC及服務(wù)器需要有不同的Java,Sun一直努力想找到合適的方法與其他各方分享Java的掌控權(quán)。以至于到現(xiàn)在,包括IBM在內(nèi)的許多公司都在不斷呼吁Sun開放Java主體部分的源碼。
盡管如此,Java已經(jīng)在計(jì)算機(jī)領(lǐng)域站穩(wěn)腳跟。Sun首席執(zhí)行官Scott McNealy可能還是會(huì)發(fā)布冠冕堂皇的演說,但在上周二Sun JavaOne大會(huì)上他的一番講話話卻十分中肯,他說:“七、八年前的JavaOne演說現(xiàn)在聽起來真是寒磣,我們那時(shí)實(shí)在是太小看它了。我們根本不知道這項(xiàng)技術(shù)要做什么。”
Gosling全程參與了JavaOne上周的活動(dòng),現(xiàn)在的他頭發(fā)已經(jīng)花白,但牛仔褲、T恤衫和Birkenstock運(yùn)動(dòng)鞋的裝束始終未變。“他看來像是一個(gè)老嬉皮,”Gosling的女兒在周二大會(huì)的影片中現(xiàn)身說法,惹得這位知天命的Java教父在臺(tái)上滿臉通紅。
以下是Gosling暢談Java理念的記錄。
問:在Java的設(shè)計(jì)之初,你心中有想像過它會(huì)是什么樣子嗎?
Gosling:回想設(shè)計(jì)Green項(xiàng)目的時(shí)候,我們對(duì)長遠(yuǎn)未來大談了許多。我們曾寫過一本很多場景組成的小冊子,許多Java設(shè)計(jì)都是依據(jù)這些場景構(gòu)想出來的。我覺得那比較像是科幻小說的做法,你從來都不知道世界會(huì)走向何方,你可以任意預(yù)測技術(shù)的發(fā)展,但想象歸想象,和實(shí)際還是有很大差距的。我非常相信摩爾定律會(huì)成為現(xiàn)實(shí),輕而易舉地而把一個(gè)個(gè)的點(diǎn)連成一了快速傳播信息的網(wǎng)絡(luò)。
我大膽預(yù)測許多科技一定會(huì)那樣發(fā)展,當(dāng)然會(huì)只是存在安全、可靠及便攜等方面的問題。我們參與對(duì)這些問題的絕大部分給出答案,最后的結(jié)果一定會(huì)讓大家驚奇萬分。
問:最初,你的Green項(xiàng)目不是把重點(diǎn)放在消費(fèi)性電子設(shè)備上嗎?
Gosling:項(xiàng)目設(shè)計(jì)初期,我們花費(fèi)很多時(shí)間和各界人士交談,我們看到同樣的問題發(fā)生在消費(fèi)性電子設(shè)備、新興手機(jī)及嵌入式控制系統(tǒng)領(lǐng)域。我們和電梯、機(jī)車、電力控制系統(tǒng)的制造商及汽車界的工作人員交談過。我們也和VCR和電視機(jī)開發(fā)商交流過。在Green項(xiàng)目初期,我們決定做個(gè)原型,我們必須把精力集中在這一點(diǎn),我們選擇了消費(fèi)性電子設(shè)備,很大程度上是因?yàn)檫@個(gè)領(lǐng)域更有趣。
雖然許多人都覺得很這個(gè)計(jì)劃有意思,但我們還是疑惑是不是能把這個(gè)計(jì)劃用在自我支持上?差不多同時(shí)期,時(shí)代華納為全方位服務(wù)網(wǎng)絡(luò)公開招標(biāo),那正是我們夢寐以求的事──網(wǎng)絡(luò)連到家庭、在網(wǎng)絡(luò)上傳遞語音和影像、內(nèi)容互動(dòng)等等。“是的!這正是我們想要的,是我們?yōu)橹畩^斗的目標(biāo)!”于是我們就一頭扎了進(jìn)來。
問:那實(shí)際上是在互動(dòng)電視的發(fā)展初期吧?
Gosling:沒錯(cuò),那真是一個(gè)具有遠(yuǎn)見的計(jì)劃。很多人都說:“我們也想這樣做。”
時(shí)代華納的計(jì)劃因?yàn)楦鞣N原因后來變得十分奇怪,我們沒能拿下他們的標(biāo)。回想起來,我還很慶幸我們那時(shí)輸了。贏家SGI后來不知花了多少錢做那個(gè)單子,但沒得到多大回報(bào)。
問:你認(rèn)為Java是用在這種狹窄領(lǐng)域上的技術(shù)呢,還是可能深入到在整個(gè)電腦業(yè)的技術(shù)?
Gosling:我們并沒有計(jì)劃要把它推向整個(gè)業(yè)界,但我們看到整個(gè)產(chǎn)業(yè)在做類似的事,每個(gè)系統(tǒng)內(nèi)部都裝有數(shù)碼控制器。但是存在著嚴(yán)重的相互操作性問題,所有東西都在相互整合,這事實(shí)引起了我們的注意。就像你站在暴力賽車場外看到所有車子都在朝競賽場中心開去,一定會(huì)撞成一團(tuán)糟。
問:Java解決了相互操作性的問題,但微軟另辟蹊徑創(chuàng)出了.Net,引發(fā)了更高層的兼容性問題。有什么方法可以把.Net 及Java整合起來嗎?
Gosling:某種程序(比如Web services),就像一座橋梁。但是我們不能把不愿融在一起的東西硬往一塊拉。微軟很明顯地就是想要走自己的路,他們向來喜歡標(biāo)新立異。他們曾作為Java社區(qū)里非常優(yōu)秀而可愛的成員,可惜只持續(xù)了半年多,后來他們認(rèn)為這樣不好。
問:那是1995年還1996年的事吧?
Gosling:應(yīng)該是在1996年。共同合作雙方的意向。對(duì)微軟而言這是一個(gè)長期的教育過程,他們好像不太喜歡這種方式。他們貌似在跟你走更近,例如我們之間合作開發(fā)了不少不錯(cuò)的產(chǎn)品,但其實(shí)彼此間還隔了一步之遙。我們之間的確有共通點(diǎn),像Web services或相互操作性,都是很好的說明。
問:你們不能把用C#開發(fā)成的.Net程序上融入到Java虛擬機(jī)器中嗎?
Gosling:我們的差別在于他們大量使用這種不安全的方式,但我堅(jiān)決認(rèn)為不應(yīng)該用不安全的方式。
問:不安全?您的意思是……
Gosling:源代碼有受管的和不受管的之分。受管源代碼是可以確保安全與穩(wěn)定性的,而不受管的源代碼你無法保證什么。有時(shí)正確的做法也會(huì)引起內(nèi)存損害,程序運(yùn)作十分不容易分析。C程序是一種不受管程序,可能莫名其妙就掛了,最后造成安全上的重大影響。使用C語言,你可以假造事物的身份,但用Java,是絕不容許偽造身份的。
問:微軟為什么想加入Java Community Process(JCP)?
Gosling:我不清楚,你可以問問Sun 首席技術(shù)官Greg Papadopoulos。
問:你希不希望看到雙方回到當(dāng)初半年多的密切合作狀態(tài)?
Gosling:我很期待看到他們和JCP其他成員合作。
問:你們剛把Java應(yīng)用服務(wù)器軟件作為玻璃魚開放源碼,是不是也有可能把Java標(biāo)準(zhǔn)版(Java SE,Java的基礎(chǔ))開源發(fā)布?
Gosling:或許會(huì)的。我們過去為Java SE做的一切和開放源代碼其實(shí)差不多,主要差別只是在于我們的授權(quán)要求要有測試。在做過調(diào)查后,我們認(rèn)為測試是非常重要的。但開源界人士一方面說他們會(huì)接受測試,另一方面又說他們只是不同意測試。我們可能有一天會(huì)開放Java SE的源代碼,主要得考慮怎么做比較好。
有很多事讓我們十分緊張。許多人都有過使用JavaScript的經(jīng)驗(yàn),不同JavaScript間也存在相當(dāng)嚴(yán)重的相互操作性問題,對(duì)網(wǎng)頁制作者來說是一大夢魘。Java界的人都得拿著JavaScript手冊才能做事,真是太可怕了。
問:像BEA等公司會(huì)加入一些東西使得Java程序只有在他們的應(yīng)用服務(wù)器上才能執(zhí)行,到頭來Java也會(huì)變得不可攜,是這樣的嗎?
Gosling:沒錯(cuò),這的確是個(gè)問題。但至少,這還只是在特別功能上而已。Java有個(gè)包命名(package naming)工具。當(dāng)用API時(shí),你得申明用的是公開標(biāo)準(zhǔn)的API──像Java等──或是某公司的專有API──例如com.bea,作為一個(gè)開發(fā)者就一定要十分小心。開發(fā)人員真得很在乎可攜性,每次使用com.bea你會(huì)覺得很難受。JavaScript的一個(gè)困難就是無法判斷你用的是不是某個(gè)瀏覽器專用的功能。
另外,事情也會(huì)演變成某個(gè)應(yīng)用伺服器廠商具有一些想法,而大家都覺得不錯(cuò),這個(gè)想法就會(huì)送到JSR(Java Specification request),那么這家廠商第二或第三版本也會(huì)是在標(biāo)準(zhǔn)的Java框架內(nèi)。
問:難道不能在開放Java源代碼后通過品牌名稱來控制兼容性嗎?比如說,要求在其Java名稱被充許前,就取得認(rèn)證?
Gosling:這點(diǎn)我們做過許多討論。Sun是一個(gè)十分民主的公司,有人認(rèn)為這個(gè)方法可行,有人反對(duì),目前反對(duì)者占多數(shù)。
問:你持反對(duì)觀點(diǎn)嗎?
Gosling:我有時(shí)是站在贊成的一方,不過我得承認(rèn)我常常反復(fù)不定。
問:能將五年前的Java技術(shù)和今天的做一比較嗎?
Gosling:最大的差別在于Java已經(jīng)變成許多大型的關(guān)鍵的系統(tǒng)的中心,這就需要保守一點(diǎn)。當(dāng)你的系統(tǒng)是一個(gè)每晚結(jié)算數(shù)百億筆交易的銀行系統(tǒng)時(shí),小小一個(gè)bug也會(huì)釀成巨禍。早期我們有很多異想天開的點(diǎn)子,但現(xiàn)在我們得考慮到哪些人會(huì)受到我們影響。現(xiàn)在一切都要考慮周全才行。
問:通過Groovy等項(xiàng)目,Sun正在讓Java世界和腳本語言走得更近,但坦白講我不太清楚編程語言和像PHP、Perl、Python這樣的腳本語言有什么不同。
Gosling:你的困惑其實(shí)是有根據(jù)的。世界上有太多松散的語言,給不同人提供不同的用途。
當(dāng)人們提到腳本語言時(shí),往往想到的是可以很快讓開發(fā)人員把東西拼湊好,很快拿出去跟客戶做演示。程序的性能怎么樣、擴(kuò)充性如何,或是能不能建成一個(gè)大系統(tǒng)到在其次才考慮。但在Java設(shè)計(jì)上,我們不太在乎能不能很快寫成一個(gè)程序出門去做演示,我們在乎的是能不能很快寫成一個(gè)大型的具有良好擴(kuò)充性的程序,到最后我們做的決定往往比較困難實(shí)現(xiàn)。一般來講,在設(shè)計(jì)上,腳本語言比編程語言要容易。
Java設(shè)計(jì)有兩個(gè)層次:Java虛擬機(jī)和Java語言。難點(diǎn)在Java虛擬機(jī)及其以下的部分。如果把腳本語言用在Java虛擬機(jī)上,就可以兼得兩者的優(yōu)點(diǎn)。
問:你是這么做嗎?
Gosling:是的。Groovy開發(fā)的東西可以獲得所有的Java庫,Java應(yīng)用也可以使用Groovy。