Oracle對Sun的收購引發了人們對Java未來的一絲擔心,Oracle能否繼續保持Java的開放性,面對Ruby、Python或PHP等一批輕量級語言的崛起,Java能否繼續保持其在開發領域的領導地位?
14年前,Sun公司的一位行銷天才把一門試驗性的跨平台語言由象徵踏實的Oak(橡樹),改名為香氣四溢的Java(咖啡)時,可能他沒有想到這門語言能有後來的輝煌。事實上,如果現在Sun想為這門語言改名,以準確體現其在電腦產業的地位,似乎Oak更形象化。今天,雖然Java語言並非真正意義上的遍地開花,但它已經出現在眾多場合和設備中,而且它享有運行穩定、設計精良的美名; Java代碼也許無法主導所有計算機或所有平台,但它離成為通用語言已近在咫尺。
Java之父詹姆斯戈斯林(James Gosling)在Oracle主辦的OpenWorld大會上登台發言時闡述了這一點。他調出JavaFX幻燈片,上面是一連串統計數字:超過8.5億個具有Java功能的桌上型電腦和大約100億個具有Java功能的設備。實際上,Java虛擬機在電子設備中司空見慣:電子書閱讀器Kindle、藍光磁碟播放機和智慧型電話(包括不太聰明的手機)等。 iPhone(手機上網)應用程式可以在成千上萬部iPhone上運行,但Java嵌入在26億支手機上,從不太聰明、20美元就能買到的手機,到最新一代的黑莓和Android手機無一不包。
請戈斯林到OpenWorld大會上演講,只是Oracle掌門人拉里·埃利森(Larry Ellison)希望向工程師一再保證這門語言前途光明的手段之一。 Oracle想要併購Sun,但它仍得等待歐洲監管部門批准這項決策。美國政府開了綠燈,但歐洲政府官員因為擔心MySQL的發展還沒有同意這項交易。戈斯林和Sun董事長麥克尼利(McNealy)都表示,一旦併購工作完成,Java會從Oracle得到比以往更多的關注和資源。
從近期來看,埃利森傳達的訊號也許不是很重要,因為如今Java已成氣候,要改變發展方向並不容易。當然,也有一些人認為,Oracle的商業模式太不一樣了,所以它必然會對Java生態系統的每個部分進行重大變化。整體來說,每拿出一個Java可能變化的理由,就有同樣充足的理由表明Oracle可能還是希望維持現狀。
企業級應用是主戰場
Java先在伺服器端找到了自己的位置,未來這個領域仍是有望看到Java虛擬機的主要地方。對Oracle的所有產品來說,大型伺服器也是主要的安身之處,所以出現這對組合自在情理當中。雖然PHP程式設計師青睞MySQL,但對資料密集的企業應用來說,許多最要緊的專案還是使用基於Oracle的架構封裝而成的Java,這種情況應該不會很快改變。
Sun稱,GlassFish應用程式伺服器每個月的下載量超過100萬人次,Tomcat等比較舊的平台仍然很常見。由於Java這項技術備受推崇、運作速度快、真正跨平台,大型企業(如銀行和保險公司)對Java開發人員求之若渴。
不過,Java不再被認為是最新最酷的語法。有些程式設計師對靜態類型語言的結構滿腹牢騷,紛紛改用更新穎或更簡單的語言,例如Ruby、Python或PHP。現在許多較簡單的Web應用程式就是用這些語言開發而成的,因為它們寫的程式碼容易修改,能快速建立原型。然而,這些使用便利的新語言常常離不開Java: Ruby開發人員常常使用JRuby(基於Java實現的Ruby語言),因為Java虛擬機能夠更出色地處理繁重任務、釋放多個執行緒。 Jython(基於Java實作的Python語言)也相似。
Java現在正在加入一些最新的程式技術,以此遏制這些新語言大舉入侵。 Grails明顯地模仿了Ruby on Rails的許多簡單的說明性模式;Grails這種框架利用名為Hibernate的資料庫中間件,把Groovy等腳本插件結合起來。 Groovy本身加入了眾多的動態選項便於程式碼解釋,同時可以直接連結至Java應用程式介面(API)的任何部分。甚至不需要考慮Python或Ruby,因為Groovy憑藉著精巧、現代的語法,讓Java程式設計師可以使用似乎變化無窮的龐大函式庫和底層穩若磐石的虛擬機器。
走上移動之路
Java手機的數量(估計約26億支)委實驚人,因為市面上許多最簡單的手機裡面都運行Java平台微型版(Java ME)。這讓Wattpad.com等公司得以建構在整個第三世界都能順暢運作的文檔閱讀平台。
不過,運行Java的智慧電話數量相對少一點。 iPhone的巨大成功激勵許多人重新學習Objective C,這門語言讓程式設計師對於記憶體使用等一些系統問題提高了控制能力。 Java為程式設計師隱藏了大部分底層問題,這是個優點,但前提是不需要管理記憶體等資源,因為要是垃圾收集出現一個小失誤,有些遊戲就運作不了。可遺憾的是,因為電池續航力是極為重要的一個因素,智慧電話需要比幾乎其他任何平台更嚴格的資源管理。
不過,Java程式設計師仍然很吃香,因為黑莓手機在其新平台上繼續採用Java ME:它為手機的情境模式(profile)添加了支援觸控螢幕和方向感應器的功能。而Android存在不可預測的因素。由於Google開放了Android的使用,許多手機廠商都搭上Android這輛彩車。
谷歌的Android建立在開源Apache Harmony及其類別上,而不是建立在Sun開發的Java開發工具包(JDK)和Java ME上。對於使用Eclipse編寫程式碼的人來說,它們看起來幾乎一模一樣。在其他許多情況下也無關緊要,因為Android開發使用了很多XML表單,但如果這兩套開發框架離對方漸行漸遠,這種分裂可能會變成大問題。
收復桌面陣地
大多數人仍然認為Java在桌面端從來沒有成功,這是過去。如今,Java正在緩慢而穩定地滲透到現代作業系統的各個角落。雖然用Swing編寫的標準應用程式因試圖定位在每個平台的最基本部分而繼續遭殃,但是有了像JavaFX和Web Start這些比較新的開發平台和框架,就有可能透過Web有效地部署軟體。本機平台可處理Java歸檔(JAR)的所有快取工作。只要點擊鏈接,有時偶爾隨後點擊幾下授予權限的對話框,軟體就可以安裝及更新,還可以隨時運行。
JavaFX仍然是名副其實的未知因素。圖形功能現在可與Adobe的Flash競爭;計算引擎可支援大部分的Java API,但這門語言是一門奇怪的混合語言,融合了正宗Java、JavaScript及其他的一些標記語言。其程式碼比正規的Java簡單,所以Java程式設計師又要學習新的東西。不過,對於極具互動性的桌面工具而言,新的動畫類也許值得花時間學習。 Web Start正在持續慢慢改善透過瀏覽器直接把軟體部署到桌面的功能。
搶佔嵌入式領域
Java也讓人們最預料不到的地方茁壯成長。雖然C程式設計師可能從來不會承認Java虛擬機巧妙處理儲存區、快速運行的功能,但Java在非智慧型手機、機上盒、嵌入式晶片、Kindle及其他低功耗設備取得的成功表明:Java虛擬機完全有能力在嵌入式應用方面一展身手。 Java的普及性也幫助程式設計人員從大平台遷移到小平台。雖然為大型主機開發企業級應用軟體改成開發小型嵌入式程式碼並不簡單,但Java標準大大簡化了這種轉變,這讓其他許多工具自嘆弗如。
Java程式包也在變得越來越小巧。戈斯林用塵埃來形容一台硬幣大小、能辨識Java的計算機。 JavaCard是針對這類小型套件的虛擬機器和API,它即將迎來3.0版,這個里程碑版本將會增添網路連線功能。儘管這些小不點還沒有小到足以放入到人的眼睛中,但直接與網路通話的功能卻讓它們顯得極具誘惑力。
合作夥伴會分道揚鑣?
所有開發人員的最大擔憂是:要是Oracle收購Sun的交易塵埃落定,會出現什麼樣的利益衝突變化? Oracle是靠著收取大筆的軟體授權費成長壯大,其軟體可運作在客戶想要購買的任何硬體上。而另一方面,Sun通常是免費贈送軟體,然後透過銷售伺服器賺到一些錢。這些經銷策略也許不會立即發生變化,因為慣性實在太太了,但誰也不知道將來Oracle會做出怎樣的決策。
有些人認為,Oracle過去在收取大筆許可費方面屢試不爽,只會鼓勵埃利森對Sun採取類似的手法。也許Oracle的銷售團隊眼下就在垂涎這個機會:針對Java以前免費的地方開始逐步提高授權費。為了避免重新編寫Java平台企業版(Java EE)應用軟體,許多企業很可能寧可支付每個CPU 100美元、200美元甚至100萬美元的費用。
批評者指出,Oracle很容易開發出新版Java虛擬機,針對不同的市場推出不同的效能等級。桌上型虛擬機器可能保持免費,Oracle甚至可能會掏錢請電腦廠商來推銷Java和JavaFX,而處理極限多執行緒的效能改進可能會收取非常高的費用。從使用者身上撈錢有很多法子,許可費相較之下往往便宜得多:如果讓拒不服從的程式設計師先學習一門新語言,然後重新編寫程式碼庫,那成本高多了。
但也有人認為,Oracle也許不會採用這一招。一名接近Sleepycat(這家開源資料庫公司在2006年被Oracle收購)的消息人士表示,Oracle已將技術團隊的規模擴大了約一倍,而所有雙授權模式原封不動。軟體仍然採用開源或商業許可證這兩種形式。如果Oracle像Sleepycat那樣對待Java,社群授權及其他方案仍然會跟以前一樣免費、隨處可得,同時有更多的工程師來改進程式碼。
與其他各大Java合作夥伴的長期關係方面仍存在更深層的問題。谷歌繼續支持Apache Harmony,這個程式碼超過125萬行的專案似乎一心一意要破壞Sun作為世界中心的地位。 IBM輸掉了爭奪Sun的競標戰,現在發現競爭對手Oracle的實力更強勁了。 IBM設計了Eclipse開發工具,可能也會開始把Java平台帶往另一個方向。
其他合作夥伴的態度比較激烈。 SAP公司技術長Vishal Sikka一再要求Sun發布Java社群過程(JCP),著重提到了Oracle在2007年提出的方案:將控制權交由一家開放、獨立、與廠商中立的標準組織,標準組織的所有成員在機會均等的前提下參與。雖然Oracle對相關細節基本上保持緘默,但可以認為,這家公司會因為從Sun承襲過來的一些觀點而重新贏得尊重。
但是,儘管其他合作夥伴可能會參與恫嚇的舉動,但他們可能會考慮度的問題,因為大家其實是相互牽制的,任何過激的行為都極可能會被阻止,因為大家都認識到一次編寫、到處運行理念具有的優勢。如果為Android手機編寫的程式碼無法輕鬆遷移至索尼藍光播放機或Glassfish伺服器,另一門語言就有機會應運而生。其實已經有多家公司在編寫工具包,讓使用者可以在iPhone上輕鬆運行Ruby on Rails或Python軟體。
另外,許多這些比較新的語言可能會成為不可小覷的競爭對手,而暗鬥過多只會幫助它們攻城掠地。現在有幾十種非常好、知名度小一點的開源程式包,只要忠實的愛好者稍加轉換,通常就能把它們移植到每個平台上。例如,Python已經是一些科學領域的主要語言,Google選擇Python、而不是Java作為其應用引擎(App Engine)支援的第一種語言。雖然IBM、Oracle和谷歌在爭奪主導權的競爭中可能會相互排擠,但它們必須認識到:所有人都受益於標準化,而不是壟斷。要是誰敢過於排擠別人、企圖一手控制Java,其他廠商可能會奔向競爭對手。
Java也開應用程式商店?
Java程式碼庫仍相當有凝聚力、相對標準化,這個事實惹得眾人猜測:Sun(如果合併案完成,還有Oracle)到底會怎樣利用Java的普及性來大發其財,又不提高許可費、擠壓每個人?如果有人開發出一種面向整個Java生態系統的應用程式商店(App Store),從而像銷售面向iPhone的應用程式那樣銷售用Java編寫的小組件(widget)它們可以在桌面、手機、藍光播放機或可以使用Java的其他任何平台上運行,會怎麼樣?
最近已經有了面向Android手機的一批數量可觀的應用程序,Sun也在策劃一家Java商店,好讓人們只需把應用程序拖到桌面上,或者只要再編一點代碼,就可以把各應用程序結合起來,從而讓它們可以在Java世界的幾乎每個角落裡運行。不過,處理截然不同的螢幕和使用者介面還是個挑戰。
設想一下這種場景有多吸引人:開發人員編寫的某個應用程式在Android手機上運行著,他在辦公桌面上處理任務,回到家後在客廳的藍光播放機上順暢運行。
把Java應用程式帶到坐沙發的人面前甚至有點出人意料,因為Java這門語言在被稱為Oak的早期階段,本意就是運行在機上盒上。這種遠景將依賴Java平台的最大優點:普及性和跨平台的穩定性,也許這些優點會幫助Java為發明者帶來滾滾收入。