The Old Blog Archive (Traditional Chinese), 2004-2009

To Watch You Grow, Baby: 記 OpenVanilla 週歲前

2004年10月23日OpenVanilla 的誕生日。那一天傍晚,gugodzonble 問我,要不要把當時還在改寫中的 CarbonInputMethod 帶去多鬆裡看看狀況。我大約是晚餐時間過去的。大約在那之前兩週,我給 gugod 還有 zonble 看了那時在進行的改寫計劃。那是自我開始做「香草輸入法」後便一直覺得要完成的:把 Mac OS X 輸入法元件底層的程式碼給整理起來,變成一個獨立的底層元件,好在上面建立一個通用的框架,可以容納其他的輸入法。

之所以會有這個想法,一開始是因為酷音輸入法的 OS X 版以及香草輸入法的注音、倉頡及簡易模組,這三者間都共同用到同一份程式碼──也就是從 Apple 的 BasicInputMethod (BIM) 所改寫成的輸入法底層──因此我總覺得,應該有一個方法,可以把這幾個輸入法整合起來。

那時候也因為工作的關係,開始接觸 UNIX 界的亞洲文字輸入問題。當時稍稍對大家都在討論的 IIIMF 做了點瞭解,發現相當難以上手──當時我對 X-Window 瞭解有限,而且覺得 IIIMF 網站和文件都沒有一個很清楚的起點。而且以「跨平台」、「寫一次可以在所有平台上執行」為設計目的的 IIIMF,終究說來,仍然是一個以 X-Window 為起點所設計出來的架構。我當時單純地覺得,做為 OS X 的使用者,我比較急切想要看到的,是一個為 OS X 快速增添新輸入法的管道。因為 OS X 的架構和 X-Window 差很多,走「把 IIIMF 移植到 OS X」上這條路,遠遠超過我的能力範圍,於是打算從我已知的輸入法需求出發,設計一套自己需要的架構。

於是從「香草輸入法」於八月底加入倉頡、簡易兩個模組之後,中間有快兩個月的時間,都在構思這樣的一套架構,也就是後來的 OpenVanilla.h 。同一時間在進行的就是上面說的 CarbonInputMethod ,也就是 OS X 的輸入法底層。我很久沒寫程式,很多新的、或是早成慣例的程式寫作方式,都不是很熟悉。像是 OV 的關鍵之一,也就是要能動態載入程式庫,這樣一件事,我在八月底時還完全沒有概念,不知道該怎麼做、該叫用哪些程式庫,OS X 又會以什麼方式載入這些程式庫、怎麼配置程式庫的程式及資料段空間等等。又因為那時有了新工作,有很多事務要處理,這兩個部份的工作就緩步進行。偶爾,我在和 Autrijus 或 gugod 喝咖啡時,會提起最近的狀況(那時 Autrijus 非常關心這件事的進度,因為 OS X 上一直沒有他合用的大易輸入法),他們也看過幾次進行中的 OpenVanilla.h:九月底有一天 Autrijus 還在新生南路的星巴克咖啡裡大砍其中的贅碼。OpenVanilla 一直到 0.6.x 之前的 API 幾乎就是在那一天確立的。

然後到了把 OpenVanilla.h 以及 CarbonInputMethod 組合在一起的時候。這就是2004年10月23日那天晚上發生的事情。gugod那一天就開始了酷音輸入法的移植工作,zonble開始找「香草」的icon,而我則一直在實驗能否真的藉由dyld程式庫把輸入法模組動態載進來。晚上九點,第一個「測試輸入法」能動了:一個按a鍵出a字,按b鍵出選字窗的「無用」輸入法。gugod立刻叫我把現有的程式通通儲放進version control system中──而我當時連svn都還不會使用!就這樣,我上了一個晚上的subversion crash course,gugod 建立了 OV 的標準組立(build)程序。OpenVanilla 於當天誕生。

2004年10月25日,我們在 OpenFoundry 上丟出第一個 OV 的載入器及輸入法模組:大易輸入法。一開始因為我們沒有人知道 Objective-C 寫成的程式庫,在動態載入時有一些細節要處理,所以花了將近兩週的時間在研究各種除錯的方法。那是段臭蟲抓不完的時間。OpenVanilla.h 很多小地方要更動。我因為不熟悉版本管理,經常忘記送出某個檔案…… 混亂的時期一直到了十一月中,那時我們已經有了第二套輸入法:POJ。然後是一段密集的工作時期,開始做泛用輸入法(當時還稱作 “Xcin 模組”),我們開始有了可以真正載入多套輸入法的 Loader ,開始陸續有朋友開始試用下載這套軟體,然後有更多的 bug report 進來……

以後的故事,大家都知道了。我們在 ICOS 2004 上有了一次很漂亮的 demo,我們在 2005 年的 1 月 19 日推出了當時最穩定的 0.6.3 版,這個版本一直到 0.7.0rc3 出來前,只經歷過少數的錯誤修正。我們有了完整的使用手冊,那時的成員有我、gugod、zonble、b6s、pcchen 還有 mjhsieh

後來我辭掉了工作,在家當起 freelancer。一段相當疑惑和混亂的日子。OV 好像已經很不錯了,但還可以更好些。CarbonInputMethod 一直有一些沒有解決的老問題。OpenVanilla.h 還可以設計得再精簡些。但是沒想到開始做 freelancing 之後反而更沒有時間去照顧程式。我心裡面總是想著:一定要把 OV 再往前推一個主要版本的。一定要讓 OV 有自己的生命…… 讓更多人可以瞭解、維護這些程式碼。

OV 0.7.0rc3 是在2005年5月19日推出的,與 0.6.3 整整相隔了四個月。0.7.0rc3 到 0.7.0rc5 是一段相當痛苦的歷程:因為 Loader 改用了 Cocoa 程式庫撰寫,初期穩定度相當差。那時每天醒來都擔心會不會有可怕的 bug report 跑進來,尤其正好那時同時遇到 OS X 從 10.3 過渡到 10.4,libchewing(酷音輸入法模組的主程式庫)也從 0.2.5 過渡到 0.2.6 。因為有太多不穩定的狀況,我曾經有很長一段時間覺得:OV 往前推進到 0.7.x 是一大錯誤。也許我早早就應該停止再繼續做任何事情的。

一直到 2005 年 8 月 12 日,也就是 0.7.0rc5 推出兩個半月後,我們才終於有了 OV 0.7.1。至此算是擺脫了 “rc = repeated crash” 的惡夢。在這段期間裡,vgod 加入了 committer 的行列(而且他主要做的真的是 OV 的行列模組),

vgod 的另一個貢獻,是做到了 OV 與 SCIM 這個輸入法框架上的橋接(bridging)。 我曾經認為 OV 與 SCIM 之間應該有一個還不錯的合作的可能,但是中間有蠻多複雜的議題,我發現我的時間不足,無法一一深入去瞭解。另一方面,SCIM 的成員可能也一直誤解了 OS X 的特殊性:確實 OS X 上面可以執行 X-Window 環境,那麼將 SCIM 「移植」到 OS X 的 X-Window 上,所涉及的主要是如何滿足 SCIM 的編譯依賴套件(dependency)──一個需要佈建(deployment)高手來解決的問題,因為 SCIM 依賴數量龐大、以 gtk 為主的模組。至於,在 OS X 的原生環境上製作輸入法,那就完全跟 X-Window 是兩回事。曾經有一回,SCIM mailing list 上有成員用英文問我:「等你們完成 OV 與 SCIM 的橋接,你們何時會把 OV 改用 SCIM 的核心?」瞠目結舌之餘,我想這中間大概是出了什麼誤會吧。

後來隨著 kanrupcman 的加入,先前一直在討論的一個議題──關於 OV 有沒有可能移植到 Windows 上──也出現了曙光。或者,客觀地說,挑戰毋寧在「有沒有可能讓 Windows 上的輸入法開發變得更容易」上面。OVIME(Windows 版的 OV)開發速度之快令人驚訝。我在這一段時間正好在外到處旅行,手邊沒有任何 Windows 機器可供測試。看著 OV version control repository 每天都有新的進展,感覺還是蠻特別的:this is an on-going project with a new direction.

其實,從當初只是為了「抓自己的癢」(scratching my own itch),到後來起心動念,想弄一個「可容納多種輸入法的架構」,有時候還是會自問:這其中是不是有任何浮華的意念在推使著?雖然中文輸入法(或輸入法本身)似乎總還有很多很多問題要解決,但大家日常生活不也已經還算使用得平順了?

或者就只是,我已經抓了太多超過自己的癢:OV 帶給我私人的便利,還是那當初寫「香草注音」時的倚天排列選字注音輸入法──一個讓我至今仍然能平順地在 OS X 上從事日常工作的重要基礎。我從開發 OV 的過程中學到非常、非常多,甚至毋寧說所有我「補修」的軟體開發知識,都是因為有了 OV 這樣的計劃才學到的。寫程式畢竟還是一件很快樂的事。而跟一大堆人一起 hack 的經驗:無價。

這一年來我寫了很多很多的 release notes 和一些這樣的心得感想。Autrijus 有一次曾經笑我:「lukhnos 寫一行程式,可以寫兩行感想」。我覺得對於 OV ,我已經開始在重覆老套,越來越像一個喜歡憶往事、卻還想為之決定方向的囉唆的人了。我想我該寫到這裡。It’s the time to pass the baton.

One Response to “To Watch You Grow, Baby: 記 OpenVanilla 週歲前”

  1. on 05 Oct 2005 at 20:01martin

    用户的需求是无止境的(http://www.linuxsir.org/bbs/showthread.php?t=221141),看到天下大同恐怕需要很长一段时间。
    让SCIM有竞争对手未尝不是好事,虽然OV并不是为了这个目的。毕竟,了解MAC OSX的人,尤其是象您这样快速进入状态的,很少!单独作为一个输入法平台来说,OV可能还不能算完美,但是由此软件引发的各种关联事件,的确值得书写一番。就我个人来说,是处在OV精神的感召之下的(曾经想为了解并参与OV拥有一个MOBILE MAC!)。现在我仍然希望能看懂您写的代码,不为什么,只是为了了解代码后面的那种精神!
    我对于OPEN SOURCE的运动虽然有相当长时间的关注,但是却不知道该写什么东西–LINUS是为了FUN,您是为了方便(当然,里面肯定也有很多FUN吧?)虽然各自的原因不同,但是作为自由软件运动的一个浪花,仍然富有传奇色彩,让人神往!

    一行程式,两行感想,三思后行,切莫抛棒(pass the baton)!
    (对于有些生手,感想也许可以帮助更好的理解程式,因为我就希望通过这些感想学到一点什么。)

    使用OV的人很多,但是了解OV的诞生的故事的人不多,把OV的故事叙述出来,让更多的人知道scratching YOUR own itch的好处,应该是有意义的。当然,假如您觉得BABY已经足够成熟而决意退隐,也是一件很完美的事情:)即使如此,我还是愿意继续FOLLOW YOUR STEP,去探索更加美妙动人的地方。