給程序員的經常使用 開源許可 與 CC 許可 簡明手冊

從程序的版權說開去html

有使用 GitHub 這一類代碼倉庫的同窗想必都有接觸過 License 這個名詞, 在咱們建立 開源項目 的時候, GitHub 會建議爲咱們的項目添加 License, 若是你和 kurisu 同樣不太清楚這些協議之間的區別, 以致因而使用 MIT 許可的常客的話: joy:, 或許下面讀完這些內容, 下一次在選擇 License 的時候, 會有更多選擇.git

本文將從 版權 (Copyright) 開始, 簡述 Copyleft 的誕生, 依次介紹 常見的開源協議, 例如 GPL V3, BSD 等. 在最後會介紹在 博客 和 問答 網站中常見的 CC(Creative Commons) 許可, 或許 下一次你在發表博文的時候就能夠在末尾加上你的 CC 許可.程序員

從 Copyright 到 Copyleft

Copyright 也就是 版權, 對於咱們獨立創做的做品, 咱們做爲它的創做者, 咱們它所有內容的版權. 這樣能夠很好的保障咱們的創做者權益. 可是在 IT 領域, 特別開源軟件運動興起後, 這種十分嚴格的版權制度開始凸顯出它的不足.github

打個比方, 例如在 GitHub 這種平臺, 咱們在一些感興趣的項目上作二次開發後, 再發布, 這在今天是很是常見的一種作法, 可是若是時間倒退到二三十年前, 這將是一場災難, 那時尚未 GitHub 這種平臺, 咱們從論壇得到了源代碼後, 進行二次創做後, 須要徵求原做者意見, 包括在 商業、署名、是否容許使用原做者的名字作宣傳 等方面都須要較好的溝通, 而後再發布. 若是這個軟件很是受歡迎, 進行二次創做的人不少, 那麼這將成爲一場 災難...web

那麼在自由軟件運動中, 開源軟件運動 的 發起者 / 組織者 理查德 · 斯托曼 (Richard Stallman) 提出了 Copyleft. 它是一種利用現有 著做權體制 來保障用戶軟件自由使用的許可方式. 用簡單的話說 Copyleft 就是 用戶能夠在創做者的許可下, 自由的 使用 和 分發 以及 修改, 這樣就免去了不少的溝通成本, 而且最重要的是, 這在 不反對 原有的著做權法的基礎上, 進一步的促進 創做自由, 與保障著做內容的傳播.redis

這裏比較有意思的是, Copyleft 不只名字和 版權的英文 CopyRight 是反過來的, 圖標 也是 版權標誌的 C 朝向左邊.express

Copyleft 起初是在由 GNU 項目 提出並使用, 到實際使用中也就是咱們在 GitHub 所選擇的各類許可, 例如 GPLv3, MIT, Mozilla Public License 2.0 等等. 咱們下面將會一一介紹這些常見的許可.apache

常見的開源許可

開源許可 能夠分爲以下兩大類bash

  • 寬鬆式 (permissive) 許可
    • MIT License
    • BSD License
    • Apache License
    • Do What The F*ck You Want To Public License
  • Copyleft 許可
    • GPL
      • AGPL
      • LGPL
      • Mozilla Public License (MPL)

這些許可都有這些共同的特色swoole

  • 用戶沒有使用限制, 能夠作任何想作的事情
  • 不保證代碼質量,用戶自擔風險
  • 用戶若是將源代碼再次 從新發布, 必須披露原始做者

寬鬆式 許可

MIT

MIT 許可許可 來自 麻省理工學院, 與 GPL 兼容, 能夠與 GPL 做品融合

用戶只須要遵照這一個義務, 就能夠任意的使用該軟件, 甚至可使用原做者的名字來進行軟件促銷, 又或者是能夠修改源碼後閉源.

  • 全部的副本中都要包含該 License 文件 (Wiki 上說是包括著做權聲明和本許可聲明, 可是其實他們都寫在了這個 License 文件裏, 這是一個 MIT License 樣例)
MIT License

Copyright (c) 2019 Amatist_Kurisu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

複製代碼

同時 最初做者 (版權者) 能夠根據本身的需求修改 License 原文的內容再發布, 這和 GPL 系列等許可很不一樣, GPL 系列許可 是不容許 版權者 修改 License 原文內容的.

可是由於這個特性, 因此有可能 版權者 會在 License 中添加更多的約束, 出現不少變種. 例如 FSF 爲 ncurses 的 X11 許可 (MIT 變種) 中, 就不容許 使用 原做者的名字做爲廣告宣傳或者促銷. 因此對使用 MIT 許可的項目, 可能須要檢查一下他的 License 內容.

到 2015 年爲止, 是 Github 上最受歡迎的 許可方式, 使用過 MIT License 的項目包括 Node.js, Nim, Ruby on Rails

BSD

BSD 開源許可的全稱 是 Berkeley Software Distribution , 來自 加州大學伯克利分校, BSD 有 3 目前還在使用的許可, 以及 1 種已經消失在歷史的長河中的許可,

  • 已經再也不使用的許可
    • BSD-4-Clause License (BSD 四句許可)
  • 目前還在使用的許可
    • BSD-3-Clause License (BSD 三句許可)
    • BSD-2-Clause License (BSD 二句許可)
    • BSD-0-Clause License (BSD 零句許可)

BSD 許可後面的序號表明的是這個許可有幾句, 例如 BSD 4 的許可就長這樣.

* Copyright (c) 1982, 1986, 1990, 1991, 1993
* 著做權由加州大學董事會全部。著做權人保留一切權利。
*
* 這份受權條款,在使用者符合如下四條件的情形下,授予使用者使用及再散播本
* 軟件包裝原始碼及二進位可執行形式的權利,不管此包裝是否經改做皆然:
*
* 1. 對於本軟件源代碼的再散播,必須保留上述的版權宣告、此四條件表列,以
*    及下述的免責聲明。
* 2. 對於本套件二進位可執行形式的再散播,必須連帶以文件以及/或者其餘附
*    於散播包裝中的媒介方式,重製上述之版權宣告、此四條件表列,以及下述
*    的免責聲明。
* 3. 全部說起本軟件功能或是本軟件使用之宣傳材料,都必須包還含下列之交
*    待文字:
*        「本產品內含有由柏克萊加州大學及其軟件貢獻者所開發的軟件。」
* 4. 未獲事前取得書面許可,不得使用柏克萊加州大學或本軟件貢獻者之名稱,
*    來爲本軟件之衍生物作任何表示支持、承認或推廣、促銷之行爲。
*
* 免責聲明:本軟件是由加州大學董事會及本軟件之貢獻者以現狀("as is")提供.... <省略>

複製代碼

這個許可看起來其實就是 MIT 許可再增長第三條和第四條, 可是正是由於其中的第三條致使該許可遭到反對. 全部說起本軟件功能或是本軟件使用之宣傳材料,都必須本產品內含有由柏克萊加州大學及其軟件貢獻者所開發的軟件, 若是這個程序只擁有 一個 BSD-4 許可的依賴倒還好, 只須要一行致謝. 可是若是是依賴了大量 BSD-4 許可的軟件, 那致謝名單簡直就是災難了.... 想象一下, 網站最下方很長很長的一段都是致謝名單, 而且, 這些致謝名單須要程序員本身經過腳本或者肉眼統計並添加.

1997 年的 NetBSD 版本中統計了 75 個這樣的致謝. 同時 這個條款於 GNU GPL 不兼容. 因此在 1999 年, 不少的 BSD 許可的版權者刪除了 BSD-4 中的第三句, 新的許可被稱爲 BSD-3(-Clause) 或者 BSD-new.

以後在 FreeBSD 中使用的是更簡單的 BSD-2 許可, 在本來 BSD-3 的基礎上刪除了第三句, 也就是上面 BSD-4 中的第四句. 這一版本的 BSD 許可和 MIT 許可基本一致.

在此以後也出現了 BSD-0, 不過較少人使用該許可. BSD-0 在 BSD-2 的基礎上刪除了許可的第一句和第二句, 僅保留版權聲明和免責聲明.

以上就是 BSD 的發展過程, BSD-4 許可 修改後的 BSD-3 和 BSD-2 是與 GPL 相容的許可

Apache

Apache 許可來自 Apache 軟件基金會 , 起初做爲 Apache 基金會下全部項目的開源許可, 後來許多非 Apache 基金會項目也是用了 Apache 許可.

Apache 許可和咱們剛剛提到的各類許可相比相對嚴格, 它容許用戶 自由使用 / 分發 / 商用 / 修改 軟件, 可是須要遵照下面的規範.

首先 Apache Public License 的聲明不是寫在 License 文件中, 因此你須要在每一個文件的開頭添加一份通告, 不然就不是有效的聲明 相似於下面這樣:

Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

或者你也能夠參考 Swoole 項目, 使用自定義的通告,

/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <mikan.tenny@gmail.com>                        |
  +----------------------------------------------------------------------+
*/
複製代碼

其次, 除了要在根目錄下放置 License 文件外, 還須要放置一個 NOTICE 文件, 放置 通告聲明以及項目中用到的所有的第三方庫的名字, 最好能夠加上做者名字和項目地址. 同時你必須驗證這些第三方庫的許可和 Apache 2.0 相容. 同時若是你修改了這些第三方庫, 則要指出進行了何種修改.

最後若是你須要修改再發佈一個 Apache 許可的軟件, 你須要明確指出進行了何種修改.

Do What The F*ck You Want To Public License

這裏介紹一個比較有意思的許可, Do What The F*ck You Want To Public License, 翻譯成 中文就是, 你 TXD 的想幹嗎就幹嗎公共許可證 :joy: , 該許可只包含版權聲明, 以及一條約束

  • 若是修改了本許可, 必須修改許可名稱

該許可基本就等於直接貢獻到 公有領域. 該許可與 GPL 相容.

筆者的 Kuri-su/CAPTCHA_Reader 項目 最初用的 MIT 許可, 在看到這個有趣的許可後就轉到該許可了: joy:.

Copyleft 許可

GPL

GPL 系列許可 來自 FSF (自由軟件基金會), 初衷是給予終端用戶 運行 | 學習 | 共享 | 修改 軟件的自由, 極力的避免自由軟件私有化. 同時 GPL 許可也包含 免責條款 以及 不爲軟件提供品質擔保.

ex

GPL 許可相比 前面提到的 MIT 和 BSD 許可 複雜不少 (畢竟一篇幾百行的文章: joy:). 總結一下, GPL 有三個特色:

  1. 任何軟件, 只要使用了 GPL 許可保護的軟件 (或者第三方庫), 且向非開發人員發佈時, 軟件自己也就自動成爲受 GPL 保護而且約束的. (GPL 許可原文第 5 部分, 描述集合的那段)
  2. 若是對 GPL 許可保護下的源代碼進行修改, 則修改後發佈的源代碼必須也使用 GPL 許可, 並且不容許附加其餘限制.
  3. 使用 GPL 許可保護的軟件向非開發人員發佈 (二進制包) 時, 必須公開源碼.(GPL 許可原文第 6 部分)

除了這三點以外, GPL 的 License 文本是不容許修改的. 因此若是在你的項目要使用 GPL 協議的話, 也須要像 Apache 許可 那樣, 在每一個文件中添加相似於這樣子的內容的版權聲明. 你須要修改下文 尖括號的部分 的部分.

/* # 版權聲明 This file is part of <Foobar>. Copyright (C) <year> <name of author> # 使用 GPL 許可聲明 <Foobar> is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */
複製代碼

因此 只要使用了 GPL 的包 , 就必須公開源代碼, 並且也會變成 GPL 的一員. 這也就是被吐槽的 GPL 許可 是一種喪屍病毒 :joy:.

ex

除此以外, GPL 不限制商用. 甚至容許在 轉發完整副本 時, 能夠選擇收取必定金額, 也能夠選擇提供技術支持或品質擔保以換取收入.

咱們看到 對於 軟件分發模式 的商業模式 (例如微軟), GPL 能夠很好的約束. 可是隨着 Google,AWS 等雲服務商的興起, GPL 開始出現漏洞. 由於他們自己不發佈軟件, 而是利用軟件在雲端提供服務, 但 GPL 生效的前提是 發佈 軟件, 這種方式繞開了 GPL 所定義的約束. 所以爲了不這個漏洞, 而提出了 AGPL 許可.

AGPL

AGPL 的全稱是 GNU Affero General Public License , 是對 GPL 的一個補充, 他避免了 GPL 和 LGPL 的一個漏洞. 主要針對各類雲服務商.

ex

AGPL 由 Affero 公司發起, 目前發展到 v3, 和 GPL 的版本對應. AGPL 繼承了 GPL 所有的條款, 同時在此基礎上增長了一條.

若是其許可下的軟件與用戶經過網絡進行交互,那麼就須要提供源代碼給用戶,全部的修改也一樣要提供給用戶。
複製代碼

在本身的項目中使用 AGPL 許可發佈, 基本和 使用 GPL 許可發佈同樣, 惟一的不一樣是 License 須要使用 AGPL 的 License.

LGPL

LGPL 全稱 GNU Lesser General Public License, 顧名思義, 是一個弱化的 GPL 許可. LGPL 容許軟件經過類庫引用 (link) 方式使用 LGPL 類庫而不須要開源軟件的代碼. 除此以外, 在其餘部分保持和 GPL 一致.

經過這種方式, LGPL 減低了 傳染性.

使用 LGPL 的方式和 GPL 相似, 不過你須要複製一份 LGPL 的純文本版, 放在叫作 COPYING.LESSER 的文件中.(也就是說, 整體上你須要複製兩份文件, 一份 GPL 許可的純文本版, 一份 LGPL 的純文本版)

ex

到這裏就介紹完了 開源許可, 以後咱們將介紹一下 咱們常常在博客看到的 CC 許可

Creative Commons (常簡稱 CC 許可)

在 2001 年, 擁有和 Copyleft 一樣理念的 CC 許可 (Creative Commons) 出現, 提倡 著做物能夠更廣的流通和修改, 可以使他人據以創做及共享, 並以所提供的許可方式保障以上理念, 目前經常使用於 公開的文章 的版權聲明.

咱們經常會在一些網站上看到 相似於下圖這樣的圖標.

ex

它就是 CC 許可 聲明, CC 許但是一種 公共著做權許可許可 , CC 許可規定了四種 基本元素

  • 署名 (BY)
    • 用戶在使用該做品的同時, 須要 按照做者指定的方式對做品進行許可
  • 非商業使用 (NC)
    • 用戶在使用該做品的同時, 不得以商業目的使用該做品
  • 禁止演繹 (ND)
    • 用戶在使用該做品的同時, 不得修改該做品
  • 相同方式共享 (SA)
    • 用戶在使用該做品的同時, 若是你修改 (派生) 了該做品, 在散播派生做品的同時須要遵照許可,

可使用以上四種元素進行任意組合, 獲得多種許可許可, 不過由於 ND 和 SA 是互斥的兩種許可, 因此一般只有 11 種有效許可.

同時外加一種 CC 0 許可, 採用該許可即表明做者宣佈放棄該做品的一切版權,該做品進入共有領域。:joy:

關於 CC 許可的版本

細心的同窗會注意到, 這個博客的博文也使用了 CC 許可, 後面帶有 4.0 的字樣. 是的, CC 許可也存在版本, 不過對於使用者來講基本沒有太大區別.

最新的 4.0 版(於 2013 年 11 月 25 日發佈)不須要移植就能夠適用於各地的法律,4.0 版並不鼓勵移植,而是但願能做爲一個全球通用的許可方式。有興趣的話能夠查看各個版本原文, 這裏給出 by-nc-sa 各版本的 CC 許可的原文連接.

一些小技巧

若是你須要在你的網站掛上 CC 許可的圖標, 只須要修改下面這個 URL 的許可種類部分便可, 也就是 by-nc-sa , 一般的順序是 by -> nc -> nd/sa ,

https://user-gold-cdn.xitu.io/2019/8/21/16cb4954959167db?w=88&h=31&f=png&s=1888
複製代碼

除了上面到的這些, 還有 BSL, EPL 等的開源許可, 這裏就不詳細介紹了, 有興趣的話能夠自行 Google 瞭解.

網絡上有很是多的關於開源許可和 CC 許可的介紹, 不過我的感受介紹的有些片面並且分散, 且本身理解的不是很明白, 但願本身能總結並記錄下來, 也但願讀者能夠根據這篇文章比較系統的瞭解到開源許可和他們之間的不一樣, 在爲本身的項目挑選許可的時候再也不猶豫.

因爲做者並非法律專業, 對於這些許可的瞭解來自互聯網, 不免有錯誤的理解和疏漏. 有任何的錯誤, 歡迎到 kuri-su/KBlog 提 Issue 敦促做者修改.

PS: 擼完這篇文章, 也算是了了個心結... 每次本身的開源項目選開源許可的時候, 不重要的選 MIT, 重要的選 GPL_V3 , 文章的 CC 許可寫 by-nc-nd-sa :joy:, 終於能夠確定的選擇本身須要的許可了 (擦眼淚).

這篇文章寫的至關累... 主要本身不太懂.. 而後各類資料也比較少... 大段的都是法律文書類的.. 看的很是費勁....

Ref:

opensource.org/licenses/al…

opensource.org/licenses/ca…

zh.wikipedia.org/wiki/著做權

zhuanlan.zhihu.com/p/20641764

creativecommons.org/choose/

zh.wikipedia.org/wiki/知識共享

zh.wikipedia.org/wiki/知識共享許可…

zh.wikipedia.org/wiki/Copyle…

freetstar.com/e79086e8a7a…

choosealicense.com/

www.zhihu.com/question/51…

zh.wikipedia.org/wiki/Affero…

zh.wikipedia.org/wiki/MIT許可證

en.wikipedia.org/wiki/Apache…

univasity.iteye.com/blog/129265…

www.eclipse.org/legal/epl-2…

en.wikipedia.org/wiki/BSD_li…

zh.wikipedia.org/wiki/GNU通用公…

zh.wikipedia.org/wiki/WTFPL

www.rt-thread.org/qa/thread-4…

softwareengineering.stackexchange.com/questions/3…

www.osehra.org/wiki/how-ap…

zh.wikipedia.org/wiki/Mozill…

adoyle.me/blog/how-to…

doc.yonyoucloud.com/doc/sfd-gpl…

baike.baidu.com/item/GPL/23…

jxself.org/translation… (GPL 許可的中文譯本, 翻譯的十分流暢, 推薦閱讀, 本博客已備份該文章)

www.gnu.org/licenses/gp… (如何使用 GPL 的 Gnu.org 官方教程)

原文首發於 kuricat.com

歡迎到 Kuri-su/KBlog 開 Issue 討論

相關文章
相關標籤/搜索