在 GitHub 上,開源項目通常會使用一些常見的開源協議來定義項目的使用、修改和分發規則。以下是目前 GitHub 上最常見的幾種開源協議及其差異和示例說明:
TL;DR
協議 | 寬松程度 | 是否強制開源 | 專利保護 | 適用場景 |
---|---|---|---|---|
MIT | 最寬松 | 否 | 無 | 希望代碼被廣泛使用 |
Apache 2.0 | 寬松 | 否 | 有 | 希望提供專利保護 |
GPL | 嚴格 | 是 | 無 | 希望確保代碼始終開源 |
LGPL | 較寬松 | 部分是 | 無 | 希望代碼被更廣泛集成 |
BSD | 寬松 | 否 | 無 | 希望代碼被廣泛使用且簡單 |
MPL 2.0 | 中等 | 部分是 | 無 | 希望代碼部分開源但允許混合 |
協議詳解
1. MIT License
- 特點:
- 非常寬松,幾乎沒有任何限制。
- 允許用戶自由使用、復制、修改、合并、發布、分發、再授權甚至用于商業用途。
- 唯一要求是保留原始版權聲明和許可聲明。
- 適用場景:
- 適合希望代碼被廣泛使用的開發者。
- 示例:Vue.js 使用了 MIT License 。
- 差異:
- 相較于其他協議(如 GPL),MIT 不強制要求衍生作品也必須開源。
2. Apache License 2.0
- 特點:
- 提供了明確的專利授權條款,保護用戶免受潛在的專利訴訟。
- 允許用戶自由使用、修改和分發代碼,但需要保留版權聲明和許可證文件。
- 明確限制商標使用,不允許用原作者的商標進行宣傳。
- 適用場景:
- 適合希望保護知識產權并提供專利保障的項目。
- 示例:Apache Kafka 使用了 Apache License 2.0 。
- 差異:
- 比 MIT 更加詳細,特別是關于專利和商標的規定。
3. GNU General Public License (GPL)
- 特點:
- 強制性開源,任何基于 GPL 代碼的衍生作品也必須以 GPL 協議發布。
- 用戶可以自由使用、修改和分發代碼,但必須公開源碼。
- 適用場景:
- 適合希望確保代碼始終開源的項目。
- 示例:Linux Kernel 使用了 GPL 。
- 差異:
- 相較于 MIT 和 Apache,GPL 對衍生作品有更強的約束力。
4. Lesser GNU General Public License (LGPL)
- 特點:
- 是 GPL 的一個變種,允許將 LGPL 代碼作為庫鏈接到閉源項目中。
- 衍生作品如果是獨立模塊,可以不公開源碼;但如果修改了 LGPL 庫本身,則必須公開修改后的代碼。
- 適用場景:
- 適合希望代碼被更廣泛地集成到商業項目中的庫類項目。
- 示例:GNU C Library (glibc) 使用了 LGPL 。
- 差異:
- 比 GPL 更寬松,但仍要求對庫本身的修改保持開源。
5. BSD License
- 特點:
- 類似于 MIT,非常寬松。
- 分為兩種主要版本:2-Clause(簡化版)和 3-Clause(禁止用項目名稱做廣告)。
- 要求保留版權聲明和許可證文件。
- 適用場景:
- 適合希望代碼被廣泛使用且不介意閉源衍生作品的項目。
- 示例:FreeBSD 使用了 BSD License 。
- 差異:
- 相較于 MIT,3-Clause 版本增加了對廣告的限制。
6. Mozilla Public License 2.0 (MPL 2.0)
- 特點:
- 是 BSD 系協議和 GPL 系協議的折中。
- 要求對 MPL 覆蓋的代碼部分保持開源,但允許與閉源代碼混合。
- 必須保留版權信息,并公開對覆蓋代碼的修改。
- 適用場景:
- 適合希望代碼部分開源但允許與其他閉源代碼協作的項目。
- 示例:Firefox 使用了 MPL 2.0 。
- 差異:
- 比 GPL 更寬松,但比 MIT 和 BSD 更嚴格。
7. Creative Commons (CC)
- 特點:
- 主要用于非代碼內容(如文檔、圖片、音樂等)。
- 提供多種版本,包括 CC0(完全放棄版權)、CC BY(署名即可使用)等。
- 適用場景:
- 適合非軟件項目或需要靈活授權的內容。
- 示例:Wikipedia 的部分內容使用了 CC BY-SA 。
- 差異:
- 不適用于傳統意義上的代碼項目。