【這是 ZY 第 12 篇原創技術文章】html
身爲程序員,咱們不可避免的要和開源項目打交道,不論是咱們本身作了些開源項目,仍是使用開源項目,對各類開源協議的瞭解是必要的。
這篇文章旨在短期內讓讀者朋友們對常見的開源協議有了瞭解,在建立本身開源項目時能夠靈活選用協議,在使用開源項目時也能夠避免踩到開源協議的坑。
基於上述目的,文章篇幅不長,若是感受不過癮,建議多讀幾遍~vue
OSI,開發源代碼組織,是一個旨在推進開源軟件發展的非盈利組織。目前受到 OSI 認可的開源協議一共 83 種,具體協議能夠在 OSI 官網 查看。react
咱們在 Github 上建立一個開源項目時,新建一個名爲 LICENSE 的文件時,就會彈出選擇開源協議的按鈕,咱們點進去就能夠看到,Github 默認支持的協議模板。點擊協議會有詳細的介紹。
ios
咱們下面就看看這幾種協議的內容,以及在這幾種協議中如何去選擇。協議的具體內容在這裏不作解讀,由於實在是篇幅不短,先聊聊其中的重點。git
修改代碼須要說明程序員
可用於商業github
小益使用 Apache 協議開源了一個 Android 類庫,只要小張引用類庫時保留了原做者的聲明,並對修改的源碼進行說明,那後續項目開源與否,都是符合協議的。redis
hadoop,tomcatflask
聲明協議bootstrap
容許閉源商業軟件的發佈和銷售
brew
聲明協議
相比 BSD 2.0 新增協議以下: 不能夠用開源代碼的「做者/機構的名字」或「原來產品的名字」作市場推廣
容許閉源商業軟件的發佈和銷售
小益使用 BSD 協議開源了一個 Android 類庫,只要小張引用類庫時保留了原做者的聲明,並對修改的源碼進行說明,那後續項目開源與否,都是符合協議的。
flask,redis,numpy
許可聲明
容許商業化
小益使用 MIT 協議開源了一個 Android 類庫,只要小張引用類庫時保留包含了許可聲明,那後續項目開源與否,都是符合協議的。
vue,react,bootstrap,vscode,electron,axios,terminal
感染
能夠用於商業,可是必須開放源碼
小益使用 GPL 協議開源了一個 Android 類庫,這個時候小張作開發時,本着不重複造輪子的想法,在項目中引用了小益的類庫。項目開發完成之後,小張想把項目上架到 GooglePlay,可是不想開源,這個時候就違反了 GPL 協議。 爲了避免違反協議,小張索性將項目開源,而在選擇開源協議的時候,小張必須選擇 GPL 協議。
GPL 的本質就是生生不息,不斷衍生。
Linux,GCC,scapy
GPL 3.0 相比 2.0 新增了一些條例:
GIMP,Bash,YouCompleteMe
引用類庫無需開源
適合商業軟件
小益使用 LGPL 協議開源了一個 Android 類庫,小張作開發時引用了此類庫。以後小張將項目上架到 GooglePlay 而不開源,是沒有違反協議的。可是小張引用類庫時,是以源碼的形式引用的,那就必需要將項目開源了。
alibaba/jvm-sandbox
網絡交互
AGPL 在 GPL 的基礎上,增長了一條限制,經過網絡與用戶交互,也須要提供源代碼
能夠用於商業,可是必須開放源碼
octotree
修改源碼須要開源
容許閉源商業軟件的發佈和銷售
che
版權集中
容許閉源商業軟件的發佈和銷售
小益使用 MPL 協議開源了一個 Android 類庫,小張對源碼進行修改之後從新發布,修改後的源碼版權也屬於小益。
syncthing,firefox-ios
其實看了上述介紹,瞭解了各個協議之間的區別,咱們基本上也就清楚項目該選哪一種協議了。若是還不清楚,可參照此 網站。
zh.wikipedia.org/wiki/GNU通用公…
www.gnu.org/licenses/ol…
jxself.org/translation…
www.cnblogs.com/onlycxue/ar…
後續會不按期更新五分鐘系列,內容主要集中在一些不太須要深刻的技術點,旨在讓讀者朋友們快速瞭解一些技術概念,