用C語言你得要能假造事物的身分,但用Java,你絕對不可以說謊。
這句話真是經典.....
專訪:與Java教父對談
CNET新聞專區:Stephen Shankland 30/06/2005
十年前,昇陽將Java搬到世人面前,這種軟體最初協助企業建立思想前進的美譽,後來則散佈到電腦業的幾乎每個角落。James Gosling則是這項技術背後的主要推手。
1990年代初期,Gosling帶頭發展了代號為Green的專案,最後演變為Java。Java的基本理念是創造一種程式,可以在不需修改情況下執行
在各種運算裝置上。例如,一支具備Java虛擬機器(virtual machine)的手機遊戲軟體也應該可以在別支手機上使用。
這項技術過去十年來面臨許多挑戰。早期的合作夥伴微軟在發現在Java程式的通體適用性對Windows不很有利,於是稍做改變、另創Windows版本
的Java,引發七年的官司。由於消費性裝置、PC及伺服器需要有不同的Java,昇陽一直找不到適當方法把Java掌控權分享給其他人,以致於包括
IBM在內的許多公司不斷呼籲昇陽把Java的主體之原始碼開放出來。
儘管如此,Java已經在運算業界站立腳步。昇陽執行長Scott
McNealy可能不免還是會發表冠冕堂皇的演說,但在星期二的昇陽JavaOne會上他的一番話卻十分中肯,他說:「七、八、九年前的JavaOne演
說現在真聽不下去,我們那時真是太小看它了。我們根本不知道這項技術要做什麼。」。
Gosling全程參與了JavaOne本週的活動,現在的他一頭蓬亂的白髮,一身穿著牛仔褲、T恤和Birkenstock鞋。「他看來像是一個老嬉皮,」Gosling的女兒在周二大會的影片中現身說道,惹得這名五十多歲的Java教父在台上滿臉通紅。
CNET News.com的Stephen Shankland週二也請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:我不了解,你可以問問(昇陽技術長)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:這點我們做過許多討論。昇陽是十分民主的公司,有人認為可行,有人反對,目前反對者多過贊成。
問:你是反對的那一陣營嗎?
Gosling:我有時是站在贊成一方,不過我得承認我常反覆不定。
問:可否比較五年前後的Java技術發展?
Gosling:第一和第二個五年的主要差別在於Java已經變成許多大型、關鍵系統的中心。這就要非常保守了。當你的系統是一個每晚結算數百億筆交易的銀行系統時,小小一個bug也會釀成巨禍。早期我們有很多異想天開的點子,但現在我們得考量到哪些人會受到我們影響。我們每修補一個bug就會對以前用些奇怪方法達成任務的人帶來困難。現在一切都要思考週詳才可以。
問:透過Groovy等專案,昇陽正在讓Java及描述語言的世界更平易近人。但我坦白講我不太了解這些程式語言和PHP、Perl或Python等描述語言有什麼不同。
Gosling:你的困惑其實其來有自。世界上有太多鬆散的語言,提供給在不同人做不同用途。
當人們提到描述語言時,往往想到的是可以很快讓開發人員把東西拼湊好,很快拿出去跟客戶做demo。程式的效能好不好、擴充性大不大,或是能不能建成一個大系統比較是次要考量。但在Java設計上,我們不太在乎能不能很快讓你寫成一個程式出門去demo,我要在乎的是我能不能很快讓你寫成一個大型而擴充性高的程式。我們最後為止做了困難的決定。一般來說,描述語言在設計上很容易,但不是在實際的程式撰寫上。
Java設計有二層:Java virtual machine(JVM)和Java語言。難是在JVM及它以下的部份。如果你把描述語言用在JVM上,你就能兩者兼顧了。
問:所以你也這麼做嗎?
Gosling:是啊。所有Java函式庫都提供Groovy開發的東西。Java應用也可以使用Groovy。他們可把Groovy sciptlet包含在內。(鍾翠玲)