What have you found for these years?

2010-10-13

quick and dirty java impl summary

因為在 buzz 上看到一些 java impl 的討論,
不禁困惑起來了,相關的 projects 一大堆,可從來沒搞清楚過。
那麼我就稍微整理一下來自 wikipedia 的資料好了...
當然也會加上一些我個人的認知就是了。

不過資料太多,我並沒有全讀完,應該有寫錯的地方,
就煩請指正好讓我更新這篇整理,感謝。

JDK: (跟樂團無關)
基本上就是顧名思義,就是一堆工具打包在一起,倒沒特別指什麼。
除了最早 Sun 的 JDK 外(not open sourced),其他比較有名的有:

OpenJDK:
Sun 承諾社群要 open source 整個 Java, 而這就是其成果。釋出的
license 是 GPL +linking exception. 所以基本上 OpenJDK 跟
SunJDK 或 OracleJDK, 我猜差距應該不會太大。

Apache Harmony: (JDK)
有人討厭 proprietary software, 因此希望 Sun open source,
但就算 OpenJDK 是 open source 了,但還是有人討厭 GPL
(這裡不多解釋討厭 GPL 的原因), 也因此會有 Apache 的版本了。
這個計畫是完整的 JDK 計畫,包含 JVM 和 core library.
而 Google 的 Dalvik, 則是另一個 JVM, 但他的 core library
是使用 Apache Harmony 裡面的 core library. 主要開發者是
IBM 和 Intel, 然後現在被 Oracle (current Java patent owner) 攻擊了...
(於是 Oracle 搖身一變為目前最邪惡的公司(之一)) 那麼什麼是 JVM?

JVM:
基本上就是真正在跑的 virtual machine 了,可以視為跟 JRE 等價。
聽說一開始 Sun 的 JVM 跑很慢,直到他們買下了 HotSpot,
這東西真的是快到沒話說。SunJDK 和 OpenJDK 都是用 HotSpot,
應該是目前最常見的 JVM.

HotSpot: (JVM)
隨著 OpenJDK 由 GPL 釋出,HotSpot 也隨之以 GPL 釋出。
記得 jserv 說雖然他跑得很快,但程式很恐怖 XD 我想這應該是因為
寫得非常貼近機器,而這應該也是他跑得快的主因。
貼近機器的缺點就是,移植困難,維護應該也困難。
另外 Red Hat 開發了個 IcedTea, 不過我有點不懂其定位,
所以這邊跳過不講。

updated 2010-10-14 21:41
非常感謝 jserv 很迅速地補充了不少說明,請參考 comment.
IcedTea 主要目的是讓某些地方,例如 RatHat 有能夠使用的 Java impl,
而這主因是 OpenJDK 不夠完整或是有些地方不能在上述地方使用,
因此 IcedTea 是為了補足這些缺陷而誕生的。而這除了能借用 OpenJDK 的
東西如 HotSpot 外,也能換成其他的實作,如 cacao 或是其他 JIT compiler.

Dalvik: (JVM)
Google 拿來放在 Android 裡面的 JVM, 使用的 core library 則
出自 Apache Harmony, 而並不使用 Harmony 裡面的 JVM.
這套跟 Harmony 一樣是使用 Apache License 釋出。
而除了 Harmony 和 OpenJDK 外,當然也有其他 core library 了。

GNU Classpath: (core library)
OpenJDK 本身就包括 core library 了,但還有很多其他 JVM 實作
其實並不包括 core library, 例如上面提到的 Dalvik. 然而選擇 Harmony
而不是 Classpath 的原因應該也很簡單,license 不相容。這個世界
其實可以分成三個部份,一個是 proprietary, 一個是 GPL like, 最後
就是 BSDL like 了。而 Apache License 則是 BSD license 這陣營的。
大多數 GNU based project 很可能就是用 Classpath 這套 core library.
那麼是哪些呢?

GNU GCJ: (Java compiler)
基本上就想像成是 Java 的 GCC front-end 就是了。
根據 wikipedia, 他也能把 java source code compile 成
JVM bytecode, 不過我沒試過,只試過直接 compile 成 machine code.
而除了 compiler 外,他當然也需要 core library, 這部份就是使用
Classpath. 另外 GNU 的東西除非不是用 GPL, 否則不額外說明。

Kaffe: (JVM)
這套比較老了一點,沒記錯的話,jserv 有參與其計畫,搞不好
還是最早的作者,抱歉我不太記得了 XD 基本上就是 JVM 實作。
也是使用 GPL, 不過似乎跟 GNU 沒有直接關係?

updated 2010-10-14 21:47
Kaffe 跟 GUN 沒有直接關係,但其背後的商業公司 Transvirtual
曾經資助 GNU Classpath 的開發。

總而言之,現在這三個世界大概是這樣...
proprietary:
JDK: OpenJDK (kinda ironic?)
JVM: HotSpot
core library: OpenJDK

updated 2010-10-14 21:46 about IcedTea

GPL:
JDK: IcedTea (整合 OpenJDK 或可用其他 toolchain)
JVM: Kaffe, StableVM, blah blah?
compiler: GCJ
core library: Classpath

BSD (Apache, MIT):
JDK: Harmony
JVM: Dalvik (but not fully for Java SE)
core library: Harmony

而之前 IBM 在做 Harmony, 現在被 Oracle 強迫做 OpenJDK,
也就是說,Google 原本的盟友被 Oracle 搶走了。不知道 Intel
在這邊是做什麼反應?畢竟 Harmony Intel 好像也出力不少。
如果 Intel 也不繼續做,那就是 Google 要獨立維護了。

應該差不多就是老林在 buzz 裡講的那樣。

我以前一直不喜歡 Sun, 但相較之下,Sun 實在遠遠遠遠遠比
Oracle 好太多了... 現在才發覺其實 Sun 是很親切滴。
回答我自己的問題:

1. Dalvik 跟 Sun 有什麼關係?Sun 支援 Google 做這個?
我一直以為是 Google 自己在做的

毫無關係。Dalvik 是跟 Apache Harmony 合作,
而背後的廠商則是 IBM 和 Intel.

2. 有沒有可能 Android 放棄 Java?

老林說了不太可能,我想也是。

3. OpenJDK 是純 open source 社群維護的 jvm + javac 嗎?

不對,這是 Sun 的產物,現在則到了 Oracle 手上。
說是 open, 但 Oracle 還是能告人,那哪個社群能真正 fork?
所以這 open source 也只是能看不能吃...

4. Sun 最後還是 open source 了 JVM? 這跟這些事件有任何關係嗎?

那就是 OpenJDK 了。我想這跟 SunJDK, or OracleJDK,
應該都不會有什麼差異,本質上是一樣的,到頭來操作者也是一樣。
我想這就像是 Netscape Navigator 後來跟 Firefox 差不多的狀況,
背後都是用 Mozilla 的東西在做。

-

其實軟體世界的立場還滿分明的..... 很明顯有幾個勢力,
有的會瘋狂打仗,有的則是老死不相往來...

-

LOL

who cares for java anyways?
it's the language of enslaved cubicle drones.
Posted by jokker on October 12, 2010 at 05:14 PM BST
反正誰在乎 java 了?
那不過是被奴役在小方格間的雄蜂的語言罷了。

2 retries:

jserv said...

礙於某些技術考量,與非技術的限制 (如專利、第三方程式碼),所以 OpenJDK 的 Java SE 實做事實上並非相當完整,但這些空缺即可由 GNU Classpath 來補齊,而且現在已經有具體成果,也就是 RedHat 創立 IcedTea 專案的目標,就軟體發行 (Linux distribution 收錄) 與可用性的角度。

後來,因為原本的 HotSpot engine 難以維護,且不支援 x86 與 sparc 以外的平台 (Sun 過去有 arm 的 Java SE,但沒有釋出原始程式碼),RedHat 的工程師就帶頭用 LLVM 改寫,相當於把整個 JIT compiler 換掉。

需要注意的是,對 IcedTea 來說,底層的 Java engine (如 HotSpot) 是可以選擇的,所以也可替換為 cacao (另一個 GPL'd Java engine)。

Kaffe 與 GNU 的關聯較小,但過去 Kaffe 背後的商業公司 Transvirtual (已在 2002 年被收購) 曾資助 GNU Classpath 的開發 (1998 年,從第一行 Java 程式開始慢慢刻的 clean room 實做)。

Lin Jen-Shin (aka godfat 真常) said...

大感謝 <(_ _)>
晚點有空就修正這篇

Post a Comment

All texts are licensed under CC Attribution 3.0