會哭的小孩有糖吃 -- FOSS 開發小插曲
常常有朋友問,參與 Free and Open Source Software 開發有什麼樂趣呢?我一時說不上來,但是常常有許多驚喜,特別是對於人際關係的建立有良好的助益,還有,「會哭的小孩有糖吃」這個準則挺好用的,怎麼說呢?這就要提到昨天發生的小插曲。
昨天下班後,我一時興起拿 FreeDesktop 的 fdclock 出來把玩,可是發現 linkage errors,才赫然發現 Ubuntu breezy 裡面已經全面升級到 Cairo 0.5 了,而這個版本跟舊版有 API incompatible 的議題,所以 fdclock 這隻依賴 cairo 0.3 API 的程式就無法執行了。記得之前在 mailing-list 上讀過 [
Cairo 0.5 porting guide],所以就試著修改,不過我弄個三十秒就興趣缺缺,實在麻煩,所以我就跑去 #freedesktop 上面鬧:
23:02 jserv2: hi all
23:02 jserv2: I found fdclock can't get built with cairo 0.5.
23:02 jserv2: Any idea?
23:09 dooky: Why don't you build cairo .5 and call it a day?
喔,好吧,我卯起來改一下,不過看起來不能動:
23:18 jserv2: I hacked fdclock: jserv.sayya.org/misc/j-fdclock.diff
23:18 jserv2: it should be compiled, but still not working with Cairo 0.5. :(
23:19 dooky: lol
23:19 jserv2: anyone could review my changes?
沒多久,Cairo 的作者 Carl Worth (IRC nickname: cworth) 真的幫我 review,並且做出回應:
00:10 cworth: jserv2: This part's broken:
00:10 cworth: cairo_t *cr = (cairo_t *) malloc(sizeof(cairo_t *)); // = cairo_create();
00:14 cworth: As is the replacement for cairo_set_alpha; cairo_show_surface; which should be cairo_set_source_surface (0,0); cairo_paint_with_alpha;
00:15 jserv2: cworth: ohhh, thanks for pointing me!
00:15 * jserv2 is shocked to get the messages from the Cairo guys!
真是好開心阿,Cairo 的作者做了 review,看來很快這個 API porting 就要完成了,所以我準備盥洗睡覺去。早上醒來,看看 IRC log,發現 cworth 已經改好了:
00:42 cworth: jserv2: I've got something now that seems to draw the right things.
00:42 cworth: jserv2: But it's awfully slow on my X server right now, and it would be good to know that I hadn't jusst introduced a bad performance bug.
00:42 cworth: jserv2: Care to try it?
00:44 cworth: http://cairographics.org/~cworth/tmp/fdclock_cairo_0_5_0.patch
帥呆了,咱們來欣賞 fdclock with Cairo 0.5 呈現的效果:

類似的情況,在 FOSS 常常發生,軟體有很多改進的地方,而不相容的問題也時常發生,但是沒關係,我們可以透過 mailing-list 甚至 IRC 作通訊,彼此交流,而且成果是可以累積的,儘管我的 patch 無法正常運作,但是我可以直接請 Cairo 的作者來協助修改,省去很多 try and error 的歷程,這是很美妙的經驗,而我也由 Carl Worth 的 patch 中學習整個 API porting 的項目,非常感謝 :-)
由 jserv 發表於 June 21, 2005 11:59 AM