我的程序运行需要依赖数据库,比如 mysql 。然后售卖给最终客户时给他安装部署的时候没有使用 mysql ,而是使用了另外一个开源协议是 GPL 3.0 的数据库,直接从 github 拉源码编译,它完全兼容 mysql 包括驱动。但是它也属于我售卖给用户的内容,那么我的程序是否受到 GPL 3.0 协议的传染,也需要开源吗?
![]() |
1
kita 130 天前
你是怎么和这个 database service 通讯的,使用的是 MariaDB/MySQL connector ?
如果不是,是使用这个 database 提供的,看看有无 API 例外协定,没有的话就大概率被认定传染。 否则只要不是 AGPL ,你连 database 改过的都可以不用向第三方(非你直接客户)公开 |
3
hugowangnz 130 天前
这必然是会被传染的
|
![]() |
4
msg7086 130 天前
1. 其他人使用数据库与你无关。你只对你分发的软件负责,别人修改了使用环境后那就是别人的软件了。比如软件 A 没有使用任何 GPL 项目,然后用户 B 把软件 A 的源代码拿去,修改了代码,让他与 GPL 项目进行了连接,这时候就不是软件 A 了,而是软件 A'。这种场景下,用户 B 需要把软件 A'开源,因为软件 A'被感染了。但这与你本人,以及软件 A 没有关系。
2. 你的程序不会因为「可能」与 GPL 项目连接就被 GPL 传染。要是这样就能传染的话,任何能联网的程序都能通过 TCP/IP 连接到 GPL 程序的端口,那全世界的程序都要被传染了。想想就知道是不可能的。 另外,协议感染归根结底是基于「衍生作品」判断。你的作品需要是「衍生」自 GPL 项目,才会被 GPL 项目感染。仅仅是融为一体运行,并不会自动导致项目变成衍生作品。比如你给魔兽世界写了一个 lua 语言的插件,然后你把插件 GPL 开源了,游戏运行的时候插件和游戏本体融为一体运行,但你的插件并不会自动就把游戏传染了,因为普通人很容易认定游戏本体并不是插件的衍生作品,游戏并不需要插件就可以运行。 |
![]() |
5
msg7086 130 天前
对你来说,如果你的程序可以与多个数据库任意连接运行,甚至数据库都不一定在本地电脑上,那本来就没有许可证感染的问题。(当然前提是你使用 MySQL 连接器的方式符合其许可证,比如说 LGPL 或者更宽松的许可。)
|
![]() |
6
keakon 130 天前
总不能因为我用 Windows 跑了个 Linux 的虚拟机,就要求 Windows 开源吧?
|
![]() |
7
geelaw 130 天前
如果你的程序 A 依赖的 MySQL 是商业协议的,那么你的程序本身不受 GPL 的约束,且没有你的同意的情况下,你的客户 C 无权把它和另一个款数据库 D (你提到的那款 GPL 3 协议的数据库)一起使用。
如果你同意 C 把 A 和 D 一起使用,令 A 连接 D 使用的整体为软件 A',则 A' 受到 GPL 的约束,但是—— C 可以选择自己用 A' 而不分发给别人,因为 GPL 的约束仅在分发软件时存在,所以 C 没有必要开源 A'。 假设你只是允许了 C 把 A 和 D 一起使用,但没有以和 GPL 兼容的协议把 A 授权给 C ,那么:因为 A' 是 A 的衍生作品,所以受到 A 的协议约束,此时 C 无权按 GPL 分发 A',因此 C 只能自己使用 A',因为分发 A' 必然违反你的授权和 D 的 GPL 授权之一。 |
8
feedcode 130 天前
你要分清是 GPL 3 还是 AGPL 3.
前者的话你只需提供对应数据库的 copyright 和 license file, 不需要提供你的源码 或者的话需要提供你的源码 https://www.gnu.org/licenses/gpl-howto.html https://www.gnu.org/licenses/agpl-3.0.txt |
9
Greendays 130 天前
这种情况,只有说你研究了一个数据库,是在 GPL 开源数据库的基础上开发的,你才需要开源代码。你开发一个产品,连接了 GPL 开源的数据库,这是不用开源的。
|
10
unused 130 天前
不要一起分发
|
![]() |
11
gibber OP 谢谢各位,已经清楚了
|