- 開源項目成功之道
- (美)約翰·梅爾蒂卡
- 2677字
- 2025-07-11 16:45:20
1.4 開源項目及開源的原因
既然我已經解釋了開源的基本內容(what)及其歷史根源和開源的方式(how),為了完成黃金圈(why-how-what)的解析,現在我們來看看為什么要開源(why)。
我聽說SUSE的Alan Clark曾經將開源描述為“根本上是為自己撓癢的模式”,這意味著參與開源與參與者的動機息息相關。可以想象,這使得開源項目的管理變得具有挑戰性(這是我們將在第5章中深入探討的另一個主題,涵蓋治理模式、引入新的貢獻者以及將貢獻者發展為維護者的方法)。盡管如此,這也使得回答“為什么要開源”這個問題沒有一個明確、通用的答?案。
要了解為什么要開源,最佳方式是查看一些項目并了解這些社群的動機。讓我們來看一些項目,希望能讓你了解開源項目的價值和動?機。
1.4.1 PHP
如果你在20世紀90年代做過任何類型的Web開發,你一定會熟悉CGI腳本的概念(cgi-bin目錄萬歲!)。網頁大多是靜態的,任何交互,如發送表單,都需要一個CGI腳本在后端進行處理。大多數腳本是用Perl編寫的,還有一些是用C編寫的可執行二進制文件。是的,那時的Web更加簡單!
Rasmus Lerdorf在滑鐵盧大學讀書時,為了維護自己的個人主頁而寫了很多相關的腳本。他將自己的實現作為個人主頁/表單解釋器(PHP/FI)發布。隨著時間的推移,這些腳本不斷擴充,并在Zeev Suraski和Andi Gutmans的幫助下,被重寫與重命名,形成了一個首字母縮寫詞“PHP:Hypertext Preprocessor”(這是開源早期維護者在命名項目時極具幽默感的眾多例子之一)。作為一個項目,這是Web開發的一個巨大轉變,即從單獨的表單處理網頁上顯示內容,到能夠將數據庫調用和復雜邏輯等直接嵌入正在處理的網頁?中。
這也讓交互式網頁更易于構建,使任何具備基本編程技能的人都能夠構建網頁應用程序(盡管PHP通常以使用所謂的“意大利面條代碼”構建網頁應用程序,但這可以被視為一種進步的代價)。
關于PHP,我發現另一件有趣的事情是,Lerdorf謙虛地承認他在開始使用PHP/FI時從未打算創建一種編程語言。我也聽過他的訪談,他表示自己感覺作為單一維護者很有壓力,因為許多人向他請求添加新功能或尋求幫助以使其正常運行。今天的開源項目維護者也面臨著同樣的壓力,在第9章中我將進一步探討該問?題。
1.4.2 Blender
計算機圖形學和其他交互式顯示技術是開源的強勢領域之一。事實上,你今天看到的大多數電影或玩的大多數視頻游戲都有開源的基?礎。
Ton Roosendaal是一位荷蘭藝術總監和自學成才的軟件開發者,他于1989年創立了自己的3D動畫工作室NeoGeo。他編寫了一個軟件工具Blender,其組合了各種腳本和工具,用于構建3D作品和視覺藝術。Blender專門面向所謂的創意人群,Roosendaal理解他們在按照客戶的復雜要求快速更改3D項目時所面臨的困難。接下來的幾年里Blender被轉手多次,直到2002年,Roosendaal成立了Blender基金會,并將代碼發布在GNU通用公共許可證下,以確保創意人群永遠可以使用該軟件。迄今為止,Blender被廣泛應用于特效和視覺特效工作流程,以及其他進行3D模型動畫開發的人群?中。
Blender備受關注的原因非常簡單——它是為創意人士創建的工具,并由他們共同構建。Blender的有趣之處在于它的模式,雖然有一個基金會贊助并管理項目自身的運營工作,并雇有一小部分員工,但絕大部分的開發工作都由世界各地的志愿者完成。在第5章中,當我談論開源項目的治理模式時,將會更深入地探討這一模?式。
1.4.3 Zowe
大型機社群中有一個笑話,即今天被認為是非常新穎的每一項技術,早在幾十年前就由大型機實現了。例如,虛擬化技術在1972年由IBM System/370首次引入,但直到21世紀初期才由VMware普及。正如我在本章前面討論的,開源很大程度上都源于早期的大型機操作員和開發者。正如人們常說的,新的就是舊的!
大型機社群面臨的一個挑戰是,與大型機應用程序和數據進行交互的技術,與現代開發者習慣使用的技術截然不同。在2018年,開發者可能會使用Java、Node.js或Python來構建應用程序或集成各種應用程序,而大型機應用程序通常是基于幾十年前的COBOL或FORTRAN代碼構建的。一些接口可能使用描述性狀態遷移(Representational State Transfer,REST),但其他接口可能是自定義編碼的,或與IBM 3270終端交互。這在依賴大型機的組織中造成了分歧,分離了兩組人員,其中一組人員維護大型機環境,而另一組人員則負責維護其他IT基礎設?施。
Zowe是由CA Technologies(2019年被Broadcom收購)、IBM和Rocket Software共同創立的項目,最初的代碼貢獻來自這些公司。Zowe提供了一個框架,用于將大型機應用程序和數據與其他應用程序和工具集成,該框架采用了更常見于非大型機開發者的開發工具和方法。Zowe的動機有兩個方面:一方面,是因為他們需要不同的團隊和方法來處理大型機應用程序和數據,這與他們處理其他計算機系統時完全不同;另一方面,是因為存在著不斷增長的技能差距,即在大型機行業取得成功所需的技能與為其他系統開發軟件所需的技能有很大的差?別。
企業啟動的開源項目通常會有一個學習曲線,因為他們需要適應開源的方法論。雖然最初的參與者對開源不太熟悉,但這個項目可能已經開始擁抱開源模式。我也經常在垂直行業項目中看到這種情況,我們將在后面的章節中深入探討這個話題,就是如何讓你的組織啟動一個開源項目。
1.4.4 PiSCSI
我成長在一個蘋果Macintosh計算機在學校中隨處可見的時代。這些計算機在當時是非常先進的,不僅因為它們的性能好,還因為它們的標志性設計。有一個狂熱的愛好者社群圍繞著這些米色和鉑金色的機器,他們費盡心思地修復這些機器,以保存計算機歷史的重要部分。我恰好是其中一員,目前正在修復一臺1990年左右生產的蘋果Macintosh IIsi,如圖1.1所?示。

圖1.1 我的Macintosh IIsi
蘋果Macintosh計算機和一些其他品牌的計算機使用的硬盤驅動器采用了當時流行的小型計算機系統接口(Small Computer System Interface,SCSI)。幾十年來,硬盤驅動器的容量不僅從當時的20 MB或40 MB增加到今天的1 TB,而且接口也從SCSI發展為并行ATA,現在是串行ATA,這意味著很難找到超過30年歷史的替代硬盤驅動器。一位名為GIMONS的開發者為夏普X68000計算機構建了一個名為RaSCSI的解決方案,它可以使用SD卡和專門的適配器連接到樹莓派,以取代SCSI硬盤驅動器。一群愛好者將該方法應用到其他計算機項目中,采用SCSI硬盤驅動器,并建立了PiSCSI項目。該項目旨在在已有工作的基礎上進行擴展,并添加其他功能,如模擬以太網接口、為可以使用Web界面管理的計算機提供多個磁盤映像,以及其他有用功能,保證即使硬盤驅動器故障,這些計算機仍然可以使?用。
這是一個由愛好者組成的社群試圖解決共同問題的絕佳示例。通過使用常見的、低成本的組件來模擬SCSI硬盤驅動器,經過一段時間的發展,這個社群逐漸滿足了這些愛好者在將老式計算機連接到現代網絡方面的更多需求。它提供了專為樹莓派運行的軟件以及構建所需的自定義硬件的圖表(如果不想那么麻煩,你還可以購買裝配或完全構建的設備套件)。這一切都是以開源的方式進行的,開源有助于將這個龐大的社群聚集在一起,以改進并提供反饋,創造出每個人都可以受益的公共資?源。