作為程序員你肯定或多或少的接觸過開源項(xiàng)目,開源項(xiàng)目使我們軟件開發(fā)小伙伴避免重復(fù)造輪子斟湃,把別人寫好的代碼或庫直接拿來使用熏迹,可以大大節(jié)省我們的時(shí)間,提高工作效率凝赛,我們都是開源項(xiàng)目的受益者注暗,但是又有多少人對(duì)開源協(xié)議真正了解呢?
多數(shù)人對(duì)待開源項(xiàng)目都是拿來主義墓猎,對(duì)開源項(xiàng)目的開源協(xié)議卻很少關(guān)注(汗捆昏,我曾經(jīng)也是這樣),這可能和國內(nèi)對(duì)知識(shí)產(chǎn)權(quán)不夠重視的文化氛圍有關(guān)毙沾,或是和目前國內(nèi)的軟件開源環(huán)境還是處在初級(jí)階段有關(guān)骗卜,具體原因此處不做深入討論。但我認(rèn)為作為一個(gè)有節(jié)操,有理想的程序員寇仓,應(yīng)該尊重和感激這些為開源項(xiàng)目辛苦付出的分享者們举户,了解與遵守開源項(xiàng)目的開源協(xié)議要求,就是我們尊重他們的第一步遍烦。下面就介紹一下現(xiàn)今主流的開源協(xié)議俭嘁。
什么是開源協(xié)議
開源許可是一種計(jì)算機(jī)軟件和其它產(chǎn)品的許可證,其允許源代碼乳愉,藍(lán)圖或設(shè)計(jì)在規(guī)定的條款和條件下被使用兄淫,修改和共享屯远。允許最終用戶和商業(yè)公司審查和修改源代碼蔓姚,藍(lán)圖或設(shè)計(jì),以滿足他們自己的定制慨丐,好奇心或故障排除需求坡脐。開源許可軟件大多是免費(fèi)提供的(但并非必須如此)。只允許非商業(yè)的(個(gè)人使用的)重新分配或修改的源代碼房揭,通常不被認(rèn)為是開源許可备闲。但開源許可證可能有一些限制,特別是關(guān)于軟件來源的表述捅暴,例如要求保留作者姓名和代碼中的版權(quán)聲明恬砂,或者要求重新分發(fā)許可軟件僅在相同的許可下(如在Copyleft許可中)。一組流行的開源軟件許可證是由開源計(jì)劃(OSI)根據(jù)其開源定義(OSD)批準(zhǔn)的蓬痒⌒褐瑁【Wikepedia】
為什么要制定開源協(xié)議
首先是對(duì)作者的保護(hù),防止知識(shí)成果被惡意利用梧奢。
- 開源協(xié)議中一般都包含免責(zé)聲明(禁止代碼的作者承擔(dān)代碼使用后的風(fēng)險(xiǎn)及產(chǎn)生的后果)狱掂,比如你開源了一個(gè)破解智能鎖的代碼,如果有人利用這個(gè)去盜竊導(dǎo)致他人損失亲轨,你是無需承擔(dān)責(zé)任的趋惨。
其次是對(duì)使用者的保護(hù),方便使用者惦蚊。
- 使用者一看就知道自己允許進(jìn)行哪些操作器虾,不允許進(jìn)行哪些操作。
- 未添加協(xié)議的代碼默認(rèn)是作者保留所有權(quán)利的(對(duì)此不同國家的法律可能稍微存在區(qū)別)蹦锋,這就像一顆定時(shí)炸彈兆沙,如果你在項(xiàng)目中使用了這一份沒有協(xié)議的代碼,原作者只要能證明你未經(jīng)許可使用了他的代碼晕粪,是能夠起訴你的挤悉。
本節(jié)引自GcsSloop的【程序員不可不知的版權(quán)協(xié)議】
如何選擇合適的開源協(xié)議?
由于開源協(xié)議種類眾多,作為普通人很難搞懂它們之間的區(qū)別,即便是常見的協(xié)議大家也不完全知道協(xié)議的內(nèi)容装悲,那么如何快速的選擇一款適合自己的協(xié)議呢昏鹃?如果你是一個(gè)怕麻煩的人,下面的建議或許對(duì)你有有幫助诀诊。
另外Github還專門為開發(fā)者提供了一個(gè)快速選擇開源協(xié)議的網(wǎng)站洞渤,或GcsSloop的漢化版。
主流開源協(xié)議介紹
GPL協(xié)議
即通用性公開許可證(General Public License属瓣,簡稱GPL)载迄。GPL同其它的自由軟件許可證一樣,許可社會(huì)公眾享有:運(yùn)行抡蛙、復(fù)制軟件的自由护昧,發(fā)行傳播軟件的自由,獲得軟件源碼的自由粗截,改進(jìn)軟件并將自己作出的改進(jìn)版本向社會(huì)發(fā)行傳播的自由惋耙。
GPL還規(guī)定:只要這種修改文本在整體上或者其某個(gè)部分來源于遵循GPL的程序,該修改文本的 整體就必須按照GPL流通熊昌,不僅該修改文本的源碼必須向社會(huì)公開绽榛,而且對(duì)于這種修改文本的流通不準(zhǔn)許附加修改者自己作出的限制。因此婿屹,一項(xiàng)遵循GPL流通 的程序不能同非自由的軟件合并灭美。GPL所表達(dá)的這種流通規(guī)則稱為copyleft,表示與copyright(版權(quán))的概念“相左”昂利。
- 通俗點(diǎn)說届腐,就是GPL協(xié)議具有感染性,一旦項(xiàng)目中使用了以GPL協(xié)議開源的代碼页眯,那么項(xiàng)目中的其他部分梯捕,也要遵循GPL協(xié)議,所以GPL不具備商業(yè)友好性窝撵,
- GPL這樣設(shè)計(jì)的目的是為了使開源代碼能夠更好的傳播和被改進(jìn)傀顾,改進(jìn)的代碼不可以閉源,GPL是一個(gè)比較純粹的碌奉、理想主義的開源協(xié)議短曾。
AGPL協(xié)議
原有的GPL協(xié)議,由于現(xiàn)在網(wǎng)絡(luò)服務(wù)公司興起(如:google)產(chǎn)生了一定的漏洞赐劣,比如使用GPL的自由軟件嫉拐,但是并不發(fā)布與網(wǎng)絡(luò)之中,則可以自由的使 用GPL協(xié)議確不開源自己私有的解決方案魁兼。AGPL則增加了對(duì)此做法的約束婉徘。
GPL的約束生效的前提是“發(fā)布”軟件,即使用了GPL成分的軟件通過互聯(lián)網(wǎng)或光盤release軟件,就必需明示地附上源代碼盖呼,并且源代碼和產(chǎn)品也受GPL保護(hù)儒鹿。
這樣如果不“發(fā)布”就可以不受約束了。比如使用GPL組件編寫一個(gè)Web系統(tǒng)几晤,不發(fā)布這個(gè)系統(tǒng)约炎,但是用這個(gè)系統(tǒng)在線提供服務(wù),同時(shí)不開源系統(tǒng)代碼蟹瘾。
AGPL詳細(xì)信息
LGPL協(xié)議
寬松公共許可證(Lesser General Public License)或庫通用公共許可證(Library General Public License)基于 LGPL 的軟件也允許商業(yè)化銷售圾浅,但不允許封閉源代碼。
如果您對(duì)遵循 LGPL 的軟件進(jìn)行任何改動(dòng)和/或再次開發(fā)并予以發(fā)布憾朴,則您的產(chǎn)品必須繼承 LGPL 協(xié)議狸捕,不允許封閉源代碼。但是如果您的程序?qū)ψ裱?LGPL 的軟件進(jìn)行任何連接伊脓、調(diào)用而不是包含府寒,則允許封閉源代碼。
- LGPL較GPL具備一定的商業(yè)友好性报腔。以動(dòng)態(tài)庫的引用方式使用開源軟件是不需要開源商業(yè)項(xiàng)目的所有代碼的。
- 如以源代碼方式使用剖淀,或?qū)Υa做了修改纯蛾,則與GPL協(xié)議類似,要公開相關(guān)的改進(jìn)代碼纵隔。
Apache協(xié)議
Apache Licence是著名的非盈利開源組織Apache采用的協(xié)議翻诉。該協(xié)議和BSD類似,同樣鼓勵(lì)代碼共享和尊重原作者的著作權(quán)捌刮,同樣允許代碼修改碰煌,再發(fā)布(作為開源或商業(yè)軟件)。需要滿足的條件也和BSD類似:
- 需要給代碼的用戶一份Apache Licence
- 如果你修改了代碼绅作,需要在被修改的文件中說明芦圾。
- 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議,商標(biāo)俄认,專利聲明和其他原來作者規(guī)定需要包含的說明个少。
- 如果再發(fā)布的產(chǎn)品中包含一個(gè)Notice文件,則在Notice文件中需要帶有Apache Licence眯杏。你可以在Notice中增加自己的許可夜焦,但不可以表現(xiàn)為對(duì)Apache Licence構(gòu)成更改。
Apache Licence也是對(duì)商業(yè)應(yīng)用友好的許可岂贩。使用者也可以在需要的時(shí)候修改代碼來滿足需要并作為開源或商業(yè)產(chǎn)品發(fā)布/銷售茫经。
Apache協(xié)議詳細(xì)信息
BSD 協(xié)議:
BSD開源協(xié)議是一個(gè)給于使用者很大自由的協(xié)議。可以自由的使用卸伞,修改源代碼褥紫,也可以將修改后的代碼作為開源或者專有軟件再發(fā)布。當(dāng)你發(fā)布使用了BSD協(xié)議的代碼瞪慧,或者以BSD協(xié)議代碼為基礎(chǔ)做二次開發(fā)自己的產(chǎn)品時(shí)髓考,需要滿足三個(gè)條件:
- 如果再發(fā)布的產(chǎn)品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協(xié)議弃酌。
- 如果再發(fā)布的只是二進(jìn)制類庫/軟件氨菇,則需要在類庫/軟件的文檔和版權(quán)聲明中包含原來代碼中的BSD協(xié)議。
- 不可以用開源代碼的作者/機(jī)構(gòu)名字和原來產(chǎn)品的名字做市場(chǎng)推廣妓湘。
BSD代碼鼓勵(lì)代碼共享查蓉,但需要尊重代碼作者的著作權(quán)。BSD由于允許使用者修改和重新發(fā)布代碼榜贴,也允許使用或在BSD代碼上開發(fā)商業(yè)軟件發(fā)布和銷售豌研,因此是對(duì)商業(yè)集成很友好的協(xié)議。很多的公司企業(yè)在選用開源產(chǎn)品的時(shí)候都首選BSD協(xié)議唬党,因?yàn)榭梢酝耆刂七@些第三方的代碼鹃共,在必要的時(shí)候可以修改或者 二次開發(fā)。
BSD協(xié)議詳細(xì)信息
MIT 協(xié)議:
MIT許可證之名源自麻省理工學(xué)院(Massachusetts Institute of Technology, MIT)驶拱,又稱「X條款」(X License)或「X11條款」(X11 License)霜浴,MIT內(nèi)容與三條款BSD許可證(3-clause BSD license)內(nèi)容頗為近似,但是賦予軟體被授權(quán)人更大的權(quán)利與更少的限制蓝纲。
- 被授權(quán)人有權(quán)利使用阴孟、復(fù)制、修改税迷、合并永丝、出版發(fā)行、散布箭养、再授權(quán)及販?zhǔn)圮涹w及軟體的副本慕嚷。
- 被授權(quán)人可根據(jù)程式的需要修改授權(quán)條款為適當(dāng)?shù)膬?nèi)容。
- 在軟件和軟件的所有副本中都必須包含版權(quán)聲明和許可聲明露懒。
此授權(quán)條款并非屬copyleft的自由軟體授權(quán)條款闯冷,允許在自由/開放源碼軟體或非自由軟體(proprietary software)所使用。此亦為MIT與BSD(The BSD license, 3-clause BSD license)本質(zhì)上不同處懈词。MIT條款可與其他授權(quán)條款并存蛇耀。另外,MIT條款也是自由軟體基金會(huì)(FSF)所認(rèn)可的自由軟體授權(quán)條款坎弯,與GPL相容纺涤。
MIT協(xié)議詳細(xì)信息
參考文章:
1.軟件許可證——GPL译暂、AGPL、LGPL撩炊、Apache外永、ZLIB/LIBPNG、MIT
2.作為前端拧咳,你需要了解的開源協(xié)議知識(shí)
3.解析GPL3.0與GPL2.0及其草案的區(qū)別