JDK 7一再延期的背景披露以及OpenJDK的尷尬
本文來自InfoQ的宋瑋在2009年1月翻譯的一篇文章,原文地址在http://www.infoq.com/cn/news/2009/01/jdk-openjdk-icedtea。文章對于當(dāng)時(shí)Sun的JDK 7、OpenJDK及IcedTea三個(gè)項(xiàng)目之間的關(guān)系與進(jìn)展情況進(jìn)行了一番介紹。
51CTO編輯推薦:Java 7特別專題
由于JDK 7、OpenJDK和IcedTea都是并行發(fā)展的,它們之間到底是什么關(guān)系很容易讓人迷惑。OpenJDK的質(zhì)量主管David Herron,試圖澄清相關(guān)情況并解釋為什么JDK 7花費(fèi)了這么長時(shí)間。
David先描述了OpenJDK 6和JDK 6之間的不同:
OpenJDK 6是OpenJDK 7的一個(gè)分支,為了通過JCK 6測試條件的檢驗(yàn),我們團(tuán)隊(duì)從OpenJDK 7分支上剝離出了很多代碼,直到它符合Java 6規(guī)范為止。 關(guān)鍵是OpenJDK 6工作得非常好,好幾個(gè)Linux的發(fā)行版都使用它作為其JDK,它能夠通過JCK6測試套件的測試,這意味著OpenJDK 6可以被用來構(gòu)建一個(gè)兼容的JDK,但是很不幸,我們所希望的這種進(jìn)化軌跡相對來說是短期的。它服務(wù)于一個(gè)目的,即,擁有一個(gè)兼容Java6的完全開放的 OpenJDK。
接著,他談到了OpenJDK和IcedTea的關(guān)系:
看上去有些人非常喜歡用“./configure”而不是設(shè)置環(huán)境變量,并運(yùn)行“make”。IcedTea項(xiàng)目最初是由于OpenJDK不完整(因產(chǎn)權(quán) 而造成的障礙)而創(chuàng)立的,社區(qū)需要一個(gè)完整的開源工具鏈及代碼庫。IcedTea長期以來一直是OpenJDK的一套補(bǔ)丁,正如剛才我所說到的,它有一個(gè) 基于“./configure”的不同的構(gòu)建系統(tǒng)。 在OpenJDK中,我們已經(jīng)替換了產(chǎn)權(quán)代碼(encumbered code),因此不再有障礙了。正因?yàn)槲覀兊呐?,IcedTea項(xiàng)目已經(jīng)減少了使用補(bǔ)丁的數(shù)量。IcedTea中看上去不錯(cuò)的一點(diǎn)是,它的 configure腳本使得在多種不同的模式下構(gòu)建OpenJDK變得很容易,比如使用Zero Assembler Port在非x86/sparc芯片上來支持編譯等等。 IcedTea提供的一大塊內(nèi)容是plugin/java-web-start基礎(chǔ)架構(gòu)。我們還沒有把我們的plugin開源,并且對于6u10我們重寫 了該plugin。人們都希望把新plugin開源給OpenJDK項(xiàng)目,但是據(jù)我所知,這一決定還沒有提到議事日程。
David表示JDK 7和OpenJDK 7將擁有(幾乎)同一個(gè)代碼庫:
……計(jì)劃OpenJDK 7/JDK 7的起點(diǎn)代碼庫將幾乎一樣。維護(hù)分支顯然是昂貴的,如果JDK 7與OpenJDK 7差異太大,會(huì)導(dǎo)致兩個(gè)結(jié)果:a)非常 昂貴,b)破壞我們在開源生態(tài)系統(tǒng)上所做的努力。 但是“幾乎一樣”代表著還是有一些不同。 還記得因產(chǎn)權(quán)而造成的障礙嗎?其中有一些是截至2007年5月之前不能開源的代碼(現(xiàn)在已經(jīng)可以開源了),而另一些則還未得到同意(比如SNMP),但是 有一些開源代碼可以替換我們?nèi)栽谑褂玫睦系倪€未開源的那一部分代碼。這些主要集中在字體及圖形光柵部分。這些老的未開源光柵代碼,盡管是有產(chǎn)權(quán)的且經(jīng)過了 10余年的修正和精調(diào)(有較好的質(zhì)量質(zhì)量保證),但是對于產(chǎn)生JDK構(gòu)建的開源替代品來說,它們與現(xiàn)存非開源代碼一樣快速、穩(wěn)定且擁有非常好的質(zhì)量。
按照David的說法,OpenJDK源碼發(fā)布、JavaFX以及整體資源不足是導(dǎo)致JDK 7花了這么長時(shí)間的原因:
要是我們按照正常模式走,JDK 7現(xiàn)在就應(yīng)該已經(jīng)出來了。即,Java 6是于2006年12月發(fā)布的,而我們的正常模式是兩個(gè)主版本之間間隔18-24個(gè)月,這意味著JDK 7應(yīng)該在2-5個(gè)月之前就已經(jīng)發(fā)布了。到底怎么回事呢?很明顯是幾個(gè)方面的資源短缺。 比如,2007年5月發(fā)布的近乎完整的OpenJDK源碼花費(fèi)了大量人力物力。但是在2007年5月的JavaONE大會(huì)上又宣布了一個(gè)產(chǎn)品(一個(gè)叫做JavaFX的小家伙),它又變成了對Java的一個(gè)較大調(diào)整(正如一些人所說,它不是原來那個(gè)Java了),而且也耗費(fèi)了大量的工作。 換句話說,生產(chǎn)JDK7的時(shí)間被用來做JDK6u10和JavaFX了。
#t#Joe Winchester最近在Java Developers Journal的一篇文章上表達(dá)了關(guān)于JavaFX減緩了平臺(tái)發(fā)展的類似主張,他將Java采用動(dòng)態(tài)語言和類似JavaFX的技術(shù),與90年代 Smalltalk團(tuán)隊(duì)要把Java運(yùn)行在其VM(叫做統(tǒng)一VM—— Universal VM)上所做的努力進(jìn)行了對比。該作者指出,就像Smalltalk的情況一樣,***應(yīng)該把精力集中在Java自身上,“而不是擴(kuò)充JVM把它變成萬金油 ”。
還要注意的是OpenJDK理事會(huì)即將壽終就寢,像Neal Gafter這樣的人還關(guān)心著該組織新的組成形式:
OpenJDK理事會(huì)已經(jīng)延期一年了,在4個(gè)月之內(nèi)就要解散,有兩個(gè)非Sun的位置仍然空缺。2008年4月公布的最近一次會(huì)議備忘錄中,大家一致同意在2008年底之前起草出憲章草案。 理事會(huì)的七個(gè)成員都是誰?我們能夠看到4月之后的會(huì)議備忘錄并獲得憲章方面的現(xiàn)狀報(bào)告嗎?
你怎么看Sun的JDK以及開源Java的未來呢?