V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gibber

关于开源协议 GPL 3.0 的一个疑问

  •  
  •   gibber · Apr 30, 2025 · 2213 views
    This topic created in 362 days ago, the information mentioned may be changed or developed.

    我的程序运行需要依赖数据库,比如 mysql 。然后售卖给最终客户时给他安装部署的时候没有使用 mysql ,而是使用了另外一个开源协议是 GPL 3.0 的数据库,直接从 github 拉源码编译,它完全兼容 mysql 包括驱动。但是它也属于我售卖给用户的内容,那么我的程序是否受到 GPL 3.0 协议的传染,也需要开源吗?

    11 replies    2025-04-30 18:31:03 +08:00
    kita
        1
    kita  
       Apr 30, 2025
    你是怎么和这个 database service 通讯的,使用的是 MariaDB/MySQL connector ?
    如果不是,是使用这个 database 提供的,看看有无 API 例外协定,没有的话就大概率被认定传染。
    否则只要不是 AGPL ,你连 database 改过的都可以不用向第三方(非你直接客户)公开
    gibber
        2
    gibber  
    OP
       Apr 30, 2025
    @kita 是的,因为它完全兼容 mysql ,所以直接用的 mysql connector 连接访问。
    hugowangnz
        3
    hugowangnz  
       Apr 30, 2025
    这必然是会被传染的
    msg7086
        4
    msg7086  
       Apr 30, 2025
    1. 其他人使用数据库与你无关。你只对你分发的软件负责,别人修改了使用环境后那就是别人的软件了。比如软件 A 没有使用任何 GPL 项目,然后用户 B 把软件 A 的源代码拿去,修改了代码,让他与 GPL 项目进行了连接,这时候就不是软件 A 了,而是软件 A'。这种场景下,用户 B 需要把软件 A'开源,因为软件 A'被感染了。但这与你本人,以及软件 A 没有关系。

    2. 你的程序不会因为「可能」与 GPL 项目连接就被 GPL 传染。要是这样就能传染的话,任何能联网的程序都能通过 TCP/IP 连接到 GPL 程序的端口,那全世界的程序都要被传染了。想想就知道是不可能的。

    另外,协议感染归根结底是基于「衍生作品」判断。你的作品需要是「衍生」自 GPL 项目,才会被 GPL 项目感染。仅仅是融为一体运行,并不会自动导致项目变成衍生作品。比如你给魔兽世界写了一个 lua 语言的插件,然后你把插件 GPL 开源了,游戏运行的时候插件和游戏本体融为一体运行,但你的插件并不会自动就把游戏传染了,因为普通人很容易认定游戏本体并不是插件的衍生作品,游戏并不需要插件就可以运行。
    msg7086
        5
    msg7086  
       Apr 30, 2025
    对你来说,如果你的程序可以与多个数据库任意连接运行,甚至数据库都不一定在本地电脑上,那本来就没有许可证感染的问题。(当然前提是你使用 MySQL 连接器的方式符合其许可证,比如说 LGPL 或者更宽松的许可。)
    keakon
        6
    keakon  
       Apr 30, 2025
    总不能因为我用 Windows 跑了个 Linux 的虚拟机,就要求 Windows 开源吧?
    geelaw
        7
    geelaw  
       Apr 30, 2025
    如果你的程序 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 授权之一。
    feedcode
        8
    feedcode  
       Apr 30, 2025
    你要分清是 GPL 3 还是 AGPL 3.
    前者的话你只需提供对应数据库的 copyright 和 license file, 不需要提供你的源码
    或者的话需要提供你的源码
    https://www.gnu.org/licenses/gpl-howto.html
    https://www.gnu.org/licenses/agpl-3.0.txt
    Greendays
        9
    Greendays  
       Apr 30, 2025
    这种情况,只有说你研究了一个数据库,是在 GPL 开源数据库的基础上开发的,你才需要开源代码。你开发一个产品,连接了 GPL 开源的数据库,这是不用开源的。
    unused
        10
    unused  
       Apr 30, 2025
    不要一起分发
    gibber
        11
    gibber  
    OP
       Apr 30, 2025
    谢谢各位,已经清楚了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 08:36 · PVG 16:36 · LAX 01:36 · JFK 04:36
    ♥ Do have faith in what you're doing.