2008年4月17日 星期四

開放源碼的回收與再利用:選擇開放源碼的3個關鍵考量

回收再利用已經開放的源碼,說起來很理想,但如何找到符合的專案,並從中選擇,則是一門學問。另外,Google提供了一個開放源碼的搜尋服務──Google Code Search,提供強大的搜尋機制,幫助程式人輕鬆搜尋散落於網路世界各處的開放源碼。

在今天,閱讀他人的程式碼,有很大的動機,是為了重複運用這些程式碼。有現成的輪子,又何苦重頭再造呢?開放源碼社群中,有許多垂手可得的程式碼,只要能夠讀懂,並且懂得如何運用、將它們整合到自己的系統中,就有如得到了天上掉下來的生產力──這正是我們長久以來夢寐以求的。

回收再利用的藝術之所在──利用既有資源,施以最小幅度的修改
他人寫好的現成程式碼,倘若當初開發時的目的,是做為程式庫或應用程式框架,就很適合直接拿來「重複運用(Reuse)」。因為這類型的程式碼,多半在設計的同時,已考慮到用戶端程式人(Client Programmer)的需求,因此保留適度的彈性及擴充的能力,因此,我們取得現成的程式碼之後,毋需做任何修改,便可以立即使用。

不過,除了重複使用的情境之外,還會遇上「回收再利用(Recycle)」的情況。很多時候,我們需要的程式碼,並不是以程式庫或應用程式框架的形式存在,而是存在於某個應用系統之中。

這類應用程式在撰寫時,通常只考慮到自身的需求,並不會為了專案範圍以外的需求,做過多的設計(如果有的話,就成了「過度設計(Over-Engineering)」),使得我們在應用時,不見得容易將現有的程式碼客製成滿足自己需要的長相。也就是說,通常我們得經過某種程度的加工之後,才有可能從其中得到自己所需而且堪用的程式碼。

我把這樣的加工稱為「回收再利用」。

這就是回收再利用的精神──我們能找到的東西,涵蓋了需要的功能,但又多了一些不需要的部分,或許只要稍加變化之後,就能變成想要的東西。因此我們得去除不想要的部分,轉化所需的部分,才能得到確切派得上用場的產物。如何盡可能地利用既有的資源,施以最小幅度的心力,達到想要的目的,就成了這門技巧的藝術。

適合的開放源碼何處尋?問Google!
回收再利用別人的程式碼,說起來很理想,不過,當我們想要運用其中的程式碼時,會遇上一些困難。這些包括了:

● 不知道何處可以找到所需的程式碼
● 有多個可用的對象,不知如何抉擇
● 不能理解想要使用的原始碼是如何運作
● 不知如何從中拆解、整理出所需的部分

如何找到自己所需功能的開放源碼專案呢?我最常使用的方法是利用Google搜尋「XXXX Open Source」,其中XXXX是我想要的功能,例如我想尋找和UPnP有關的開放源碼專案,會搜尋「UPnP Open Source」,在撰寫此文的同時,Google搜尋結果的第一筆,恰好便是libupnp專案(Linux SDK for UPnP Devices),Google十分準確地找到我所需的東西。
GOOGLE 程式碼搜尋
Google提供了一個開放源碼的搜尋服務──Google Code Search,提供強大的搜尋機制,幫助程式人輕鬆搜尋散落於網路世界各處的開放源碼。


除了搜尋引擎之外,我也建議程式人可以留意幾個常見的開放源碼的網路聚落,例如之前提到的www.codeproject.com,或像聲譽卓著的sourceforge.net,聚集了大量的開放源碼專案,並提供極佳的搜尋介面,協助程式人更快速地找到所需的開放源碼專案。

有許多人可能不知道,Google提供了一個開放源碼的搜尋服務。你可以連至www.google.com/codesearch。它是一個專門為開放源碼打造的搜尋服務中心。它所提供的強大搜尋機制,讓程式人得以輕鬆地找到散落於網路世界各處的開放源碼。

6個判斷式幫你找到Mr. Right
通常,我們不會只找出一個符合需求的專案,除非我們所需要的功能,實在太冷門,以致於只能找到少數符合條件的專案。當我們找到多個符合條件的專案時,就必須有所抉擇。那麼,究竟又要依據那些條件來判斷呢?以下是我依判斷的優先序而列出的條件:

1. 版權類型、2. 程式語言、3. 執行平臺及作業系統、4. 採用度、5. 專案規模、6. 專案相依性

開放源碼的版權類型究竟為何,是我們在判斷是否要採用某一開放源碼專案時最重要的一個條件。因為,在許多情況下,我們會試著將開放源碼專案中的原始碼取出,套用至商業運用的程式中,但又私心地不希望開放自己的程式碼。此時,選擇合適的版權類型,便是最重要的一件事。

不同的版權類型允許你應用的方式不盡相同。倘若,對你的應用來說,採用某一版權宣告的程式碼並不能接受時,是完全不能加以考慮的。所以,才會說,選擇合適版權宣告的專案,是抉擇時判斷的第一要務。

此外,開放源碼專案所用的程式語言,則是次要的判斷條件。因為,想要將程式碼整合至專案中,程式碼本身的語言,也必須滿足你的需求。這並不代表著它必須採用和你專案相同的程式語言,因為即使是不同的程式語言,還是存在跨語言的整合方式。例如C#或VB寫成的程式,還是有能力叫用以C/C++寫成的Windows DLL。程式人必須視需求,判斷某一專案所用的程式語言,以專案團隊度判斷是否可接受。

執行平臺和作業系統,說來重要,但也不重要。重要的是,許多程式碼本身是平臺相依性極高的,例如使用到某平臺特有的API或System Call,甚至是特定的程式庫,倘若你想要在不同平臺上整合含有平臺相依性的程式碼,就必須有自行移植的心理準備。

例如,倘若某一段想要使用的程式碼,含有Unix平臺上才有gettimeofday()函式,你開發的系統卻是在Windows上執行時,就得自行發展出gettimeofday()函式,才能成功地移植該段程式碼。以經驗來說,除非是GUI相關的程式碼,否則以C/C++寫成的程式碼,都具有極高的平臺可攜性。而Java可攜性就更高了。

版權類型、程式語言、執行平臺及作業系統三個條件,是比較關鍵性而且明確的判斷條件。而採用度、專案規模及專案相依性,相對而言,影響力較小,而且判斷標準比較不明確。當經過前3個條件過濾後,仍有多個專案在考量內時,你可能會綜合其他3個條件加以判斷。

作者簡介:
王建興
清華大學資訊工程系的博士研究生,研究興趣包括電腦網路、點對點網路、分散式網路管理、以及行動式代理人,專長則是Internet應用系統的開發。曾參與過的開發專案性質十分廣泛而且不同,從ERP、PC Game到P2P網路電話都在他的涉獵範圍之內。


最新主題
4/17 處理器新聞與文章 - 低價筆電熱度升 英特爾Q1財報出爐
藝人譚靜墜樓裸死事件自殺?意外?糾紛?
《High Performance Web Sites 》網頁加速的14條黃金法則
策略和營運(完)
[下載][Blog]zomplog-3.8.2繁體中文
數字轉國字
馬來西亞 旅不如閑著 Lifestyle Management Group Limited
善用PGP加密工具的七大法寶
取得免費的McAfee防毒軟體
我的機車與攝影機
物件導向Javascript - 實作繼承的效果
五朵金花V.S老油條
另人害怕的資安問題
歡迎體驗學校知識庫系統
PHP語言創造者Gutmans炮轟Java已經輸掉Web之戰
三論「博X來」— 訂購商品與結帳是否是同一個使用案例?
今天好爽
SOA對於營運流程的衝擊(下)~加速知識型企業的產生
救回 Exchange Server 上被刪除的郵件
Openads廣告管理與追蹤系統
Microsoft、Yahoo、Google的併購記錄
iT邦幫忙每日發送問答與知識摘要給您
【政府採購】VASCO OTP動態密碼系統正式供貨
準備好了嗎?ERP顧問師告訴你微利時代中小企業如何省錢開步走
HP 1600/2600/2605 Toner chip resetter
【Gogrok】遊戲破不了關時…這樣求救就對啦!
全球效能第一的SSL加速卡
無線網際網路的產業巨變(四)Apple 的策略
各家病毒回報方式與心得
分享至PLURK 噗浪 分享至FACEBOOK 臉書

沒有留言: