什麼是開源、開源項目、開源軟件、開源協議與GitHub?

近幾年,天天有人張口閉口說開源,而不久前“兒童編程屆”五年級開始學已經晚了的“tensorflow”就是GitHub上2018年最熱門的開源項目。那麼,什麼是開源?什麼是開源項目?什麼是開源協議?以及在碼農屆幾乎無人不知無人不用的GitHub又是什麼呢?

開源(open source),在互聯網領域,可以簡單理解為是“開放源代碼”的簡稱。通常來說,指的是將軟件項目的源代碼向大眾開放,允許大眾獲取、使用、修改和發行。在硬件等其它領域也可以套用開源的概念,本文暫不提。

開源項目(open source project),簡單理解就是,開放源代碼的軟件項目。可以認為,開源項目的產出物是軟件程序,這包括,一個開源項目,可以不斷對一款開源軟件進行維護和升級,或者有可能在一個開源項目中,產出多款不同的開源軟件(但很可能彼此有聯繫)。

開源軟件(open source software),直接的字面意思是公開源代碼的軟件,也就是說,如果軟件的源代碼是開源的,那麼這個軟件就可以稱之為開源軟件。不過,對於很多商業公司來說,開源軟件,只能看作是某個開源項目給出的“軟件示例”而已,因為軟件的源代碼已經開放出來了,那麼這些商業公司,完全可以根據自己的需要,基於這個示例,修改或衍生出真正適合自己的軟件產品。

開源社區(open source community),為某個開源項目的開發成員提供的一個學習和交流的空間。由於開源項目常常需要散佈在全世界的開發人員共同參與推進,所以開源社區就成了他們溝通交流的必要途徑。

開源協議(Open Source License),是指開源軟件所遵循的許可協議,獲得了開源軟件的用戶,需要在該協議的允許範圍內對軟件的源代碼進行使用、修改和發行(包括以盈利為目的商業發行)。

GitHub,是一個面向軟件項目的託管平臺,可以用於託管各種類型的軟件項目,包括開源項目和私有項目。由於大量開源項目基於GitHub進行託管,方便來自世界各地的開發人員共同工作以及獲取開源軟件,所以在開源項目領域,GitHub的影響力很大,是開源項目的首選託管平臺。

用一句話串聯一下這幾個概念:在GitHub上,發佈了一個軟件項目,是開源的,這個開源項目會產出一款使用了MIT開源協議的開源軟件供大家免費獲取,如果想加入這個開源項目共同工作,可以來這個項目的開源社區參與討論,網址是:xxx.xxx.xxx

什麼是開源、開源項目、開源軟件、開源協議與GitHub?

可以說,開源的意義主要在於合作,通過合作,才能形成圍繞某個開源項目的軟件生態。例如最早也只最著名的開源項目之一“Linux”操作系統,其成功很大程度上是依靠開源社區為其提供的源源不斷的代碼支持,使其從當年一個人的“小項目”日益壯大起來。

相應的,如果不準備和不允許他人參與自己的項目中,那麼這樣的項目就是私有項目,而即便私有項目所產出的軟件也能夠免費提供出來給大家使用,但這樣的軟件也只能稱之為免費軟件,而非開源軟件。

接下來重點說說開源協議。

開源軟件雖然通常都是免費的,但並不等於軟件的開發者們(開源社區)完全放棄了自己的權利和對軟件的控制。為了保證開源軟件不被一些商業機構或個人竊取,成為他們不勞而獲的牟利工具,並影響開源項目的長遠發展,開源社區開發出了各種開源協議,用於維護自己的軟件版權。

在開源協議裡面,會詳盡表述使用者在獲得代碼後擁有的權利和義務,包括可以進行何種操作,而何種操作又是被禁止的。

開源協議種類非常之多,並且同一款協議會有很多個變種版本。開源協議規定得太寬鬆,會導致開發者們喪失對開源軟件的很多權利,而太嚴格又不便於使用者們的使用以及開源軟件的傳播。

常見的開源協議有:GPL、LGPL、BSD、Apache 2.0、MIT

什麼是開源、開源項目、開源軟件、開源協議與GitHub?

1、GPL

Linux就是採用了GPL協議。GPL協議允許代碼的獲取、代碼的免費使用和引用、代碼的修改和衍生,但要求對修改和衍生代碼的進行開源,不允許修改和衍生的代碼做為私有閉源的商業軟件發佈和銷售。

這也就是為什麼我們能用各種免費的linux操作系統,以及linux上各種各樣的由個人,組織,以及商業軟件公司開發的免費軟件了。

GPL協議的主要內容是,只要在一個軟件中使用到了包含GPL 協議的產品(GPL類庫),則該軟件產品必須也採用GPL協議,既必須也是開源和免費,這就是所謂的“傳染性”。

由於GPL嚴格要求使用了GPL類庫的軟件產品必須使用GPL協議,對於使用GPL協議的開源代碼,商業軟件或者對代碼有保密要求的部門就不適合集成/採用作為類庫和二次開發的基礎。

2、LGPL

LGPL是GPL的一個為主要為類庫使用設計的開源協議。和GPL不同,LGPL允許商業軟件通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟件的代碼。這使得采用LGPL協議的開源代碼可以被商業軟件作為類庫引用併發布和銷售。

但是如果修改LGPL協議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須採用LGPL協議。因此LGPL協議的開源代碼很適合作為第三方類庫被商業軟件引用,但不適合希望以LGPL協議代碼為基礎,通過修改和衍生的方式做二次開發的商業軟件採用。

3、BSD

BSD開源協議是一個給予使用者很大自由的協議。開發者可以自由使用和修改源代碼,也可以將修改後的源代碼作為開源或者專有軟件再發布。但是有以下幾個要求:

如果再發布的產品中含有源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。

如果再發布的只是二進制類庫/軟件,則需要在類庫/軟件的文檔和版權申明中包含原有代碼中的BSD協議。

不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由於允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發佈和銷售,因此是對商業集成很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD協議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發。

4、Apache 2.0:

Apache Licence 2.0的簡稱,Apache Licence是著名的非盈利開源組織Apache採用的協議。該協議和BSD類似,同樣鼓勵代碼共享和最終原作者的著作權,同樣允許源代碼修改和再發布。但是也需要遵循以下條件:

需要給代碼的用戶一份Apache Licence。

如果修改了代碼,需要再被修改的文件中說明。

在衍生的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議,商標,專利聲明和其他原來作者規定需要包含的說明。

如果再發布的產品中包含一個Notice文件,則在Notice文件中需要帶有Apache Licence。你可以再Notice中增加自己的許可,但是不可以表現為對Apache Licence構成更改。

Apache Licence也是對商業應用友好的許可,使用者也可以在需要的時候修改代碼來滿足並作為開源或商業產品發佈/銷售。

5、MIT:

MIT是和BSD一樣寬泛的許可協議,源自麻省理工學院(Massachusetts Institute of Technology, MIT)。使用MIT協議的開源軟件作者只保留版權,而對使用者無任何其它限制。MIT與BSD類似,但是比BSD協議更加寬鬆,是目前最少限制的協議。這個協議唯一的條件就是在修改後的代碼或者發行包中包含原作者的許可信息,且適用於商業軟件。使用MIT的軟件項目有:jquery、Node.js。

什麼是開源、開源項目、開源軟件、開源協議與GitHub?

篇幅有限,不解渴可以關注我們的微信公眾號(kejiwuyoucom)與我們深入交流。認知互聯網,解讀新科技,助力創業創新及傳統企業轉型。


分享到:


相關文章: