2007年2月22日 星期四

Firefox Portable + JVM Movable 可行性分析

  • 聲明 1: 為何本文使用 JVM Movable 而非 Java Portable?因為 Java 本身是一個可移植 (Portable) 的語言,而不是指 SUN JRE(JVM)。
  • 聲明 2: Mozilla, Firefox 為 Mozilla Fund./Co. 的註冊商標;Firefox Portable, OpenOffice.org Portable, PortableApps 為 John T. Haller 的註冊商標;SUN, Java 為 SUN Co. 的註冊商標。謹此聲明。

在拜讀 某A 前輩的文章: OpenOffice.org Portable 非公式正體中文版: OO.o Portable 2.1 Pre-Release 的新功能 後,發現 JRE(JVM) 竟然是可攜帶的!驚喜之餘,聯想到了這篇文章: Portable Firefox問題 (請問可否不用在電腦安裝 java 而執行 java 元件呢?)。到底 Firefox Portable + JVM Movable 可不可行?

若是以前,我會回答很「官方」的答案: 不行。(參: Firefox Portable: Known Issues,因為要更動很多 registry) 。

當然,透過「暫時寫入、事後抹除」技巧,的確能模擬出 Sun JRE(JVM) 已經安裝過的狀態,但是: 風險過大,搞不好,可能影響到原有的 Sun JRE(JVM) ;而且,我們可能需要 admin 權限。然而對於許多 Firefox/Feuerfuchs Portable 使用者而言,是不可能有 admin 權限。

所以到目前為止 (2007/2/22),
「官方」的答案是: 不行。
但現在,我的答案好像不這麼肯定了。

那 OpenOffice.org Portable + JVM Movable 是怎麼做到的?在讀到該分消息,震驚之餘,我去下載了 OpenOffice.org Portable (Beta),閱讀其中程式碼,發現: 能這樣做,是因為
OpenOffice.org 設計「良好」,只要將 JRE(JVM) 放置的目錄提供給 OpenOffice.org,剩下的交給 OpenOffice.org 處理。

然而,Mozilla Firefox 卻不同!

Mozilla Firefox 使用的是 SUN JRE(JVM) 提供的 Java Plug-in。Mozilla Firefox 的工作僅止於找出 SUN Java Plug-in,剩下的,讓 SUN Java Plug-in 去弄。而 SUN Java Plug-in
似乎是利用 Registry 來尋找 JRE(JVM) 所放置的目錄。

這下問題,又回到原點了: Registry Hack!
有解決方法嗎?
目前,最有可能的方法是: 重新實做 Java Plug-in。
可能嗎?

很有可能,至少一開始,我是這樣認為的!

障礙列表:
  1. Mozilla Firefox 去找電腦中已經安裝的 Java Plug-in,造成衝突。
  2. 重新實做 Java Plug-in
其中第一點,很容易就可以克服: [MozillaZine: Plugin scanning]。只要把 plugin.scan.SunJRE 值設為 100000,如此一來 JRE(JVM) 至少要出到第 100000 版才有可能會產生衝突。然而第二點,就不是哪麼容易了。

先談談 Mozilla Firefox 的 JVM Framework。您可以在下面的列表找的相關資料:
  1. Open JVM Integration (Mozilla Project)
  2. OJI之介紹與實作 (.doc) by 陳正哲
再看看 SUN 對於 Open JVM Integration 的「看法」:
Since Netscape 7 has been widely adopted, we decided to stop building OJI plugin for Netscape 6.x in JDK release.
所以,顯然的,上面的兩篇有點舊,其使用的介面可能與 JVM 最新版本不太一樣。

再談談 SUN Java Plug-in 的相關資料:
  1. README: JDK Builds
  2. JDK 7 Documentation: Deployment: Java Plug-in
全都沒有講到和 Java Plug-in 怎麼和 JVM 運作(至少我都看不太出來)。
到目前為止,可以用的資料,好像只有「稍舊」的 OJI。

我又把腦筋動到 Java 的「開放原始碼」
而我從 OpenJDKMailing List Archive 中找到這一封信
信上說 Java Plug-in 的原始碼尚未於 OpenJDK 計畫中公佈,
但我也得知: 可以在 JDK 6 的原始碼中找到
Windows 版本的 Java Plug-in。
(但我不知道從何找起)
而這句話又讓我想起,README: JDK Builds 的一句話:
NOTE: The Java Plug-in product for Windows cannot be built from the Community Source Release.
看到之後,心就涼了一半。
只好期待 SUN 最後還是會把 Java Plug-in 加入到 OpenJDK 計畫中。

不過,除了 SUN 的 Java Plug-in 以外,我還看到了一個東西: gcjwebplugin。這個計畫目前已經被整並到 GNU Classpath 計畫。目標是製作一個 Java Plug-in。雖然我看不太懂程式碼,不過
好像和 JVM 的種類無關,也許可以從中取得靈感以及相關的介面。

如果有前輩,能重新實做 Java Plug-in 或者 SUN 釋出 Java Plug-in 再略加改寫 (改成以其他方式取得 JRE(JVM) 的位置) ,應該就可以達成 Firefox/Feuerfuchs Portable + JVM Movable。

__________h.s.

後記:
這個議題好像蠻常被提起,而我也蠻有興趣的 (雖然我不使用 Java Applet,而且目前沒有能力) ,所以略加紀錄。希望能供有興趣的前輩參考。

4 則留言:

匿名 提到...

打擾先抱歉
看到你這篇blog真高興 目前在實作ojiplugin因為特殊需求 所以無法用gtk2(也就沒辦法用gnu classpath) 乃至於參考gcjwebplugin寫了一版可以秀出applet(已kaffe jvm, X-based的widget)的java oji plugin, 不過目前還有一些問題....

HobbyScripter 提到...

很高興我的文章有用。

加油哦!

匿名 提到...

請問一下,該如何讓openoffice.org裡面附的jre能可攜呢?一定要安裝嗎?還是可以用付掛的方式加進去呢?
可否指導一下,謝謝~

HobbyScripter 提到...

To: 匿名@2007年10月10日

請參閱:
Using Java With OpenOffice.org Portable

Regards,
__h.s.