開源許可證教程

阮一峰發表於2017-10-11

作為一個開發者,如果你打算開源自己的程式碼,千萬不要忘記,選擇一種開源許可證(license)。

許多開發者對開源許可證瞭解很少,不清楚有哪些許可證,應該怎麼選擇。本文介紹開源許可證的基本知識,主要參考了 OpenSource.com (12)。

一、什麼是開源許可證

開源許可證是一種法律許可。通過它,版權擁有人明確允許,使用者可以免費地使用、修改、共享版權軟體。

版權法預設禁止共享,也就是說,沒有許可證的軟體,就等同於保留版權,雖然開源了,使用者只能看看原始碼,不能用,一用就會侵犯版權。所以軟體開源的話,必須明確地授予使用者開源許可證。

二、開源許可證的種類

目前,國際公認的開源許可證共有80多種。它們的共同特徵是,都允許使用者免費地使用、修改、共享原始碼,但是都有各自的使用條件。

如果一種開源許可證沒有任何使用條件,連保留作者資訊都不需要,那麼就等同於放棄版權了。這時,軟體可以直接宣告進入"公共領域"(public domain)。

根據使用條件的不同,開源許可證分成兩大類。

  • 寬鬆式(permissive)許可證
  • Copyleft 許可證

三、寬鬆式許可證

3.1 特點

寬鬆式許可證(permissive license)是最基本的型別,對使用者幾乎沒有限制。使用者可以修改程式碼後閉源。

它有三個基本特點。

(1)沒有使用限制

使用者可以使用程式碼,做任何想做的事情。

(2)沒有擔保

不保證程式碼質量,使用者自擔風險。

(3)披露要求(notice requirement)

使用者必須披露原始作者。

3.2 常見許可證

常見的寬鬆式許可證有四種。它們都允許使用者任意使用程式碼,區別在於要求使用者遵守的條件不同。

(1)BSD(二條款版)

分發軟體時,必須保留原始的許可證宣告。

(2) BSD(三條款版)

分發軟體時,必須保留原始的許可證宣告。不得使用原始作者的名字為軟體促銷。

(3)MIT

分發軟體時,必須保留原始的許可證宣告,與 BSD(二條款版)基本一致。

(4)Apache 2

分發軟體時,必須保留原始的許可證宣告。凡是修改過的檔案,必須向使用者說明該檔案修改過;沒有修改過的檔案,必須保持許可證不變。

四、Copyleft 許可證

4.1 Copyleft 的含義

Copyleft 是理查德·斯托曼發明的一個詞,作為 Copyright (版權)的反義詞。

Copyright 直譯是"複製權",這是版權制度的核心,意為不經許可,使用者無權複製。作為反義詞,Copyleft 的含義是不經許可,使用者可以隨意複製。

但是,它帶有前提條件,比寬鬆式許可證的限制要多。

  • 如果分發二進位制格式,必須提供原始碼
  • 修改後的原始碼,必須與修改前保持許可證一致
  • 不得在原始許可證以外,附加其他限制

上面三個條件的核心就是:修改後的 Copyleft 程式碼不得閉源。

4.2 常見許可證

常見的 Copyleft 許可證也有四種(對使用者的限制從最強到最弱排序)。

(1)Affero GPL (AGPL)

如果雲服務(即 SAAS)用到的程式碼是該許可證,那麼雲服務的程式碼也必須開源。

(2)GPL

如果專案包含了 GPL 許可證的程式碼,那麼整個專案都必須使用 GPL 許可證。

(3)LGPL

如果專案採用動態連結呼叫該許可證的庫,專案可以不用開源。

(4)Mozilla(MPL)

只要該許可證的程式碼在單獨的檔案中,新增的其他檔案可以不用開源。

五、常見問題

本節回答一些開源許可證的常見問題。

5.1 什麼叫分發(distribution)?

除了 Affero GPL (AGPL) ,其他許可證都規定只有在"分發"時,才需要遵守許可證。換言之,如果不"分發",就不需要遵守。

簡單說,分發就是指將版權作品從一個人轉移到另一個人。這意味著,如果你是自己使用,不提供給他人,就沒有分發。另外,這裡的"人"也指"法人",因此如果使用方是公司,且只在公司內部使用,也不需要遵守許可證。

雲服務(SaaS)是否構成"分發"呢?答案是不構成。所以你使用開源軟體提供雲服務,不必提供原始碼。但是,Affero GPL (AGPL) 許可證除外,它規定雲服務也必須提供原始碼。

5.2 開源軟體的專利如何處理?

某些許可證(Apache 2 和 GPL v3)包含明確的條款,授予使用者許可,使用軟體所包含的所有專利。

另一些許可證(BSD、MIT 和 GPL v2)根本沒提到專利。但是一般認為,它們預設給予使用者專利許可,不構成侵犯專利。

總得來說,除非有明確的"保留專利"的條款,使用開源軟體都不會構成侵犯專利。

5.3 什麼是披露要求?

所有的開源許可證都帶有"披露要求"(notice requirement),即要求軟體的分發者必須向使用者披露,軟體裡面有開原始碼。

一般來說,你只要在軟體裡面提供完整的原始許可證文字,並且披露原始作者,就滿足了"披露要求"。

5.4 GPL 病毒是真的嗎?

GPL 許可證規定,只要你的專案包含了 GPL 程式碼,整個專案就都變成了 GPL。有人把這種傳染性比喻成"GPL 病毒"。

很多公司希望避開這個條款,既使用 GPL 軟體,又不把自己的專有程式碼開源。理論上,這是做不到的。因為 GPL 的設計目的,就是為了防止出現這種情況。

但是實際上,不遵守 GPL,最壞情況就是被起訴。如果你向法院表示無法履行 GPL 的條件,法官只會判決你停止使用 GPL 程式碼(法律上叫做"停止侵害"),而不會強制要求你將原始碼開源,因為《版權法》裡面的"違約救濟"沒有提到違約者必須開源,只提到可以停止侵害和賠償損失。

(完)

相關文章