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