背景:LAMP 棟樑面臨拆分風險
- LAMP:Linux + Apache + MySQL + PHP,開源 Web 開發事實標準
- 衝突點:MySQL 4.0+ 將客戶端庫從 LGPL 改為 GPL,導致 PHP (PHP License、非 GPL 兼容) 無法合法鏈接
libmysqlclient
- 後果:PHP 5.0+ 強制移除 MySQL 原生擴展,改用 SQLite/PDO 抽象層,Red Hat 等發行版被迫重新打包
授權知識速查
| 授權 | 核心要求 | 典型項目 |
| GPL (v2/v3) | 衍生作品必須同樣 GPL,傳播性強 | Linux Kernel、MySQL Server、Git |
| LGPL | 允許專有軟件**動態鏈接**庫,不感染主程序 | glibc、舊版 libmysqlclient |
| PHP License | BSD 風格,允許專有衍生,但要求保留版權聲明 | PHP |
**GPL + PHP License = 不兼容**:PHP 非 GPL,鏈接 GPL 庫構成衍生作品,違反 GPL 第 2 條。
MySQL 破局:FOSS License Exception (2004.06)
「允許以 GPL 之外的**其他開源授權** (如 PHP License、Apache License、BSD、MIT) 分發的項目,合法鏈接 MySQL 客戶端庫。」
- 適用對象:自由/開源軟件 (FOSS) 專案
- 不適用:專有/商業閉源軟件 (仍需購買商業授權)
- 法律依據:MySQL AB 擁有**全部代碼版權** (CLAs),有權添加額外授權例外
雙重授權商業模式深度解析
| 軌道 | 授權 | 目標用戶 | 收入來源 |
| 社區 | GPL + FOSS Exception | 開源項目、學習者、非商業用途 | 零直接收入,建立生態、品牌、人才庫 |
| 企業 | 商業授權 (Proprietary) | ISV 嵌入、SaaS、不想開源的商業產品 | 訂閱費、支持合同、插件授權 (TDE、審計、防火牆) |
**關鍵前提**:單一實體擁有全部版權 (MySQL AB → Sun → Oracle),才能靈活切換雙軌。Linux 因版權分散無法雙授權。
衍生影響與後續演進
- MariaDB 分叉 (2009):Monty Widenius 擔心 Oracle 收購後關閉社區,創建 MariaDB Foundation 守護 GPL 純淨性
- MySQL 8.0 客戶端庫授權調整:
libmysqlclient 改為 **GPL with Exception** (類似 LGPL 但更明確),mysqlclient (MariaDB) 為 LGPL
- PHP 現狀:
mysqli、pdo_mysql 使用 mysqlnd (MySQL Native Driver,**PHP 專案自研、PHP License**),徹底擺脫授權糾葛
給開源專案的授權選型建議
- 庫/框架**:優先 **MIT/Apache-2.0/BSD-3** (最大兼容)、次 **LGPL** (保護庫代碼)、慎用 **GPL** (限制採用)
- 應用/服務**:**GPL/AGPL** (保護社區貢獻)、或 **BSL/SSPL** (防雲廠商免費托管)
- 雙授權**:需 **CLA (貢獻者授權協議)** 確保版權集中,法律成本高,適合商業公司主導項目
- 依賴審計**:CI 集成
license-checker/FOSSology,禁止引入不兼容授權依賴
結語
MySQL + PHP 的授權糾葛是開源史上**版權集中雙授權模式**與**社區生態兼容性**博弈的經典案例。FOSS Exception 以「例外條款」化解僵局,但也暴露了 GPL 傳播性在現代微服務/雲原生架構下的適配困境。**授權選型不是法律遊戲,而是生態戰略**——決定了誰能用、誰願貢獻、誰會分叉、誰能商業化。
- 上一篇文章: MySQL Root 密碼遺失/被竄改緊急恢複指南:skip-grant-tables + 數據目錄重建雙方案
- 下一篇文章: Access 遷移 MySQL 實戰:ODBC 導出 → 類型修正 → 自增主鍵重建全流程
Copyright ©
程式碼之家 All Rights Reserved