February 23, 2009
long for
廷,
還是喜歡這麼稱呼妳,好似過去的妳未曾消失一般。英文中的片語 "long for" 有「希冀」、「盼望」的意思,不作一般的形容詞使用,也就是說,這與寫為 "be not long for this world" (不久於人世) 裡頭的 "long" (長久) 不同,算是相當特別的用法。最近的生活很平淡,卻也有些非常態的希冀與盼望。
四年前,告知王博士,當結束手頭的計畫時,會優先考慮到此處,為這個產業貢獻微薄的力量,儘管那時相當感激他的知遇之恩,但基於情感的因素,遲遲未能給予肯定答覆。新竹,離苗栗老家不遠的地方,對我而言,是如此陌生,每每騎單車穿越書寫著「新竹科學工業園區」字樣的醒目標誌時,不免在懷著宏大的理想下,掩藏著巨大的虛無與失落感,於我心有著天塹般的距離。去年八月中旬,嘗試去面對那段「痛而喜悅」的生命歷程,履行當初的承諾,來到新竹,一如尼采之於莎樂美。那麼 "long" 背後又是 "for what"?
「橫在你的睡眠和清醒之間的距離,才是最大的距離;橫在你的行為和慾望之間的空間,才是最大的空間」
一次又一次地,讀著紀伯倫《先知的花園》裡頭的一席話,人無法簡約成物理學上的質點,只能主觀地活著,以偏見去臆測衡量人世間的種種。或許,失去的愛,仍是愛,只不過形式不一樣,隨著感受的褪去,會有另一種感覺逐漸明朗,那是記憶。信手拈來,嘗試以撰寫詩歌去追憶,發現最押韻的,還是我間歇的嘆息,是的,得承認,新竹是個傷心地,我分不清楚,所見者是愛情的逗點,抑或句點,只知道落於此處。
每晚身處於竹科某處,抬頭見遼闊的星空,心想,應該會愛上這裡,但回神看看這些死氣沉沉的建築物,就冰凍心頭僅存的溫度了。過去走訪台灣許多地方,一旦居住、旅遊,或者工作一段時日後,即會對當地產生感情,但來這裡逾半年,卻無法接納竹科。
Qing 老大說過:「其實程式設計師的生活和工作已融為一體,儘管單調卻不乏味,還能獨享孤獨」,作為生活寫照的註腳,倒是相當精確。試問,C 程式語言的 "void rewind((FILE *) pLOVE)" 何解?享受孤獨的程式設計師如我,會回覆道:「愛回到最初,不過是一場空」。
記憶成為了最忠實的伴侶,滋潤並擁有它,進而與記憶共舞。置身於低光害的竹科,月色動輒美得令人忘卻憂愁,但就想妳,最寒冷不是冬季,是今年冬天,見不著年冬天那伊人,而這戲碼,重複地發生,直到我成為時空的旅人。彼此道別時,妳在照片背後簽了字跡優雅的 "Elisha",我反覆端詳著,這是個很美的名字,也是希伯來先知之名,若有可能,祈願告知我難解之謎的答案,窺見我走之後的往來起伏;若不可能,那期待著生命終結之際,能全心全意地訴說:「得以誕生、存活於世,就是莫大的恩典」。且讓分離,偶然相遇;且讓幽怨,冰釋塵土泥沙。
「我最擔心你的地方,就是你不重視自己的快樂和感受,需要身邊有親愛的人來點醒那些幸福感;太過重視結果,總是令人灰暗而遍體鱗傷」
2004 年的最後一日,在我們最後的幾封書信中,妳說。那段日子是生命書頁中,被偷偷撕去的一頁,僅存下,枕被上濕了又乾、乾了又溼,一塊又一塊逐漸擴大的淚漬,是霉黃。窗外傳來狗兒的低吟聲,貫穿生命的虛無感,不啻印證叔本華的描述:「人生實如鐘擺,在痛苦與倦怠之間擺動」。過去閱讀《愛有多少》一類的小說集,總是難以想像小說情境與現實的對映。但,現在彷彿懂了,是此,墜入了哀感,生命真有救贖嗎?
盈說:「也許我嫉妒的,是美好的回憶」
電影《愛情靈藥》中,光良所飾演懵懵懂懂的中學生不就說:
好個誠實又理智的結論,是否我們都能進化為,不需要異性,只要理性,即可安然度過人生呢?才喜孜孜於自身的「進化」趨向,畢竟,把愛藏在心底,是通往心碎的捷徑。「你是不是每天都活在夢裡麼?」,電影《周漁的火車》那句台詞,又浮上心頭,難道在此寂靜的夜,連編織個夢囈都會受到質詢嗎?
沙特這麼說,而依據其存在主義,人的誕生,就在沒有獲徵求同意的前提下,被拋擲到一個不確定的處境;又在人不情願的情況下,被帶離這處境 (死亡)。沒有故事是單獨存在的,而故事與故事間,往往會在轉角處相遇。一個故事會銜接上另一個故事,有如河床底的石子一般,相疊、相撞,卻又獨立。總以為,哭累眼睛乾澀,就不會再有淚,這樣就好,但恐怕才送走一個故事,又涉入另一個故事。Purple 對此表示:「能再次對別人感覺到心動,是一件好事,就像是活著的證據一樣」。
生命不在乎我們的願景,成長有其痛苦之處,但必須作取捨。一粒砂,不美,對蚌而言,肉體內嵌入一粒砂,更是不幸。然,珍珠是美的,帶珠的蚌,更是身價百倍。蚌如此,人又何嘗不是?若我們不因異物襲入眼瞼,而自衛性地落淚,又怎能體會生活有如洋蔥,片片剝開之際,總有一片讓我們流淚的道理呢?若沒有因砂粒而起的淚水,就無如蚌的人生中,美麗璀璨的珍珠。文藝復興時期,佩脫拉克曾說:「我是凡人,我只追求凡人的幸福」,除了低喃,我又怎能去面對呢?
在新竹二輪戲院觀賞《Orz 男孩》,不時傳來歡笑聲,但冷冷的淚水,卻不斷拂拭著我的臉。片中關於精神病患與社會觀感的描繪,寫實得讓我掛念著家人的真實案例。出了事,麥克風開始捕捉那些冷冷的話語,或許有熱烈的討論,但各個都彷彿置身事外一般,即便是這個鄉土味濃厚的地方。也許,我們真的高估自己,大部分的時候,什麼都不能作,只能如片中的女孩一般,保持微笑,妄想能頓時跳躍煩惱的深淵... 小孩子心中至少存有「異次元」,而年華已逝的我,竟然連幻想的勇氣也消弭了。
因為眼眶保持溫熱,配戴眼鏡騎單車,則眼前一片霧茫茫,索性摘掉眼鏡,在可見度僅十公尺的狀況下,從新竹市區騎回位於竹科的住所。接受需要被「矯正」的認知十來年,不禁開始質疑自己,是否,自己真正所見之物,都需要以透鏡來「矯正」呢?而,
如此一來,真正的觀感,是否都不再有意義?因為原始的資料,唯有加工與扭曲之後的產物,才是可信的,何真之有呢?
徐志摩〈我所知道的康橋〉寫得貼切:
「同時我們抱怨我們的生活,苦痛,煩悶,拘束,枯燥,誰肯承認做人是快樂?誰不多少地咒詛人生!」
不快樂正來自這個理由:真實的觀感,是需要適度的「矯正」,一旦習慣這些「矯正」後,終將恐懼真實。歌德攀爬高塔因而克服懼高症,那我們呢?該如何面對自身的恐懼?古羅馬詩人 Ovid 不也說過「在遊戲中,我們顯現自己的本性」?所以處於如戲的人生,啃囁著本性。我們有如嗑藥般企盼著色彩,黎明時分起身,抑或不惜長途跋涉,只是為了自太陽之泉中,汲取色彩的繽紛與感動,但最後發現,萬物都像曝光過度,少了邊緣,怎辦?跟著人群走下去吧,就這樣微笑地走到盡頭。
寧靜可致遠,即便在喧囂擾攘的世界,也不乏有人保持恭謹,默默散發著優雅。很久沒夢到跟女生牽手約會,與過去一樣,總是只見側面,不清楚女主角是哪位 ,但身後的夕陽煞是美麗。反覆出現的夢境,在台大椰林大道,走著,不久即踏上單車,大道上只有她與我,僅有似遠似近的跫音,穿梭著。黃昏的夕陽當下不讓人傷感,而以從容淡定的姿態出現,當然,對此情此景來說,還有幾分特有的浪漫。作為現實生活反射的夢,高速地播放著,正如我們渴望認識自己、了解我們的存在,此一崇高的慾念,是人生的奧秘,然,頓時陷入伸手不見五指的長夜。無法辨識自己是在甦醒前、在接受光明的前一刻,還是仍在夢境,幾分篤定,幾分任性地認為,就算這裡是地獄,也要活出天堂的感覺來,於是,我見到她。
夕陽幻化作漫天的緋紅,徐志摩說邂逅是偶然,而邂逅之後呢?是否要比照杜斯妥也夫斯基在《地下室手記》所寫:
「他有意保留著,只為了向自己證明人畢竟是人,而不是鋼琴上的琴鍵」
自忖於濫情與虛妄,因而遲滯不前。上一次有如此的感覺,是八年前的事了,時值與妳相識,那麼,究竟這是否為 Purple 所說「活著的證據」,其實也不甚清楚。理性的我,在有意識之處,奮力逃避這些,而夢中卻誠實地道盡這諷刺的真相。寧可相信,這一切只是綺夢,在虛幻中,有著幾分真實的成份,畢竟,對於生活幾乎沒有交集的她,除了兩次短暫的交談外,就只有網路上零星的對話,總量甚至不及開口向早餐店老闆娘點餐,以及對某些隱喻文字的相同解讀。也許,這個問題的答案,並非理性可解答的,如同為何鍾愛理工生醫背景的女性一般,不需要解釋,也沒有理由。
因為小小程式專案進度停滯不前,而灰心沮喪者如我,應該認真看看作生物醫療研究者,是如何憑著信念,反覆投入沒日沒夜的實驗與分析。閱讀她有限的文字紀錄後,一切疑惑都在漸漸明朗了,也因此對她的人和文字增添了幾分敬重。想起去年至中研院聆聽何美鄉博士的演講〈腸病毒 71 型疫苗研發 - 科學、產業與法規的面面觀〉,受限於對專業術語的認知,整場演講聽得很辛苦,忙著作筆記與查閱資料,但不時被何美鄉博士對生物科技的執著所感動,最後她表示,致力於腸病毒疫苗研發並提高產能,不讓台灣人搶不到疫苗,這席話不僅是堅持的宣示,更得用無數個廢寢忘食的研究日,在上萬種可能的組合中,逐一觀察推敲,進而提出新的實驗模型去驗證想法,非常之艱辛。所有從事生物醫療的研究人員,皆是抱持此等大愛,奉獻於人類的未來,誠偉大焉。
大概這也是令人停滯不前的原因,甚至,不敢保持聯繫。相較之下,我的生活安逸得可悲,除了惆悵外,我無法評論自己,這個荒謬的生命體,僅能引用《宇宙的寂寞心靈》一書的話語,為他們祝福:
「還有每個像柯波拉 (電影《教父》的導演)、福克納(諾貝爾文學獎得主) 和霍金這樣的人,他們或用音樂、或用詩篇、或用冷酷的數學,迸射出輝煌的煙火,那麼完美地表達其觀點,而我們所有人只能站在一旁,讓他們所說服而高呼:對了、對了,就是這樣!」
有緣能認識這樣的人,著實是種福氣,那怕彼此近無交集,不,或許有,只是時機未到,當我得以享受她過去研究付出的果實之際。於是,枝微末節的每一天,原來都像大海一般蘊藏深沉,那樣複雜,如此一來,是誰讓自己動心,也不是很重要的事情了。分隔於這遙遠的時空,"long" 到底有多長呢?享受孤獨的程式設計師或許會說,至少 64 bit (C 程式語言的基本型態:long),抑或,如電影《松鼠自殺事件》所說,在雪山分手的戀人,要隔八億光年,才能再見到對方一面,這才是漫長的 "long",無論如何,這世界總存有某些人事物,值得讓我們去 "long for",我想。
「就算因為想念而悲傷的同時,也還是可以快樂的;就算為另一個人難過的同時,也還是可以給別人幸福的;所以不要一個人追悼悲傷,知道嗎?」
廷,我又讀了妳最後的幾句話,儘管現在已無法與妳對話,但我會去嘗試的。但願每天都可找到迫不及待起床實踐計畫的理由與驅力,當晨光透過眼皮血管促使體內細胞甦醒,我們的靈魂就在迎接希望。就用 Purple 來信中的一段話作結:「過去的不愉快就讓它留在過去,新的一年都會有新的展望,總之是一種心情上的 reboot」。
群 於新竹 金山街
由 jserv 發表於
09:53 AM
|
迴響 (5)
February 07, 2009
新書《Hello, Android: Introducing Google's Mobile Development Platform》

由 Google 與 OHA (Open Handset Alliance) 揭櫫 Android 這個嶄新的移動裝置開發平台以來,引來廣泛的迴響,日前 Ed Burnette 撰寫了新書《
Hello, Android: Introducing Google's Mobile Development Platform]》,已上架並提供部份電子檔案給讀者作參考。

這本書一開始以設計運作於 Android 平台的數獨遊戲 (Sudoku) 為例,由淺而深,介紹如何開發與佈署應用程式、存取圖形系統,以及使用者互動 (D-pad / keyboard input) 等細節,隨後則談及 location-based services (包含 GPS 與 GSM)、感測裝置 (如:三軸加速感測器的軟體控制)、2D / 3D OpenGL ES、網路通訊處理,以及透過嵌入式 SQLite 資料庫作資料處理等等議題。可透過網路下載的試閱章節如下: (於 "Android basics" 一章)
筆者做了一份備份,包含書中的範例程式碼,可參考 [
android]。
由 jserv 發表於
01:00 PM
|
迴響 (1)
February 06, 2009
演講:窮得只剩下 Compiler -- 淺談編譯技術的革命

上個月提到 [
OSDC.TW 2009 徵稿] 的訊息,現在 [
OSDC.tw] 主辦單位如火如荼地張羅於四月 18、19 兩日的議程,可參閱網站的訊息,而小弟也提交一個議程,以下是相關的資訊:
- 中文議程名稱: 窮得只剩下 Compiler -- 淺談編譯技術的革命
- 英文議程名稱:What Compilers do for us -- Introduction to Evolution of Compiler Technologies
- 議程簡介:
誠如易經所謂的窮則變、變則通、通則久,我們可見 compiler 技術的影響無所不在,無論是程式語言範疇、Web 應用程式,甚至是 OpenGL/3D,都潛藏著與 compiler 密不可分的關聯。乍看很難想像其關聯性,但回頭看看 JSP/Servlet 的運作,或者 OpenGL ARB 的 GLSL,或者當紅炸子雞 Google Android 平台的關鍵技術 Dalvik VM,不難理解編譯技術實在是解決工程問題所需的背景。
隨著開放源碼的蓬勃發展,Compiler 相關的技術也獲得空前的成功,且當今的運算型態已變得多元,無論是虛擬化技術、VM、JIT (Just-In-Time) compiler,或者 Binary translator 等等,都是吾人耳熟能詳且為建構當今資訊建設的基礎技術。希望藉由這次的機會,分享過去幾年的開發經驗,希望能和與會的朋友們一同成長。
- 議程大綱:
- 隱藏在我們周遭的 Compiler 技術
- 回首 Compiler 已遠:從 A0 到 LLVM
- 透過 LLVM 建構虛擬機器
- 技術大融通與未來展望
本議程不直接談許多人印象中艱澀的 (dynamic) Compiler 技術,而是從整個廣泛應用的資訊技術中,點明「到處都是 Compiler」的現實。這樣的案例多如牛毛,比方說,現在 Web 2.0 與 Mobile Web Browser 正火熱,為了要能改善 Web 應用程式的效能,Google 與 Apple 兩家公司的工程團隊,各自推出 V8 與 SquirrelFish Extreme 等 Just-In-Time compiler for JavaScript,而 Mozilla Foundation 更是將高速的 JavaScript 引擎當作 Mozilla 2 的重要賣點,強大的自由軟體開發者 [
Jim Blandy] 甚至離開專業 GNU Toolchain 開發公司 CodeSourcery,加入 Mozilla Corporation,就為了致力開發 [
ActionMonkey] (整合 Mozilla 原有 SpiderMonkey 與 Adobe 貢獻的 Tamarin)。自此,這個在瀏覽器平台的戰役,從桌面系統延續到手機,又將從手機移轉到各種不同的資訊裝置上。
但撇開 JavaScript 執行引擎不論,實際上,連 Firefox/Mozilla 底層的向量繪圖函式庫 [
Cairo],也透過 JIT compiler 技術,去提昇整體繪圖的效能與使用者體驗。日前,Dan Amelang 揭露他的開發成果,可參見郵件論壇的訊息 [
JIT for pixman]。[
pixman] 是提供給 X 與 Cairo 使用的 pixel-manipulation 函式庫,顧名思義,就是處理 image compositing 與 trapezoid rasterization 等操作,而在 Dan Amelang 的論文 [
Jitblt: Efficient Run-time Code Generation for Digital Compositing] 給予令人振奮的突破,無疑是個極佳的突破點,我們也可預見 (dynamic) compiler 技術在更多資訊領域的廣泛應用。
所以,當編譯器技術走入新的層次時,就需要更強大且多元的 Toolkit,而我們選定 [
LLVM] (Low Level Virtual Machine),當我們已知曉整個典範移轉 (paradigm shift) 的衝擊,就思考 LLVM 這樣的嶄新架構能給予我們哪些突破限制的可能性。當我們「窮得只剩下 Compiler」之際,該如何才能達到王陽明牧師在《窮得只剩下錢》一書提到的話:
「人生兩條路:『生活的幸福』不等於 『生命的幸福』,兩樣幸福我們都需要」
如此兼顧「生活的幸福」與「生命的幸福」的境界呢?作為一個技術從業人員,唯有不斷追求新知,並認真反省資訊技術如何更有效率且深入的解決問題,才能更掌握「幸福」。以上,期待您的指教,謝謝!
由 jserv 發表於
08:40 PM
|
迴響 (3)
February 03, 2009
AsmJit : C++ 封裝的 Just-In-Time Assembler
[
AsmJit] 是個以 C++ 封裝的 JIT (Just-In-Time) Assembler,目前支援的硬體架構有 x86 與 x86_64,以 MIT X License 釋出。或許讀者對這樣的 Assembler 沒有太大的興趣,但專案卻跟 Google Chrome 瀏覽器引擎有些淵源。怎麼說呢?去年九月,Google 發佈了新一代網路瀏覽器 Chrome,當時幾乎佔據了各大資訊新聞的版面。發佈瀏覽器的同時,還伴隨了一本畫冊,以平實且幽默的和漫畫,闡述新推出的 Chrome 瀏覽器的各功能,包含其中嶄新的 JavaScript (ECMAScript) 執行引擎,搶了風采,讓同等級的瀏覽器頓時失色。由 Google 將其代號命名為 [
V8],強調有如 V8 賽車的高速 JavaScript 執行效率,可見 Google 的開發決心。本文探討的 AsmJit 專案,就是衍生於 V8 的低階 JIT Assembler 實做,而這部份的程式碼,又是根基於 Sun Microsystems 的創作 (1994-2006)。
先回頭看 Google Chrome 最大賣點的 V8 JavaScript 有哪些特點:
- 動態編譯器:JavaScript 在執行時期會動態編譯為機器碼,而非過往透過解譯器 (interpreter) 執行,在強調 Web 2.0 豐富客戶端的今日,意味著可提昇 Web 應用程式的使用者體驗
- 對 method/function 存取做了大量的優化處理
- 強化的記憶體管理機制,特別是 GC (Garbage Collector)
其中,要實做動態編譯器,勢必需要有個強健的 machine code emitter,允許適度在執行時期產生優化的機械碼,V8 提供了相當優雅的 C++ 封裝,允許程式設計師以 C++ 的語法,動態生成 x86 的機械碼,捷克的 Petr Kobalicek 認為 V8 中這部份 JIT Assembler 很有重新使用的價值,於是以這些基礎 (整合 Google 與 Sun Microsystems 的創作),建立 [
AsmJit] 專案。如此的專案可應用在哪些地方呢?不只是 VM (Virtual Machine),其實,高階的繪圖處理,為了有效處理複雜的 3D pipeline,得依據硬體架構的特性,動態生成優化處理的機械碼。又,考量到影像處理,往往不免會有新的 pixel format,對應的操作處理若僅透過一般性的 C 程式碼處理,難以確保可導入最佳的路徑,於是,倘若執行時期可得知 SRC (原始) 與 DST (標的) 的影像資訊,即可透過動態編譯器的技術,安插優化的機械碼,以導入較快的執行路徑,因為此類操作動輒大量地被執行,整體的效益相當可觀。最近,知名的 [
Mesa 3D] 專案,也加入了此等透過 JIT Compiler/Assembler,提昇效能的高階技術。設計編譯器不容易,更何況要動態生成機械碼,遑論複雜的 x86 硬體架構呢?還好,情況沒這麼糟糕,因為 AsmJit 早就很優雅地封裝這些繁瑣的細節,只要程式設計師熟悉基本的 x86 指令集,即可當作寫 inline assembly 一般操作。
現在的 AsmJit 涵蓋包含 MMX/SSE/SSE2/SSE3/SSE4 等 x86/x86_64 機械碼生成,不過,x86 有個大異於其他硬體架構的特性,就是 addressing (定址) 處理,比方說簡單像 "[eax]",或是複雜一些像 "[eax + 4*edx + 16]",透過 C++ 的封裝,可透過 operator overriding 來存取,相當便利,當然,箇中免不了有 magic code 以處理這些 offset / addressing 議題。AsmJit 的 test/ 目錄下,提供一個簡單的範例測試程式,筆者以 Debian GNU/Linux 為例,可如下進行測試 (請先準備 cmake 與必要的編譯環境):
# patch -p0 < asmjit-plat-defs.patch
# cd test
# sh configure-linux-debug.sh
# make
# ./jittest
Result from jit function: 1024
由上可見,在 x86 (IA32) 硬體平台上,預期的執行輸出為 "1024"。至於第一行,是筆者提交給作者的一個 patch,若收錄後,應該不需要施加。以下是測試程式 test/jittest.cpp 的內容,可感受到 AsmJit 的威力:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../AsmJit/AsmJitX86.h"
#include "../AsmJit/AsmJitVM.h"
typedef int (*VoidFn)();
int main(int argc, char* argv[])
{
using namespace AsmJit;
X86 a;
a.push(nbp);
a.mov(nbp, nsp);
a.mov(nax, 1024);
a.mov(nsp, nbp);
a.pop(nbp);
a.ret();
SysUInt vsize;
void *vmem = VM::alloc(a.codeSize(), &vsize, true);
memcpy(vmem, a.pData, a.codeSize());
int result = ( reinterpret_cast<VoidFn>(vmem)() );
VM::free(vmem, vsize);
printf("Result from jit function: %d\n", result);
return 0;
}
為了配合 C 語言與 IA32 的 Calling Convention,所以必須處理 prolog 與 epilog,在 x86 上,就是堆疊操作,於是,在 AsmJit/C++ 優雅的封裝下,main() 函式中,前面簡短的七行程式碼,即動態生成必要的機械碼,因而具備一個 C 語言函式的特性,所以,物件 a (為 class X86 的 instance) 就包含貨真價實的 JIT Assembled 的機械碼。一旦透過 memcpy() 函式,將物件 a 裡頭的機械碼複製到指定的記憶體位址,隨後透過 function pointer 指向該位址並呼叫,即可得到給定的函式回傳值 "1024",上述程式碼列表的 "mov(nax, 1024)" 即等價於 "mov eax, 1024",非常漂亮。
AsmJit 仍在密集開發中,很可能會有巨幅的修改,不過大抵的設計精神是一致的,最後,感謝 AsmJit 作者 Petr Kobalicek 在筆者評估時期給予指導並修正實做的瑕疵。
由 jserv 發表於
12:09 AM
|
迴響 (0)
February 01, 2009
BSD License 與 GPL 的相容性案例 -- qemu
去年在 [
不再囉唆:NetBSD 簡化 BSD 授權條款] 提及 BSD 授權條款的變革,其中 GNU/FSF 發現原本 BSD 授權的問題,導致無法與 GNU GPL 保持相容,從而將原本四個條款的 BSD 授權之中的一項,視為 [
obnoxious BSD advertising clause],主要「不相容」的問題,肇因於 GNU GPL 其「遞迴性」的設計中,不允許增加額外限制 (強制性廣告本質上就是新的限制)。我們要知道,儘管許多以 BSD License 發行的軟體專案,逐漸改採加州柏克萊分校於 1999 年,對 FSF 做出正式回應,刪去原始 BSD 授權條款的第三條「廣告條款」而生的 New BSD License,避開 GNU GPL 的不相容問題,如此的案例仍相當廣泛,本文舉出知名指令集與硬體架構模擬器專案 [
qemu] 中,所發生的 BSD License 與 GNU GPL 的不相容案例,並談論其解決方案。
Qemu 作為一個系統模擬器,除了 CPU 與諸多系統 Bus 外,還得模擬常見的網路裝置,而被模擬的環境一般稱為 "Guest OS",相對來說,提供模擬器執行的環境,就叫 "Host OS",而 Qemu 就扮演讓 Host 與 Guest 兩個 OS 間,網路封包與傳輸得以連結的角色。其中,透過 [
SLiRP] 就是一個很有效的途徑,以下摘錄網頁上的簡介:
"SLiRP is a free SLIP/CSLIP/PPP emulator which allows a normal user with a shell account on a Unix system make it act like a SLIP/CSLIP/PPP account."
而在 [
SLiRP Features] 中提到:
"The TCP/IP code is based on 4.4BSD which is widely regarded as a very stable and complete implementation. ... The TCP/IP code was actually taken from the excellent FreeBSD 2.0 sources."
由上述可見,SLiRP 的開發,很大部份來自加州柏克萊分校的 BSD,後來重新在 FreeBSD 2.0 核心實現,自然是以具備四項條款的 BSD License 發行,原始作者為 Danny Gasparovski,後繼維護者為 Kelly Price,這兩位的名字很重要,下文會再次提及。在 Qemu 開發初期,即包含了一份 SLiRP 的核心元件 libslirp 的原始程式碼,位於原始程式碼的 slirp/ 目錄,一直到最近的 qemu 釋出版本仍有如此的程式碼。而最近,開發者 Anthony Liguori 在 qemu 的 Subversion revision [
6451] 中,移除了 BSD License 的廣告條款,以下是更動紀錄:
Log Message:
-----------
Remove the advertising clause from the slirp license
According to the FSF, the 4-clause BSD license, which slirp is covered under,
is not compatible with the GPL or LGPL[1].
[1] http://www.fsf.org/licensing/licenses/index_html#GPLIncompatibleLicenses
There are three declared copyright holders in slirp that use the
4-clause BSD license, the Regents of UC Berkley, Danny Gasparovski,
and Kelly Price.
Below are the appropriate permissions to remove the advertise
clause from slirp from each party.
Special thanks go to Richard Fontana from Red Hat for contacting
all of the necessary authors to resolve this issue!
中間是一開始筆者陳述 William Hoskins 在 1999 年刪去原始 BSD License 中「廣告條款」的聲明,已於稍早的文章提過,這裡忽略。咱們看看為了解決 4-clause BSD license 與 GNU GPL 不相容的議題,而透過知名 open free software / source license 律師、RedHat 的 Open Source Licensing and Patent 法律顧問 -- Richard Fontana -- 的處理經過,以下是在 SVN 更動紀錄的附帶紀錄,是郵件往返取得授權更動的資訊,首先,致信給 SLiRP 作者 Danny Gasparovski:
Subject: RE: Slirp license
Date: Thu, 8 Jan 2009 10:51:00 +1100
From: "Gasparovski, Daniel"
To: "Richard Fontana"
Hi Richard,
I have no objection to having Slirp code in QEMU be licensed
under the 3-clause BSD license.
Thanks for taking the effort to consult me about this.
Dan ...
同時也要致信給 SLiRP 的維護者 Kelly Price:
Date: Thu, 8 Jan 2009 19:38:56 -0500
From: "Kelly Price"
To: "Richard Fontana"
Subject: Re: Slirp license
Thanks for contacting me, Richard. I'm glad you were able to find
Dan, as I've been "keeping the light on" for Slirp. I have no use
for it now, and I have little time for it (now holding onto
Keenspot's Comic Genesis and having a regular US state government
position). If Dan would like to return to the project, I'd love to
give it back to him.
As for copyright, I don't own all of it. Dan does, so I will defer
to him. Any of my patches I will gladly license to the 3-part BSD
license. My interest in re-licensing was because we didn't have
ready info to contact Dan. If Dan would like to port Slirp back out
of QEMU, a lot of us 64-bit users would be grateful.
Feel free to share this email address with Dan. I will be glad to
effect a transfer of the project to him and Mr. Bellard of the QEMU
project.
我們可見,最合理的解決方式就是,央請原始作者為前述「不相容」的議題,更改授權模式,是此,一旦 qemu 中 slirp 的程式碼改以 3-clause BSD license 發行時,即不再與 qemu 其他以 LGPL 或 GPL 發行的程式碼,產生授權上的衝突,整件事得以圓滿解決。
由 jserv 發表於
11:47 PM
|
迴響 (0)
解析 CuRT 與嵌入式系統設計
新春收到一份相當難忘的禮物,一篇由王佑中博士撰寫的文章,詳盡地分析小弟上個月釋出的 [
CuRT - 精簡易懂的 RTOS],因為是相當仰慕的前輩執筆,當下還未能反應過來,喜悅之情,溢於言表。該文名為 [
Introduction to CuRT_v1],是下學期 [
國立台灣師範大學資訊工程系] 的「嵌入式系統」教材的一部分。
王佑中博士是台灣早年耕耘 GNU/Linux 重要人物,知名代表作品為 chdrv 中文終端機模擬程式,後來赴美深造,為 Realtime Linux 貢獻了極大的心力,主持了 [
RED-Linux] 專案,大幅改善早期 Linux 的即時能力,並提出以下創新特徵:
- a short kernel blocking time
- a quick task response time
- modulized and runtime replaceable CPU scheduler
- a general scheduling framework
而即將開課的「嵌入式系統」課程,想必是高朋滿座,而使用 CuRT 作為教材的前言中,王博士提及:
「對大多數的人而言,一個作業系統和天書可能差別不大。然而事實是如此嗎? 世界上有一大堆小的快不像樣的 OS,jserv 的 CuRT 就是一個例子。像這樣的 OS 理論上只要是資工系統的學生都應該要寫的出來,否則大家花了那麼多的時間學程式語言和作業系統是做什麼用的? 然而如果我們做個調查,我想大多數的人都認為自己寫一個 OS 是不可能的事。這份文件就是用來解答大家的疑惑,讓大家不要再覺得這是不可能的事情了。寫一個 OS 是多麼美好的事,在有限的生命中千萬不要遺漏了它。」
多麼激勵人心的一句話啊!算算從高中開始研讀作業統並著手實做以來,也十多年了,愚昧的我仍利用業餘空檔作著「在有限生命中」的「美好的事」。該文簡單扼要提及作業系統的組成、ARM (CuRT 採用 Xscale SoC) 的初始化與必要的設定、RTOS 的心臟 -- scheduler、ISR/Driver,並穿插若干個值得一試的練習題,非常精彩。
由 jserv 發表於
08:22 PM
|
迴響 (6)
演講:1985 -- 擁抱自由軟體與開放源碼,並開朗面對嶄新授權模式

今年三月 13 日 (週五),小弟將應台灣昇陽電腦公司的邀約,給予名為「1985 -- 擁抱自由軟體與開放源碼,並開朗面對嶄新授權模式」的 keynote 演講,配合一整日的 Sun OpenSource Community Day / JavaTWO09 User Group 活動。
以下是議程資訊 (暫定):
- 講題:1985 -- 擁抱自由軟體與開放源碼,並開朗面對嶄新授權模式
- 簡介:1985 年,自由軟體之父成立 FSF
(自由軟體基金會),致力於自由軟體的研發、推廣,與數位資訊的革命。在二十餘年的推波助瀾後,自由軟體與開放源碼儼然成為本世紀的標竿軟體開發模式與途徑,自此,軟硬體與通訊技術交叉促成前所未有的資訊革命,緊密牽連原本零散的領域。然而,即使邁入這空前的商業與軟體開發的變革,面對隨之而來嶄新的自由軟體或開放源碼授權,尚充斥著模糊的認知,不免得遊走於灰色地帶,本議程則以開源軟體社群經營、軟體開發,以及商業應用的角度切入,探討典範移轉與借力使力的新思維。
我們都知道,Sun Microsystems 一直是網路與資訊技術的領導者,也積極擁抱 open source 發展,並與社群合作,釋出包含 OpenSolaris 與 OpenJDK 等等重量級的專案及相關技術。然而,open source 並非將 source code 釋出即可,而全然是心態與開發模式的轉變,更甚者,過去隱藏不見的議題,卻如雨後春筍般浮現。因為 open source,軟體具備了「生命」,也有了全新的視角,本議程則以開源軟體社群經營、軟體開發,以及商業應用的角度切入,延伸去年分享過的議題「
考量到自由軟體授權的軟體系統規劃 -- 如何借力使力與避開爭議],反思這全新的典範轉移中,我們該用什麼方式去面對、接納,進而擁抱 open source。期待您的指教,謝謝!
整個 Sun OpenSource Community Day 的議程可參閱 [
Java TWO09 OpenSource Community Day :: 大會議程],包含 [
Bruce Eckel] 大師、[
William Yeh]、[
Qing],與 [
良葛格] 等人,都有精湛的演說,精彩可期。
由 jserv 發表於
07:54 PM
|
迴響 (3)