為了清楚起見,請勿說「在 GNU GPL 2 授權下」!

當我在 1989 年撰寫 GNU 通用公共許可證(GNU GPL)時,我意識到可能需要進行修改:FSF 有朝一日可能有理由發布新版本。因此,我將許可證稱為「版本 1」,並建立了一個框架,讓使用者能夠將程式升級到後來的許可證版本。

當時對於自由許可證來說,沒有慣用的做法;據我所知,以前從未有人這樣做過。開發者發布了新版本的程式,使用了不同的許可證,也許他們也針對舊版本發布了新版本,提供了在不同許可證下使用的選項,但他們從未建立系統化的方法,為使用者提供選擇對已發布的程式版本使用未來許可證版本的機會。

我不知道開發者會如何回應這項創新,所以我決定讓每位開發者自行選擇是否允許未來的版本。這表示開發者可以僅以 GNU GPL 版本 1 發布程式,或以 GPL 版本 1 或任何後續版本發布。開發者聲明其選擇的方式是在每個原始碼檔案開頭的許可證聲明中。GPL 就是在那裡說明決定的。

自由軟體基金會敦促開發者選擇或任何後續版本,因為這表示使用者可以自由地在 GNU GPL 版本 1 下使用該程式,或在版本 2 下使用(一旦有了版本 2),或在版本 3 下使用(一旦有了版本 3)。如果我們必須製作版本 4,他們也可以自由地在版本 4 下使用。

從那時起,FSF 分別在 1991 年和 2007 年發布了 GNU GPL 版本 2 和版本 3。每個版本都讓開發者選擇堅持僅使用該許可證版本,或允許使用後續的許可證版本。(GPL 3 也允許「代理」選項,指定的網頁可以隨後授權使用特定的未來版本。)

發布具有許可證升級許可的程式對於避免在不同 GPL 版本下發布的程式之間產生不相容性至關重要。

在沒有明確的相容性機制的情況下,兩種不同的著作權許可證幾乎不可避免地是不相容的。這是因為每種許可證都必然要求程式的修改版本以相同的許可證發布。因此,僅以 GPL 版本 2 發布的程式碼無法與僅以 GPL 版本 3 發布的程式碼合併。

GPL 版本之間相容性的機制是以「版本 N 或任何後續版本」發布程式。以 GPL-2.0 或後續版本發布的程式可以與 GPL-3.0 或後續版本下的程式碼合併,因為「3 或後續版本」是「2 或後續版本」的子集。

有些開發者說:「我現在將僅以 GNU GPL 版本 3 發布。當我看到 GPL 版本 4 時,如果我喜歡它,我將重新授權我的程式以允許在版本 4 下使用。」如果您是唯一的作者,並且您仍然活著、健康、可以聯繫到並且在那時關注此事,這將運作良好。但是,如今著作權持續的時間異常長久;在沒有重大改革的情況下,您程式碼的著作權在美國將在您去世後持續 70 年(在墨西哥為 100 年)。您是否已安排您的繼承人在您無法考慮的情況下考慮將您的程式碼重新授權給 GPL 版本 4 的問題?

但即使在您有生之年也會發生麻煩。如果我們在十年後發布 GNU GPL 版本 4,而到那時,已有 50 位其他人添加到您的程式中,僅僅因為您這樣做就以 GPL-3.0-only 發布了他們添加的程式碼怎麼辦?您可以批准 GPL 4 用於您最初發布的程式,但屆時聯繫這 50 位後續開發者以獲得他們允許 GPL 4 使用其新增內容的許可將是一項繁重的工作。

避免這些問題的方法是在最初的許可證聲明中批准未來的 GPL 版本。請在原始碼發行版的每個重要的檔案上放置一個許可證聲明,格式如您正在使用的 GPL 版本的末尾所示。

由於我們以這種方式處理許可證相容性,當人們告訴您程式是「在 GNU GPL 版本 2 下」發布時,他們使程式的授權變得不明確。它是在 GPL-2.0-only 下發布,還是 GPL-2.0-or-later?您可以將程式碼與在 GPL-3.0-or-later 下發布的套件合併嗎?

當 GitHub 等網站邀請開發者在其他許可證選項中選擇「GPL 3」或「GPL 2」,並且不提出未來版本的議題時,這導致成千上萬的開發者使其程式碼的授權不明確。要求這些使用者在「僅限」和「或後續版本」之間做出選擇將引導他們明確其程式碼的授權。它也提供了機會來解釋後者的選擇如何避免未來的不相容性。

諸如「GPL-2.0」或「GPL-3.0」之類的縮寫許可證指示符也會導致混淆。不認識「僅限 2」和「2 或後續版本」之間差異的人員和組織將容易在兩種情況下都寫「GPL-2.0」,而沒有意識到需要做出區分。

因此,當您使用 SPDX 許可證指示符時,請使用以下這些

  • GPL-2.0-only 或 GPL-2.0-or-later
  • GPL-3.0-only 或 GPL-3.0-or-later
  • LGPL-2.0-only 或 LGPL-2.0-or-later
  • LGPL-2.1-only 或 LGPL-2.1-or-later
  • LGPL-3.0-only 或 LGPL-3.0-or-later
  • AGPL-3.0-only 或 AGPL-3.0-or-later
  • GFDL-1.3-only 或 GFDL-1.3-or-later

請勿使用舊的、含糊不清的許可證指示符,這些指示符將被棄用

  • GPL-2.0
  • GPL-3.0
  • LGPL-2.0
  • LGPL-2.1
  • LGPL-3.0
  • AGPL-3.0
  • GFDL-1.3。

在 1989 年,讓開發者選擇 GPL 版本「僅限 1」或 GPL 版本「1 或後續版本」似乎是必須的,但它造成了我們可以更好地避免的複雜性。同時,一些無條件地讓使用者選擇升級到後續許可證版本的許可證已廣泛被接受。這些包括 Mozilla 公共許可證和 Eclipse 公共許可證。每個版本都聲明使用者可以自由地在相同許可證的後續版本(如果有的話)下使用作品。創用 CC 姓名標示-相同方式分享著作權許可證 CC BY-SA 允許使用者在修改作品時升級許可證版本。

也許我們應該在未來版本的 GNU GPL 中轉向這種方法。但這是未來需要思考的事情。

我們感謝 SPDX 決定更改 GNU 許可證系列的簡短標識符,以明確「或後續版本」與「僅限」之間的選擇。即將推出的 SPDX 許可證列表許可證標識符版本將使用上面推薦的標識符。諸如「GPL-2.0」之類的令人困惑的標識符將被棄用。我們要求人們盡快用新的明確的標識符替換它們。

透過使用明確說明僅限任何後續版本的標識符,我們可以讓社群意識到這種差異,並鼓勵開發者清楚地說明他們的決定。