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