近幾年,天天有人張口閉口說開源,而不久前“兒童編程屆”五年級開始學已經晚了的“tensorflow”就是GitHub上2018年最熱門的開源項目。那麼,什麼是開源?什麼是開源項目?什麼是開源協議?以及在碼農屆幾乎無人不知無人不用的GitHub又是什麼呢?
開源(open source),在互聯網領域,可以簡單理解為是“開放源代碼”的簡稱。通常來說,指的是将軟件項目的源代碼向大衆開放,允許大衆獲取、使用、修改和發行。在硬件等其它領域也可以套用開源的概念,本文暫不提。
開源項目(open source project),簡單理解就是,開放源代碼的軟件項目。可以認為,開源項目的産出物是軟件程序,這包括,一個開源項目,可以不斷對一款開源軟件進行維護和升級,或者有可能在一個開源項目中,産出多款不同的開源軟件(但很可能彼此有聯系)。
開源軟件(open source software),直接的字面意思是公開源代碼的軟件,也就是說,如果軟件的源代碼是開源的,那麼這個軟件就可以稱之為開源軟件。不過,對于很多商業公司來說,開源軟件,隻能看作是某個開源項目給出的“軟件示例”而已,因為軟件的源代碼已經開放出來了,那麼這些商業公司,完全可以根據自己的需要,基于這個示例,修改或衍生出真正适合自己的軟件産品。
可以說,開源的意義主要在于合作,通過合作,才能形成圍繞某個開源項目的軟件生态。例如最早也隻最著名的開源項目之一“Linux”操作系統,其成功很大程度上是依靠開源社區為其提供的源源不斷的代碼支持,使其從當年一個人的“小項目”日益壯大起來。
相應的,如果不準備和不允許他人參與自己的項目中,那麼這樣的項目就是私有項目,而即便私有項目所産出的軟件也能夠免費提供出來給大家使用,但這樣的軟件也隻能稱之為免費軟件,而非開源軟件。
接下來重點說說開源協議。
開源軟件雖然通常都是免費的,但并不等于軟件的開發者們(開源社區)完全放棄了自己的權利和對軟件的控制。為了保證開源軟件不被一些商業機構或個人竊取,成為他們不勞而獲的牟利工具,并影響開源項目的長遠發展,開源社區開發出了各種開源協議,用于維護自己的軟件版權。
在開源協議裡面,會詳盡表述使用者在獲得代碼後擁有的權利和義務,包括可以進行何種操作,而何種操作又是被禁止的。
開源協議種類非常之多,并且同一款協議會有很多個變種版本。開源協議規定得太寬松,會導緻開發者們喪失對開源軟件的很多權利,而太嚴格又不便于使用者們的使用以及開源軟件的傳播。
常見的開源協議有:GPL、LGPL、BSD、Apache 2.0、MIT
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。
篇幅有限,不解渴可以關注我們的微信公衆号(kejiwuyoucom)與我們深入交流。認知互聯網,解讀新科技,助力創業創新及傳統企業轉型。
,