V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fbichijing
V2EX  ›  程序员

GPL 协议的疑惑?

  •  
  •   fbichijing · 2022-01-02 00:46:38 +08:00 · 4959 次点击
    这是一个创建于 1086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我在看一些软件时产生疑惑,希望有人可以解答。

    对于一些应用在服务端的开源插件,这部分代码使用了 GPL 协议,那么这个协议的限制范围包括了哪些?

    使用了 GPL 协议的软件不允许修改以后再以二进制的形式分发,这个很好理解。从实际方面就是作者“我写的软件你却改了以后拿去卖钱”,会严重引起作者的不满。

    但是对于服务端的部分,假如一个网站使用了一个 GPL 的开源插件,而这个网站提供服务赚钱。那这种做法是否违反了该协议,是否需要主动公布其源代码。从开源插件作者方考虑,该作者使用 GPL 协议,就存在着某种程度上不允许这种情况存在的意向?

    42 条回复    2022-01-04 10:02:06 +08:00
    HXHL
        1
    HXHL  
       2022-01-02 00:49:55 +08:00 via iPhone
    gpl 好像是有这样的漏洞, 你了解一下 AGPL ,应该是补上了。
    fbichijing
        2
    fbichijing  
    OP
       2022-01-02 00:53:27 +08:00
    @HXHL 我看到有些文章确实是以此为“漏洞”。我的意思是如果作者本身不希望这种情况存在,那么使用者在一开始选择上主动考虑要不要使用这插件。而不以漏洞来穿越。
    sagaxu
        3
    sagaxu  
       2022-01-02 01:02:54 +08:00 via Android
    GPL 只是规定修改了要开源,并没有阻止二进制分发。

    GPL 也没有规定以什么方式开源,我可以规定源码只能上门自取,打印出来给你。
    eason1874
        4
    eason1874  
       2022-01-02 01:14:30 +08:00
    @fbichijing 一楼说得对,不是以为有这种漏洞,GPL 是真的有这个漏洞,只在服务器运行 GPL 软件修改版,不涉及分发,也就不用开源

    所以后来出了个 AGPL ,要求在服务器运行 AGPL 软件修改版向用户提供服务的,得同时向用户提供相应的源代码

    《为什么要使用 GNU Affero GPL 》 https://www.gnu.org/licenses/why-affero-gpl.html
    fbichijing
        5
    fbichijing  
    OP
       2022-01-02 01:34:17 +08:00
    @eason1874 我不是说“以为”有这种漏洞,我是想说明我自己若是想使用这插件。如果是插件作者本意不希望或者不喜欢别人这么用的话,我一开始就考虑是否使用这款插件。就是说客观上漏洞存在,主观上考虑是否使用 这个意思。
    fbichijing
        6
    fbichijing  
    OP
       2022-01-02 01:36:47 +08:00
    @sagaxu 理论上似乎是这样,但好像脱离了协议的初衷。
    fbichijing
        7
    fbichijing  
    OP
       2022-01-02 01:45:04 +08:00
    @eason1874 也就是说使用了 AGPL 协议的服务端程序,必须提供源代码下载。是不是这部分就包括整个系统的源代码而不仅限于修改插件的部分?这就是传染性的一种体现吗?
    eason1874
        8
    eason1874  
       2022-01-02 02:23:51 +08:00
    @fbichijing 如何定义传染性,这个话题有很大的争议。我比较接受的观点是,传染的是有独立进程,可以独立提供功能的单一软件。

    比如,一个开源转码库,如果你修改后单独编译成一个可独立运行的二进制程序,在软件里调用它,那你只需要开源这个二进制程序源代码

    如果你修改后的代码和自己的软件代码耦合,必须要一起编译才可使用到修改版的功能,那我就认为你整个软件源代码都得开源
    mxalbert1996
        9
    mxalbert1996  
       2022-01-02 02:24:17 +08:00 via Android
    你的理解其实不完全对,GPL 并没有限制二进制分发,也没有限制商业使用(卖钱),它的核心思想是如果你想用它,你所做的所有修改都必须开源回馈社区。Linus 也说过 Linux 能这么成功 GPL 是一个重要因素。
    2i2Re2PLMaDnghL
        10
    2i2Re2PLMaDnghL  
       2022-01-02 05:21:14 +08:00
    GPL 不阻止反而是明确允许商业使用,包括你自行分发。
    你说的这种就是 SaaS (软件即服务),确实是 GPL 漏洞。而且实际上 FSF 是干脆反对所有把计算算法托管给别人的做法的,姑且是把 SaaS 其中刨去通讯,剩下用于计算的 SaaSS (服务即软件替代品),抨击了不少。

    AGPL 也不是万金油;实际上 AGPL 是个试制品,只能说试验不是很成功。

    @sagaxu 实际上这边是有明确限制的,参考 6 章节,abc 描述了实体设备内嵌代码的情况,d 描述了特设地点可供获取的情况下应以相同方式相同地点获取源代码(如果是联网服务器,则可以采用另外的服务器,但不得需求使用额外的复制设施,比如浏览器就能下载,但非得要 git 才能获取源代码)。
    dawn009
        11
    dawn009  
       2022-01-02 06:18:26 +08:00
    > 使用了 GPL 协议的软件不允许修改以后再以二进制的形式分发,这个很好理解。从实际方面就是作者“我写的软件你却改了以后拿去卖钱”,会严重引起作者的不满。

    不是这个原因。GPL 的目的是为了保护软件使用者的自由。“我写的软件你改了之后却不开源”,会损害其他人的自由。
    cassyfar
        12
    cassyfar  
       2022-01-02 06:48:16 +08:00
    GPL 病毒式传播本来就很有争议,这也是阻碍他现在发展的很大原因。你这个定义是更广泛的病毒式传播,估计真这样就没人会用了。

    工业界更喜欢 BSD 这类许可,你可以通俗理解为“白嫖”。比如说后端应用场景最重要的云计算,大部分流行的开源组件都不是用的 GPL ,而是基于 BSD 的类似许可,比如 Apache License 。
    sagaxu
        13
    sagaxu  
       2022-01-02 09:55:27 +08:00 via Android
    @2i2Re2PLMaDnghL 下载限速 1KB ,再打包几个大文件进去,几个小时后随机出错,不支持断点续传,你能怎么样?
    PopRain
        14
    PopRain  
       2022-01-02 10:15:09 +08:00
    我理解如果你只是用了这个开源插件或者只修改了这个插件,那需要公开源码,并不用公开其它部分(否则 liunx 下的商业软件全要开源了)
    如果你的网站时基于某个 GPL 的项目做的,那你整个网站都要开源
    PopRain
        15
    PopRain  
       2022-01-02 10:18:02 +08:00
    Postgresql 用的是类似于 BSD 的协议,随便白嫖,所以很多“国产具有自主知识产权”的数据库都是从 pg 衍生的,有的竟然还拿了国家科技进步二等奖。。。。
    而 MySql 就很少有人用,要么说兼容,要么底层还是 MySql 那一套,上层开发(相当于做应用)
    swulling
        16
    swulling  
       2022-01-02 10:25:47 +08:00 via iPhone
    对 GPL 最大的误解就是它限制了商用。

    只要你回馈社区,遵守协议。你赚几十亿刀都没人管你。
    swulling
        17
    swulling  
       2022-01-02 10:28:06 +08:00 via iPhone
    @PopRain 国产数据库基本都是基于 PG 的。MySQL 社区版一来历史包袱很重代码可读性比较差,不像 PG 来自于学校,架构比较科学。

    另外 mysql 社区版的协议也是 GPL ,国产数据库倒是不怕源码公开,但是怕虎皮被扯开。
    westoy
        18
    westoy  
       2022-01-02 10:43:16 +08:00
    限不限制商用看解读了

    GPL 原教旨主义允许商用指是附加物, 你可以卖硬件赚钱,比如安装了 linux 的路由; 你可以提供服务赚钱, 比如红帽; 你可以卖安装介质赚钱,包括下载服务, 比如 RMS 早年卖 emacs 软盘, 但是你不能以卖软件的名义卖, 同样你也不能限制获取源码的人二次分发, 我记得 blender 在协议声明里针对插件销售是有专门强调过这点的
    L4Linux
        19
    L4Linux  
       2022-01-02 10:43:22 +08:00
    @mxalbert1996 核心思想是确保用户对其使用的软件进行完全控制,包括修改代码。
    msg7086
        20
    msg7086  
       2022-01-02 11:54:23 +08:00
    > 从实际方面就是作者“我写的软件你却改了以后拿去卖钱”,会严重引起作者的不满。

    完全不对,建议重新读一遍协议。
    GPL 特别说明,任何人都可以修改 GPL 协议的软件,而且也可以以任何价格分发给他人。
    「我写的软件」你拿去卖一毛钱或者卖一百万都是合法的。
    相反的,如果「我写的软件」是 GPL ,而你要拿去卖但我不许你卖,那么「我」才是违反协议的人。
    msg7086
        21
    msg7086  
       2022-01-02 11:56:32 +08:00   ❤️ 1
    @westoy
    Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish) 下略

    直接卖软件是完全合规的。你可以把 Linux 下载回来,然后卖一百万一碟,完全合规。
    msg7086
        22
    msg7086  
       2022-01-02 11:59:02 +08:00
    @sagaxu
    > You must make sure that they, too, receive or can get the source code.

    你「必须保证」他们「能获得源码」。
    你描述的做法会导致你无法「保证人们能获得源码」,因此违反了协议。
    fbichijing
        23
    fbichijing  
    OP
       2022-01-02 12:32:40 +08:00
    @dawn009 > “我写的软件你改了之后却不开源”
    对于这种是否存在着一种情况。如果软件的复杂性不是很高,个人可能单枪匹马做出来。而使用相同语言做出的一些 gui 有可能外观很相像。如果一人看过一个不是很复杂的开源软件,然后窃取了 idea 自己做出来一个很类似的加了功能打包成二进制售卖。假如无法反编译出源码,那这种该怎么判定呢?
    fbichijing
        24
    fbichijing  
    OP
       2022-01-02 12:50:11 +08:00
    @msg7086
    这个保证必须获得的[源码],它的范围涉及到哪些?如果网站系统使用了一个开源插件并增加了它的功能,将增加的功能部分新建分支推送给插件作者就能理解。那如果是使用而没有增加功能,是否意味就可以[白嫖]?但是保证获得源码,这个获得的源码是否囊括网站系统本身(不包含那些密钥之类的)。
    就好比一个人在开源代码中获得一把武器,他对这把武器很感兴趣然后增加了武器的功能。接着把该武器一并打包到这个人向外售卖的武器库中对别人售卖。那么这个人该开源哪部分?
    ungrown
        25
    ungrown  
       2022-01-02 12:53:54 +08:00
    @fbichijing #23
    理念是理念,协议是协议,执行是执行,结果是结果
    理想是理想,现实是现实
    咋地你想让这世上的每个理想都能“自动”的转换成现实吗
    想让理想变成现实就需要具体的人(们)去出力、去想办法,甚至需要牺牲,做得越多,那份理想就有越多的比例变成现实
    但同时,做得越多,最后得到的现实结果中也就会包括越多的跟最初的理想“背道而驰”的成分
    而且,理想的最初版本一定会随着人们的行动而演变,原教旨真的能够永存吗
    种子能发芽,长成参天大树就够了,别强求结出来的果子和一开始种下去的一模一样
    sagaxu
        26
    sagaxu  
       2022-01-02 13:03:24 +08:00
    @msg7086 没有规定他们获取代码的时长,是一天内获取还是一个月获取,还是一年或者十年。
    fbichijing
        27
    fbichijing  
    OP
       2022-01-02 13:09:22 +08:00
    @ungrown #25
    对于 #23 你是想表达“这种情况确实可能存在,并且从某种程度上协议对这种情况没什么约束力。但是从道德层面和协议设计初衷来谴责这个人的这种做法”这个意思吗?

    感觉这种情况存在着多种可能。

    并且表达了对于提出[这种假设]的[我]的一些不满。哈哈^_^
    fbichijing
        28
    fbichijing  
    OP
       2022-01-02 13:22:53 +08:00
    @ungrown 我提出问题本身仅是想了解协议纠正自己对其理解的偏差,明确其赋予的权力和限制后以便自己做出选择。简单地说就是我想知道了软件使用了这种协议以后我最大程度可以做什么,而不能做什么。
    msg7086
        29
    msg7086  
       2022-01-02 13:27:41 +08:00   ❤️ 1
    @sagaxu 任何人获取到源码前,无人能够获得源码这个事实是存在的,这个事实就导致在十年后第一次成功获得源代码之前的时间段内你违反了许可证。许可证要求的是,如果有人能获得二进制,那么他也必须能获得源代码,没有规定时间不意味着时间可以无限长,而是意味着这两件事应该同时发生。
    比如说,买卖交易,你给我钱,我给你东西。显然其中没有规定时间,但你不可以解释说你现在给我钱,我两百年后给你东西。这种说法在法庭上是站不住脚的。

    @fbichijing 一般而言,衍生作品只需要达到对方能获取源代码的目的就行了。
    你基于插件做二次开发,一般而言只要在插件范围内公开源码即可。
    有一点你要知道,就是「使用」是不需要承担开源责任的。修改也不需要。
    只有当你「分发」软件的时候,才要承担「同时分发源代码」的责任。

    关于武器这个问题,如果武器的源代码是公开的,那么你只需要提供差异部分,让读者能够执行组装出完整代码,一般也认为是满足了条件。如果原本的源代码是不公开的,那么你就必须提供完整的代码。
    dawn009
        30
    dawn009  
       2022-01-02 13:59:31 +08:00
    @fbichijing #23 这种重写没问题。有一点例外是如果软件本身包含涉及专利的部分,可能会侵犯专利。
    fbichijing
        31
    fbichijing  
    OP
       2022-01-02 14:09:17 +08:00
    @msg7086 是不是归纳起来就是说:如果一个网站使用了带 GPL 的插件,那么网站源码本身的协议就必须继承为 GPL 。可以随意用这个网站去商用,并且没有开源的必要。但是如果网站制作者有意想共开源码(不包括密钥部分)可以让大家学习借鉴,那么网站制作者没有权力更改源代码的协议,比如 BSD(传染性的体现)。即便插件只是其中占了很少的部分代码。
    sagaxu
        32
    sagaxu  
       2022-01-02 14:09:37 +08:00
    @msg7086 买卖难道没有时效?当场交付,或者约定时间交付,大件不但明确付款和交付期限,还会约定好延迟履约产生的罚金,很多商品交付周期需要几年。从人们下载到源码的第一个字节开始,就是开始履约了。
    liaoyaoheng
        33
    liaoyaoheng  
       2022-01-02 16:13:29 +08:00
    其实所有的开源,免费使用,但是所有改动都应该公布代码就行。
    ysc3839
        34
    ysc3839  
       2022-01-02 19:02:31 +08:00 via Android
    @westoy 卖软件应该是没问题的,比如 Red Hat 就有卖不包括支持服务的 RHEL 。
    https://www.redhat.com/en/store/red-hat-enterprise-linux-server
    zpf124
        35
    zpf124  
       2022-01-02 19:35:09 +08:00
    0 、GPL 不限制收费,只要你给源码,哪怕你直接拿开源软件就改个名字去卖一个亿都不违反 GPL 协议。


    先说 web 项目和网站用户的问题,GPL 诞生的年代 Web 的形态和现在差得远呢,他们确实没有考虑到这种形式。所以你的网站如果只是提供服务,那么 GPL 的代码你在修改之后也不需要给谁,因为你只是在使用,没有“发布、分发”,所以自然不需要为你分发的客户提供源代码。 网站的用户只是通过某种协议访问了你提供的服务,但他们并没有你这个服务的所有权。

    ---------------
    比如你拿一个 GPL 开源的 wordpress 插件修改成了一个在国内很优秀的功能,你自己搭建了一个网站大堆用户都用这个插件的功能,这时候你不需要给他们源码; 然后你选择售卖这个插件盈利,那么你有义务向购买了你程序的其他网站站长提供源代码。
    ----------------
    msg7086
        36
    msg7086  
       2022-01-02 20:21:09 +08:00   ❤️ 1
    @sagaxu 提供源码就是当场交付啊。
    在你分发软件的同时,就需要你当场交付源代码。
    if you distribute copies of such a program [...] You must make sure that they, too, receive or can get the source code.
    当你分发软件的时候(中略)你必须保证他们也收到源代码,或者有办法取得获取。

    这并没有允许你在未来才让用户接收到源代码。两句话是连在一起的,事件是同时发生的。

    @fbichijing 「使用」是不影响的。
    网站其实也不需要整个开源。是否会传染取决于一个项目是否为衍生作品。
    如果你的网站并不是围绕着插件开发的,不是插件的衍生作品,一般不认为会被插件传染。
    这种情况下,网站和插件是两个独立的作品,修改网站不会影响插件,修改插件也不会影响网站。
    icyalala
        37
    icyalala  
       2022-01-02 20:35:49 +08:00
    GPL 也有好几个版本呢,Linus 喜欢 GPLv2 ,但是狂喷 GPLv3 。。
    说白了 GPL 本来就是带着政治或者宗教式的东西,诸如 Linus 这种程序员只想要简单些,但 RMS 这类人显然不是。
    所以即使选择了同一个协议,不同作者想法也有可能各不相同。
    sagaxu
        38
    sagaxu  
       2022-01-02 23:36:55 +08:00
    @msg7086 提供一个下载链接就完成源码交付了,用户要花多久下载完成,那是另一个主题。

    有哪一家安卓机销售的时候源码同时送达客户?预装 linux 发行版的品牌电脑随机给代码光盘了吗?
    iseki
        39
    iseki  
       2022-01-03 23:41:06 +08:00
    @fbichijing 净室开发?
    iseki
        40
    iseki  
       2022-01-03 23:45:17 +08:00
    @sagaxu GPLv2 要求必须提供可机读的源代码~~~我觉得如果打印出来的可机读可能也行~~~(GPLv2 第 3 节)
    fbichijing
        41
    fbichijing  
    OP
       2022-01-04 09:36:42 +08:00
    @iseki #39 ?
    fbichijing
        42
    fbichijing  
    OP
       2022-01-04 10:02:06 +08:00
    @msg7086 我觉得你说的[衍生]开源很有道理。

    > "我觉得 GPLv2 是一个非常棒的协议,我喜欢它的理由很简单:我给你源代码,你给我你的修改,我们就扯平了。"

    单纯使用则自由较大。新增功能就给其 push 更新,确实算[扯平]。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.