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,而且目前沒有能力) ,所以略加紀錄。希望能供有興趣的前輩參考。

2007年2月15日 星期四

我的潛水宣言

這些日子以來,非常謝謝各位前輩的支持與照顧。 因為下個學期,我有兩個很重要的事件,使我可能無法空出很多時間於維護我寫得軟體上面。而下下學期,又因為「大學入學考試」的壓力,也可能無法投入過多時間於 Feuerfuchs Portable 還有 Feuerfuchs Addons Installer Class。

我大概會從這個星期五(2007/02/16),浮潛到明年的暑假吧(當然,運氣好的話,會提前結束)。期間,我應該不會再維護 Feuerfuchs Portable 還有 Feuerfuchs Addons Installer Class。當然,若是有重大事件,或者是 Feuerfuchs Portable 相關的討論,我偶爾會浮出水面,但是也僅只於「出一張嘴」而已,這點就先向大家道歉了。

以下是我打算在「潛水」之前做好的事:
  1. 改寫「Portable Firefox 使用、自訂與中文化」把他重新定向為「Firefox Portable 指南」。一方面事為了正名 XD ,另一方面想要把所有名詞更新到最新(eg. Portable Firefox -> Firefox Portable, Portable Firefox CE -> Feuerfuchs Portable) [STATE: 完成]
  2. 重新整理「[PFx] Feuerfuchs Portable Launcher (1.2.1.1) - 壓縮檔」 [STATE: 完成]
  3. 發佈「Feuerfuchs Addons Installer Class」 [STATE: 完成]
Regards,
__________h.s.

Feuerfuchs Addons Installer Class 完成

總算把所有程式碼完成了,而程式碼將在近期於 MozTW 討論版 公佈。

目前有的功能:
  • 讓想要打包 Firefox(R) PowerPack/LitePack/AddonsPack 的人,可以輕鬆的製作一個品質不錯的安裝程式
  • 不太好的多國語言支援
  • 內建 Firefox(R) 執行狀待偵測
  • 內建「個人設定檔」偵測
  • 內建「Firefox(R) 主程式」偵測
  • 含相依性處理設計
  • 可以任意群組部份附加元件
目前測試過的主程式為 Firefox(R) 2.0.0.1。
不果理論上 Firefox(R) 1.5 以上,甚至 ThunderBird(TM), Flock(TM) 都可能可以正常運作。

Regards,
__________h.s.

2007年2月13日 星期二

Feuerfuchs Addons Installer 預設的圖示

Feuerfuchs Addons Installer 預設的圖示,
延續 Feuerfuchs Portable 的圖示與風格,
使用了相當多互補色,
如下圖。





Regards,
__________h.s.