歷史背景
2006 年 11 月 13 日,Sun 公司正式宣布 Java 開源,採用 GPL v2 + Classpath Exception 雙軌授權模式。此舉引發業界廣泛討論:Sun 為什麼開源?如何防止分裂?商業用戶如何受益?本文基於 Sun 高層訪談與官方文檔深度解讀。
核心動機:「水漲船高」的商業邏輯
「Sun 最大的利益在於水漲船高。Java 使用環境越廣闊,商業支持需求越大,Sun 的中間件、硬件、服務收入就越多。」—— Jonathan Schwartz (Sun CEO)
- 用戶基數:超 500 萬開發者、近 40 億設備運行 Java (含 15 億手機)。
- 生態擴張:開源降低準入門檻,吸引更多貢獻者,加速創新,擴大市場蛋糕。
- 商業變現:企業級用戶需要「商業許可證」獲得補丁保障、SLA 服務、法律豁免——這是 Sun 核心收入來源。
雙軌授權機制詳解
| 維度 | 社區版 (GPL v2 + CE) | 商業版 |
| 授權模式 |
GPL v2 + Classpath Exception |
傳統商業許可協議 |
| 源碼獲取 |
OpenJDK 倉庫完全開放 |
Sun 官方發布的二進制/源碼包 |
| 分發義務 |
修改版必須同樣開源 (GPL) |
無開源義務,可閉源嵌入產品 |
| 專利/法律保護 |
社區專利承諾 |
Sun 提供全面補償與 SLA |
| 適用場景 |
開源項目、教學、實驗、非商業嵌入 |
企業級產品、嵌入式設備、需長期維護系統 |
Classpath Exception (關鍵):允許應用程序鏈接 OpenJDK 類庫而不受 GPL 伝染,即你的業務代碼可以保持閉源商業授權。
開源範圍與時間表
- Java SE:核心類庫、JVM (HotSpot)、編譯器、工具鏈 → 全部開源。
- Java ME:CLDC/MIDP、CDC 基礎配置 → 開源。
- Java EE:GlassFish 應用服務器 → 開源 (CDDL/GPL)。
- 時間線:2006 年啟動 → 18 個月內完成核心代碼清理 → 2007 年 3 月前實現完整可構建開源 JDK。
防止分裂:TCK 與兼容性認證
Sun 堅持 「一次編寫,到處運行」 承諾:
- 制定 Java 規範請求 (JSR) 定義標準 API。
- 提供 技術兼容性套件 (TCK) 測試實現一致性。
- 只有通過 TCK 的實現才能冠名「Java」,否則只能叫「基於 Java 技術」。
- OpenJDK 作為參考實現 (RI) 保證基準一致性。
業界反響與後續演進
- IBM/紅帽/甲骨文:加入 OpenJDK 社區,共同維護。
- Apache Harmony:因 TCK 授權分歧最終退出,推動了後來 OpenJDK 完全開源。
- Android:採用 Harmony/ASM 實現核心類庫,未通過 TCK,引發甲骨文訴訟。
- 現狀 (2024):OpenJDK 成為事實標準,Oracle JDK / Eclipse Temurin / Azul Zulu / Amazon Corretto 等構建版本共存,六月發布節奏,LTS 版本長期支持。
總結
Sun 的 Java 開源戰略是軟件史上最成功的商業開源案例之一:用 GPL 守護社區生態,用 Classpath Exception 保護商業應用,用 TCK 確保兼容性。這一「三位一體」設計,既釋放了創新活力,又守住了商業底線,為後來 Android、Go、Kubernetes 等項目提供了經典範本。