<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
<scope>runtime</scope>
</dependency>
核心结论:不是遵循 GPL 规范,而是GPLv2 协议+ Universal FOSS Exception。
mysql-connector-j(开源版本) 明确使用 GPLv2 协议,非 GPL 许可,无 GPL "传染性" 风险MySQL。以下是详细说明与合规建议:
一、 GPL v2依赖:mysql-connector-j
mysql-connector-java:8.3.0遵循GPLv2 + Universal FOSS Exception,而非 Apache 协议;- Universal FOSS Exception 的关键补充 :这个例外是对 GPLv2 的「松绑」:允许你通过 JDBC 接口动态调用驱动(比如在 Spring Boot 项目中连接 MySQL),而无需将你的商业应用代码开源 ------ 这是官方为了降低开发者合规成本的核心设计。例外仅适用于「调用驱动」,不适用于「修改驱动源码后闭源分发」(这一点和纯 Apache 协议仍有本质区别)。
二、非 GPL 依赖的许可分类
表格
| 许可协议 | 代表依赖 | 核心特点 |
|---|---|---|
| Apache 2.0 | Spring 全家桶、Kafka、Netty、HikariCP | 商用友好,无 "传染性",专利授权明确 |
| MIT | Lettuce、SLF4J、Lombok | 极致宽松,可闭源商用,仅需保留版权声明 |
| BSD | protobuf-java、zstd-jni | 类似 MIT,部分版本要求保留广告声明 |
| EPL 2.0 / LGPL 2.1 | Logback、JSqlParser | 弱 "传染性",仅修改部分需开源 |
| CDDL 1.1 | stax-ex | 文件级 Copyleft,不影响整体项目 |
三、合规建议(针对 mysql-connector-j)
- 闭源商业项目:优先选择商业许可版本,或替换为 MariaDB Connector/J(LGPL 许可,无 GPL 约束)。
- 开源项目:直接使用 GPLv2 版本,需在文档中声明依赖的 GPL 许可。
- 动态链接场景:保留 EXCEPTIONS-CONNECTOR-J 文件,确保仅通过 JDBC 接口调用,不修改驱动源码。
四、快速自查清单
- 检查 pom.xml 或 build.gradle 中 mysql-connector-j 的版本与许可类型;
- 确认是否修改过驱动源码,若有则需遵循 GPLv2 开源衍生代码;
- 闭源项目建议联系 Oracle 购买商业许可,或更换非 GPL 驱动。