MySQL 開源許可研究

愛可生雲資料庫發表於2022-06-03

作者:陳書俊

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。


1、Oracle 為什麼可以對 MySQL 採用雙許可證模式(GPLv2 開源許可證和商業許可證)釋出?

在 MySQL 中引用的第三方原始碼,全部都基於不具備許可證傳染性的寬鬆開源許可證釋出,或者基於雙許可證釋出,Oracle 在其開源版 MySQL 中對此類雙許可證的第三方程式碼 選擇使用 GPLv2 許可證,在閉源的商業版 MySQL 中對此類雙許可證的第三方程式碼選擇使 用更為寬鬆的許可證。

例如 MySQL 在引用 Memcached.pm 的原始碼時有如下宣告(Artistic license 就是更 為寬鬆且沒有傳染性的開源許可證,允許修改或引用其原始碼後不開源):

Memcached.pm

Memcached.pm

Memcached.pm is licensed
under the Perl license.

Oracle may use, redistribute and/or modify this code under the terms of either:

a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or

b) the "Artistic License" which comes with the Expect/pr code.

Oracle elects to use the GPLv2 for version of MySQL that are licensed under the GPL.

Oracle elects to use the Artistic license for all other (commercial) versions of MySQL.

A copy of the GPLv2 and the Artistic License (Perl) 1.0 must be included with any distribution. This component is licensed under the GNU GPL license, version 2.0. This component is licensed under Artistic License (Perl) 1.0

基於以上事實,再加上當第三方向 Oracle MySQL 貢獻原始碼時,都必須簽署 Oracle 公司 的 OCA 協議(Oracle Contributor Agreement),宣告放棄所貢獻的原始碼的智慧財產權, 這部分原始碼的智慧財產權歸 Oracle 公司所有,於是 Oracle 公司對 MySQL 原始碼擁有了絕對的控制權與智慧財產權,Oracle 公司有權決定 MySQL 基於何種許可證分發。很多人或許有些疑惑:為什麼明明 GNU 的 GPL 規定程式碼必須在較少約束的條款下發布,而版權持有者還可以提供私有許可證。答案是 GPL 的條款是版權持有者為所有其他人設定的;而版權所有者可以自由的決定是否對其本身應用這些條款。對此,一個好的理解方法是想象版權所有 者在桶裡有無數份軟體的拷貝。每次它從桶中取出一個傳送到世界上時,它可以決定是採用 GPL、私有或其他許可證。這並不是僅僅與 GPL 或其他任何開源許可證相關,它僅僅是版權法所賦予的權利。

2、Oracle 是否可以更改 MySQL 的開源協議或者乾脆直接閉源?

基於問題 1 的結論,可以,但是僅限於後續新發布的版本。已經基於 GPLv2 許可證釋出的老版本 MySQL 無法變更開源許可證或閉源。

3、為什麼已經發布的老版本 MySQL 無法變更開源協議或閉源?

開源許可證是跟隨軟體拷貝分發的,每一份 MySQL 軟體拷貝都帶有一份開源許可證。當使用者下載了一份 MySQL 軟體拷貝的時候,就獲得了這份軟體拷貝想對應的許可證,作為軟體拷貝釋出方的 Oracle 公司無法回收已分發的軟體拷貝和許可證,故也不可能變更該軟體拷貝的許可證。可以作為上述結論佐證的,是在 GUN 官網上的一份 FAQ,其中有如下解釋:

http://www.gnu.org/licenses/g...

為什麼 GPL 要求在每個軟體拷貝里都要包含一份 GPL 拷貝?

在每個拷貝里都包含許可證是關鍵性的,這樣每個獲得拷貝的人都知道他們的權利是什麼。

包含一個指向許可證的 URL 而非許可證本身也許看起來很不錯。但是你無法保證該 URL 五年或十年之後的有效性。20年後,今天我們所用的 URL 可能不再存在了。

無論網路發生什麼變化,唯一能夠確保擁有拷貝的人們還能看到許可證的方法就是在程式中包含許可證的拷貝。

4、Oracle 變更 MySQL 開源許可證或閉源的可能性有多大?

儘管 MySQL 產品本身是開源的,使用 GPLv2 許可證,但是它的開發受到 Oracle 公司的控制,雖然也可能有人確實不滿意 Oracle 公司把持著 MySQL 的開發而分叉這個專案(實際已經有人這麼做了,比如 Percona、MariaDB 等)。一定程度上,這種威脅迫使 Oracle 公司需要慎重考慮變更許可證或閉源 MySQL 所帶來的後果,這有可能導致 Oracle 主動放 棄 MySQL 巨大的市場機會,而把這個機會拱手讓人。在另一方面,一個完全閉源的 MySQL 是否有可能在目前的開源世界生態或之外的領域獲得成功,也是 Oracle 需要考慮的。

我們無法揣測 Oracle 對於 MySQL 的想法,僅是從以上方面分析,我們認為 Oracle 更改目前 MySQL 商業策略的可能性不高。

5、如果後續版本的 MySQL 變更為更不友好的開源許可證或直接閉源,我們應該如何應對?

可以基於業已釋出的老版本 MySQL 原始碼建立程式碼分支,繼續發展基於 GPLv2 開源 許可的 MySQL 分支版本,並基於此分支版本釋出商業發行版(必須開源,可以售賣軟體許可或對使用者提供技術服務作為商業模式)。

我們認為即使 Oracle 後續沒有針對 MySQL 變更開源許可證或閉源的打算,發展國內自主的、有權威部門組織領導的 MySQL 分支版本專案也是十分必要的。原因如下:

  1. 由於 Oracle 公司對 MySQL 專案的絕對控制,MySQL 並沒有真正平等的開發社群,Oracle 只能從外部獲得很小規模的 BUG 修復和補丁清理,並且需要投入大量公司內部資源 支援 MySQL 專案的發展,一旦 MySQL 專案的收益過小,就有減小投入的可能性進而影響 MySQL 專案的發展。與此同時,不論是滿足使用者社群對新功能新特性的訴求還是 BUG 修復的響應速度,都不盡如人意,使用者對於 MySQL 的期待和訴求無法得到及時的反饋與滿足。
  2. 由於中美競爭升級,國家對於軟硬體自主可控的要求,Oracle MySQL 對於國產化軟硬體的適配、國密演算法、國內普遍業務量巨大的場景的支援等都是欠缺的,並且 Oracle 公司的 MySQL 需求評估部門,也不可能會為中國國情做適當的考慮。

基於以上兩點,發展具有中國特色、符合中國國情、能充分響應國內使用者需求的 MySQL 分支版本就顯得十分急迫。

6、為什麼 MySQL 在整個開源生態和在終端使用者的考量中如此重要,我們可以不發展 MySQL 而轉到其他路線上嗎?

MySQL 是目前世界上最流行的開源資料庫軟體,市場佔有率巨大,這是不可否認的事 實。在我國國內,各行各業的終端使用者也大量使用了 MySQL 資料庫,業已形成了巨大的資產投入。這些資產包括且不限於:基礎軟硬體設施、適配 MySQL 的應用軟體開發、MySQL 生態的人才培養。在此基礎上,國內已形成了龐大的圍繞 MySQL 的軟體生態和人才生態,大量終端使用者把 MySQL 作為首選資料庫軟體使用。要替換如此龐大的軟體、人才生態,是需要天量投入和強勢領導的,其中的風險也是不言自明,這個風險不亞於 Oracle 突然閉源 MySQL 導致的後果。我們認為,與其承擔巨大風險徹底放棄 MySQL 並轉換路線,還不如牽頭各權威部門、聯合國內資料庫行業內廠商,建立國內自主可控的 MySQL 分支社群,通過強力、科學的領導,形成統一的 MySQL 分支社群生態,謹防 MySQL 在國內的社群分裂 化、碎片化。通過這個統一的、強力的 MySQL 分支開源社群,服務好國內龐大的 MySQL 終端使用者群。

7、國內發展 MySQL 開源分支,是否會涉及智慧財產權侵權?

不會。要認清這個問題,首先需要了解 GPLv2 許可證遵循的最基本原則。

GPL 許可社會公眾享有:執行、複製軟體的自由,發行傳播軟體的自由,獲得軟體原始碼的自由,改進軟體並讓自己作出的改進版本向社會發行傳播的自由。GPL 還規定:只要這種修改在整體上或者某個部分來源於遵循 GPL 的程式,該修改的整體就必須按照 GPL 流通,不僅該修改的原始碼必須向社會公開,並且對於這種修改的流通不准許附帶修改者自己所作出的限制。因此,一項遵循 GPL 流通的程式不能同非自由的軟體合併。GPL 所表達的這 種流通規則稱為 Copyleft,表示於 Copyright(版權)的概念相左。

GPL 協議最主要的幾個原則:

1、確保軟體自始至終都以開放原始碼形式釋出,保護開發成果不被竊取用作商業發售。任何一套軟體,只要其中使用了受 GPL 協議保護的第三方軟體的原始碼,並向非開發人員釋出時,軟體本身也就自動成為受 GPL 保護並且約束的實體。也就是說,此時它必須開放原始碼。

2、GPL 是 Copyleft,或譯為“僅有著作權”的體現,除了著作權歸原作者所有以外,其他一切權利均與任何人分享。GPL 的精髓就是, 使軟體在完整開源的情況下,儘可能使使用者得到自由發揮的空間,使軟體得到更快更好的發展。

3、無論軟體以何種形式釋出,都必須同時附上原始碼。例如在網際網路上提供下載,就必須在二進位制版本(如果有的話)下載的同一個頁面,清楚地提供原始碼下載的連結。如果以光碟形式釋出,就必須同時附上原始檔的光碟。

從以上描述可以看出,GPL 是一個“自由”大於“版權”為原則的的許可證協議,在 “自由”傳播面前,其他一切均需讓路。使用者可以獲得著作權人通過 GPL 許可證放棄的權利,但也必須遵守許可證的規定才能行使權利,如果不遵守 GPL 規定,便是侵犯了開源軟體著作權,其著作權人就有權要求對方停止相關行為及其他。Oracle 一旦基於 GPLv2 許可 證釋出了一份 MySQL 軟體拷貝,也既立刻放棄了其對這份 MySQL 軟體拷貝所擁有的除了著作權之外的其他一切權利,由於 GPL 許可證的保護,這份 MySQL 軟體拷貝立即成為了一份“自由”軟體拷貝,可以被獲得該軟體拷貝的人或組織自由使用和修改、傳播,並需要繼續遵循 GPL 許可證的所有規定和約束。

綜上所述,在發展國內 MySQL 開源分支時,只要遵循 GPLv2 的所有規定和約束,就不會觸發智慧財產權層面的爭議,我們可以合法的自由使用 Oracle 釋出的 MySQL 原始碼。

相關文章