最近因?yàn)楣ぷ飨嚓P(guān),學(xué)習(xí)了下開源license的資料赤兴,這里整理如下妖滔。同時本文本身遵循permissive license,大量參考了兩篇文章桶良,參考資料和作者披露在最后座舍。
開源license分類
開源licensen大體分為兩類:寬松許可(permissive license)和嚴(yán)格許可(copyleft license)
寬松許可
這類許可的核心在于要求使用了開源代碼的軟件要有披露要求(notice requirement),即需要明確指出使用了哪些開源代碼并附上原始作者陨帆,寬松許可主要有
BSD(二條款)
分發(fā)軟件時曲秉,必須保留原始的許可證聲明
BSD(三條款)
分發(fā)軟件時,必須保留原始的許可證聲明疲牵。不得使用原始作者的名字為軟件促銷承二。
MIT
分發(fā)軟件時,必須保留原始的許可證聲明纲爸,與 BSD(二條款版)基本一致亥鸠。
Apache2
分發(fā)軟件時,必須保留原始的許可證聲明识啦。凡是修改過的文件负蚊,必須向用戶說明該文件修改過袁滥;沒有修改過的文件灾螃,必須保持許可證不變。
嚴(yán)格許可(copyleft)
copyleft是GNU基金會的發(fā)起人理查德-斯托曼發(fā)明的一個詞嵌赠,與copyright一詞相對,核心要求在于齿税,阻止任何破壞軟件自由的行為炊豪,具體來說,凡是使用了遵循copyleft許可代碼的軟件牵舱,則整個文件甚至工程必須全部開放并同樣遵循copyleft許可缺虐,從這一點(diǎn)上說,copyleft許可就如同病毒一般慧妄,只要使用一點(diǎn)則整個軟件都要遵循剪芍,同時擴(kuò)散過程中不斷加大遵循范圍。這類license主要有
AGPL
如果云服務(wù)(即 SAAS)用到的代碼是該許可證窖铡,那么云服務(wù)的代碼也必須開源费彼。
GPL
如果項(xiàng)目包含了 GPL 許可證的代碼口芍,那么整個項(xiàng)目都必須使用 GPL 許可證。
LGPL
如果項(xiàng)目采用動態(tài)鏈接調(diào)用該許可證的庫颠猴,項(xiàng)目可以不用開源小染。
MPL
只要該許可證的代碼在單獨(dú)的文件中,新增的其他文件可以不用開源资盅。
開源license限制
分發(fā)(distribution)
分發(fā)是開源license最重要的關(guān)鍵詞之一,如果軟件存在從法人傳遞到其他法人的行為每庆,則稱為軟件分發(fā)今穿,注意這里的主體是法人,因此公司內(nèi)部使用的軟件也是不構(gòu)成分發(fā)的
對于設(shè)計(jì)用來提供云服務(wù)(即SaaS)的軟件腮出,是被認(rèn)為不構(gòu)成分發(fā)的利诺,但AGPL license例外剩燥,也就是說,除了AGPL license侣滩,即使軟件中用到開源代碼变擒,只要是作為云服務(wù)的方式,就不用遵循開源許可策添。
披露要求(notice requirement)
- 所有開源licesen均需要遵循披露要求毫缆,按照嚴(yán)格程度主要包括向用戶披露軟件中包含了開源代碼和披露開源代碼的作者
- 一般形式是在分發(fā)軟件中包含license.txt等形式,但總體原則是能夠清楚無誤地向用戶傳遞license信息
閉源軟件的開源代碼使用策略
以上可以看出浸颓,開源代碼并不是隨意拿來用沒有限制地旺拉,但也不是說只要用了開源代碼就不能閉源,這里分情況討論
有無分發(fā)
將軟件作為無分發(fā)使用
因?yàn)榉职l(fā)地主體是法人晋涣,因此在公司內(nèi)部使用開源軟件和代碼制作研發(fā)工具等行為都不構(gòu)成分發(fā)沉桌,也就可以保持閉源算吩,其他例如提供給公司內(nèi)部使用的軟件如專用內(nèi)部通訊工具等也屬于這個情況將包含開源代碼的軟件云化(SaaS)
除了AGPL以外赌莺,其他license都不將SaaS云華服務(wù)軟件構(gòu)成分發(fā)松嘶,因此對于某些不得不提供給外界作為商業(yè)用途的軟件翠订,可以考慮是否可以云化,這樣就規(guī)避了開源許可
是否為寬松許可
前面可以看出尽超,寬松許可的限制只是披露要求梧躺,而嚴(yán)格許可則幾乎無法保持閉源,因此在不得不使用開源代碼的時候巩踏,盡量選用寬松許可如BSD续搀、MIT下的代碼
【參考資料】
阮一峰:開源許可證基礎(chǔ)知識掃盲
Heather Meeker-9 open source license management rules for startups