# 第 1 小節(jié):什么是開源
# 開源的概念「開源」一詞對應(yīng)英文 Open Source,最初起源于軟件開發(fā)領(lǐng)域,因此也稱為「開放源代碼」,對應(yīng)的軟件則稱為開源軟件(Open Source Software)。除了我們熟知的開源軟件以外,開源的表現(xiàn)形式還有開源硬件(Open Source Hardware)、開放設(shè)計(Open Design)、開放文檔(Open Document)。 # 開源軟件那是不是公開源代碼的軟件就是開源軟件呢? 實際上并不是。按照 OSI 組織 (opens new window)(Open Source Initiative Association)的 OSD 定義 (opens new window),除了公開源代碼,開源軟件的發(fā)行條款還必須符合以下十個條件:
你可以通過查閱OSI官方許可證的目錄 Open Source Initiative 認(rèn)可的開源許可證 (opens new window) ,了解常見的開源許可證。 通過了解這些條件約束,我們可以得出開源軟件的定義:開源軟件是一種技術(shù)和立場中立的使用許可證約束的開放源代碼的軟件。 開源軟件需要保持開放的心態(tài),對任何技術(shù)和立場都保持客觀公正的態(tài)度,而且在開放源代碼時,還需要遵循開源許可協(xié)議,允許任何人使用、拷貝、修改以及重新發(fā)布。開源許可協(xié)議主要分為寬松許可協(xié)議(Apache、BSD、MIT 等)和嚴(yán)格許可協(xié)議(GPL、GPL v3、LGPL、Mozilla 等)兩大類。除此之外,一個優(yōu)秀的可持續(xù)發(fā)展的開源軟件,還需要公開發(fā)布項目技術(shù)文檔和其他材料、二進(jìn)制文件(可選)等,以及擁有一個開放性的社區(qū),接收用戶和開發(fā)者的反饋,共同探討開源軟件的發(fā)展。 # 開源硬件上面我們簡單介紹了一下開源軟件,那么什么是開源硬件呢? 類比開源軟件,你可能會誤以為開源硬件是可以免費(fèi)獲得、自由修改并再分發(fā)的硬件。如果你這么想,你就大錯特錯了,畢竟硬件是有形的,是看得見摸得著的。我們先來簡單看一下 開源硬件協(xié)會 (opens new window)(Open Source Hardware Association)對開源硬件的描述:
這里要劃重點了,OSHWA 在描述開源硬件時使用的是硬件設(shè)計而不是硬件本身。開源硬件的定義是在開源軟件的基礎(chǔ)上進(jìn)行的,這里不再贅述,感興趣的讀者可以在 OSHWA 官網(wǎng)找到開源硬件的完整 定義 (opens new window)。 目前比較有名的開源硬件有 Arduino (opens new window)、樹莓派(Raspberry Pi) (opens new window)、BeagleBone (opens new window) 等等。 # 開源設(shè)計開源設(shè)計是開源項目的另一表現(xiàn)形式,開源設(shè)計的定義是遵循開源許可的可以通過公開渠道獲得的設(shè)計類項目,主要指的是非源代碼類型的項目,比如: icon、UI、畫稿、圖紙等。這些項目也需要遵守開源協(xié)議,并且享受協(xié)議規(guī)章的保護(hù)。 下面提供一個 icon 的設(shè)計,供大家參考。 # 開源文檔開源文檔在開源項目中非常常見,開源文檔的定義是遵循開源許可的可以通過公開渠道獲得的文檔類項目,開源文檔存在于各種項目中,種類覆蓋廣泛,像博客、百科、菜譜、冷知識、項目說明文檔等都可以作為開源文檔進(jìn)行分享。開源文檔常見的開源協(xié)議也有很多,比如我們《開源指北》使用的協(xié)議:CC-BY-NC-SA 協(xié)議。 # 開源的歷史# UNIX提及開源的歷史,不得不從 Unix 說起。 在 1965 年前后,貝爾實驗室(Bell)、麻省理工學(xué)院(MIT)及通用電氣公司(GE)曾共同發(fā)起了 Multics 項目,旨在開發(fā)一個全面的、通用的分時操作系統(tǒng),實現(xiàn)讓大型主機(jī)可以同時提供 300 臺以上的終端機(jī)連接使用的目標(biāo)。然而,到了 1969 年,由于項目進(jìn)度落后、資金短缺,在認(rèn)為 Multics 項目不可能成功之后,貝爾實驗室退出了該項目的研究工作。雖然 Multics 項目沒有取得成功,但是培養(yǎng)出了很多優(yōu)秀的人才,其中就包括肯·湯普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)。
回到貝爾實驗室后,以肯·湯普森為首的研究人員吸取了 Multics 項目失敗的經(jīng)驗教訓(xùn),將 Multics 龐大而復(fù)雜的系統(tǒng)進(jìn)行簡化,實現(xiàn)了一種分時操作系統(tǒng)的雛形,并將其取名為 UNIX。此后十年,UNIX 在學(xué)術(shù)機(jī)構(gòu)和大型企業(yè)中得到了廣泛的應(yīng)用,當(dāng)時的 UNIX 擁有者 AT&T 公司以低廉甚至免費(fèi)的許可將 UNIX 源碼授權(quán)給學(xué)術(shù)機(jī)構(gòu)做研究或教學(xué)之用,許多機(jī)構(gòu)在此源碼基礎(chǔ)上加以擴(kuò)充和改進(jìn)。 由于早期 AT&T 為避免美國司法部起訴它違反《反壟斷法》而簽訂了和解協(xié)議,同意不進(jìn)入計算機(jī)行業(yè),不銷售任何與計算機(jī)有關(guān)的產(chǎn)品。因此從 UNIX 誕生起的前十五年, 學(xué)術(shù)機(jī)構(gòu)和黑客們自由地共享源碼,以分散的方式共同合作開發(fā) UNIX 系統(tǒng)。為后來的自由和開源軟件的意識形態(tài)和社區(qū)誕生過程中起到了奠基性的作用。 轉(zhuǎn)折發(fā)生在 1984 年,由于對 AT&T 的限制法令被解除,AT&T 開始以能獲利的價格銷售 UNIX。UNIX 的源碼依然可用,但 AT&T 將 UNIX 從研究性質(zhì)的項目轉(zhuǎn)變?yōu)橐粋€商業(yè)項目,這在 UNIX 黑客社區(qū)里產(chǎn)生了危機(jī),他們開始尋找一個可替代的類 UNIX 系統(tǒng)。 # GNU實際上,在 UNIX 變成一個商業(yè)項目之前,由于硬件價格的不斷下跌,制造商已經(jīng)開始期望軟件能夠帶來額外的收入。于是,開始出現(xiàn)種種保護(hù)軟件、對其收費(fèi)的措施,越來越多的廠商開始單獨(dú)銷售軟件,也不再提供軟件的源代碼,軟件工業(yè)開始獨(dú)立出來了。1976 年,比爾·蓋茨就曾發(fā)表《致計算機(jī)愛好者的公開信 (opens new window)》,明確提出了軟件版權(quán)(CopyRight)的理念。
1983 年,由于私有軟件的增長和對不再能自由使用計算機(jī)程序的擔(dān)憂,MIT 的理查德·斯托曼(Richard Stallman)開始倡導(dǎo)自由軟件運(yùn)動,并發(fā)起了 GNU 計劃。GNU 是「GNU is NOT UNIX」的無窮遞歸縮寫,其目標(biāo)是構(gòu)建一整套完全由自由軟件構(gòu)成的 UNIX OS 體系。GNU 起初進(jìn)展很順利,開發(fā)出 GLibc、GCC、GDB 等一系列操作系統(tǒng)必備軟件。 隨著推動自由軟件發(fā)展和成熟的愿景日益強(qiáng)烈,理查德·斯托曼意識到僅通過編寫和分享 GNU 代碼是遠(yuǎn)遠(yuǎn)不夠的。于是,在 1985 年創(chuàng)建了自由軟件基金會(Free Software Foundation,簡稱 FSF),其主要工作是運(yùn)行 GNU 計劃,開發(fā)更多的自由軟件。同時,F(xiàn)SF 還創(chuàng)建了保護(hù) GNU 和其他自由軟件項目的法律和制度框架,提出了與 CopyRight 理念針鋒相對的 CopyLeft(許可復(fù)制權(quán))理念,其表現(xiàn)形式為 GPL,即公共許可證(General Pubic License)。 # Linux1991 年,林納斯·托瓦茲(Linus Torvalds)公開發(fā)布了一個類 UNIX 操作系統(tǒng)內(nèi)核 —— Linux,并接受 CopyLeft 理念。從 Linux 0.12 版本起,Linux 內(nèi)核開始采用 GPL 許可證的新版權(quán)聲明。雖然 Linux 內(nèi)核并不是 GNU 計劃的一部分,但由于 HURD 內(nèi)核進(jìn)展緩慢,使得 Linux 得到廣泛關(guān)注并得以快速發(fā)展。GNU 與 Linux 的發(fā)展,可以說是相輔相成,因此 我們通常把使用 Linux 內(nèi)核并且大量使用 GNU 組件的操作系統(tǒng)發(fā)行版稱為 GNU/Linux。
正是 Linux 的出現(xiàn),使得自由軟件運(yùn)動有了自己可以與 Microsoft 的 Windows 相抗衡的操作系統(tǒng)。自由軟件運(yùn)動初戰(zhàn)告捷。但是,自由軟件運(yùn)動關(guān)于自由的追求,畢竟和現(xiàn)實的商業(yè)氛圍格格不入,帶有著過于理想化的色彩。這種反商業(yè)的信條,讓一些本來也反對私有軟件的人士對自由軟件敬而遠(yuǎn)之。正是在這種背景下,一部分原有自由軟件運(yùn)動人士,開始嘗試將理想的自由軟件與現(xiàn)實的商業(yè)氛圍進(jìn)行某種銜接。 # 自由軟件和開源軟件1998 年,埃里克·雷蒙德(Eric Raymond)等人成立了一個名為開源促進(jìn)會(Open Source Initiative,簡稱 OSI)的組織。為了減少意識形態(tài)上的溝壑,以及「自由(Free)」一詞造成免費(fèi)軟件的誤解。OSI 組織決定從「自由軟件」中去掉了「自由」一詞,使用「開源軟件」(Open Source Software)作為共通名稱,并創(chuàng)建了自己的開放源碼的定義,以及自己的一套許可證。
正因如此,自由軟件運(yùn)動和開源軟件運(yùn)動有著密不可分的關(guān)系,兩者的根本差別在于它們看待世界的方法。開源軟件運(yùn)動的理念更傾向于解決實際問題,既抓住了私有軟件的痛點,又實現(xiàn)了與商業(yè)的融合。 # 開源、Git和代碼托管平臺前面提到,開源軟件是允許自由復(fù)制和重新分發(fā)的,那么分散的開發(fā)者之間是如何協(xié)作的呢?尤其是 Linux 這樣依靠全世界熱心的志愿者參與的項目。其實早年(1991-2002 年間)世界各地的志愿者是通過 diff 的方式把源代碼補(bǔ)丁發(fā)給 Linus,然后由 Linus 本人通過手工方式合并代碼。直到 2002 年,Linux 項目組才開始啟用一個專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護(hù)代碼。 但好景不長,2005 年,開發(fā) BitKeeper 的商業(yè)公司結(jié)束了與 Linux 內(nèi)核開源社區(qū)的合作。于是 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)決定開發(fā)自己的版本控制系統(tǒng) —— Git (opens new window) 。很快,Linux 內(nèi)核的源碼已經(jīng)由 Git 全面管理了。Git 是完全分布式的,同時擁有強(qiáng)大的代碼管理能力,支持離線操作和非線性分支管理,使用 Git 可以讓散布各地的開發(fā)者更加高效地協(xié)同工作,可以說,Git 的出現(xiàn)極大地推動了開源的發(fā)展。
2008 年,GitHub 網(wǎng)站上線了,它為開源項目免費(fèi)提供 Git 存儲,無數(shù)開源項目開始遷移至 GitHub。GitHub 的出現(xiàn)讓開源的工作方式變得更簡單和有趣了。如今,每天都有無數(shù)來自世界各地的開發(fā)者在 GitHub 上進(jìn)行交流,Github 已經(jīng)成為一個包含問題追蹤和版本控制的特殊社交網(wǎng)絡(luò)。 初學(xué)者容易混淆 Git 和代碼托管平臺的概念。Git 是版本控制系統(tǒng),開發(fā)者可以通過 Git 在本地工作空間建立項目倉庫,每一個 Git 倉庫都會包含一個 而代碼托管平臺,比如 GitHub (opens new window)、GitLab (opens new window)、Bitbucket (opens new window)、Gitee (opens new window) 等,則是基于 Git 的代碼托管平臺,通過網(wǎng)絡(luò)為用戶提供 Git 倉庫托管服務(wù)。得益于 Git 分布式的特性,Git 代碼托管平臺上的倉庫通常充當(dāng)遠(yuǎn)程倉庫的角色,便于多個開發(fā)者之間的同步。在此基礎(chǔ)之上,代碼托管平臺還提供了許多協(xié)作功能,將版本管理、Bug 跟蹤、代碼審查、郵件列表、IRC 等眾多功能組合在一起,以實現(xiàn)更高效的協(xié)同開發(fā)。簡單來說,代碼托管平臺不僅僅提供代碼托管服務(wù),還有項目管理,甚至社交等功能。 總的來說,Git 和代碼托管平臺有直接關(guān)聯(lián),但又有許多不同的地方。關(guān)于 Git 和代碼托管平臺的操作,將在后續(xù)章節(jié)展開描述。 # 小結(jié)不會寫代碼也可以參與開源嗎?相信你在讀完這篇文章后,在自己心中應(yīng)該有了答案。 當(dāng)然,答案是肯定的。 從自由軟件運(yùn)動和開源文化的發(fā)展來看,我們會發(fā)現(xiàn)其實它是一場社會運(yùn)動,是一種生產(chǎn)方式的革新。開源運(yùn)動旨在利用開源軟件的價值和分散的生產(chǎn)模型,為其社區(qū)和行業(yè)的問題尋找新的解決方式。之所以首先出現(xiàn)在軟件領(lǐng)域,是因為軟件作為一個新興領(lǐng)域,所受阻力相對較小,同時軟件可以依托網(wǎng)絡(luò)進(jìn)行異步協(xié)作和分發(fā),大大減少了時間和空間的差異以及獲取成本。但從涉獵范圍來看,開源除了適用于軟件領(lǐng)域以外,在開源硬件、開源設(shè)計、開源文檔等領(lǐng)域也有足夠的發(fā)揮空間。 時至今日,開源已經(jīng)成為一種超越軟件生產(chǎn)界限的運(yùn)動和工作方式?!冈础沟暮x也從「源代碼」擴(kuò)展到各類「資源」。像文中提到的硬件領(lǐng)域,隨著 Arduino 和樹莓派的流行,如今我們對「開源硬件」一詞已經(jīng)不陌生了。還有許多與軟件源代碼具有相同傳播屬性的各類設(shè)計文檔,比如書籍、博客、食譜、配方、照片、音頻和視頻制品等資料。非營利性組織 Creative Commons 的 CC 許可協(xié)議就是專門應(yīng)用于此類著作權(quán)法的保護(hù)。 開源與我們息息相關(guān),即便你不寫代碼,我們也期望大家能夠參與開源(強(qiáng)烈建議)!愿你在開源領(lǐng)域乘風(fēng)破浪,所向無前! # 參考資料
# 本部分內(nèi)容貢獻(xiàn)者阿基米東 (opens new window)、雪山凌狐 (opens new window)、Nicholas Zhan (opens new window)、我是XXX (opens new window)、WhitePaper (opens new window)、brycen (opens new window)、taotieren (opens new window)、西狩 (opens new window)
|
|