V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kchum
V2EX  ›  问与答

怎么正确理解 GPL License?

  •  
  •   kchum · 2015-07-06 00:59:58 +08:00 · 4181 次点击
    这是一个创建于 3231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    查了相关资料 阮一峰的Blog 等,还是不是太清晰。查阅了一些资料,我的理解 GPL 重在 是否开源 是否对外发布软件 修改代码是否采用 GPL 协议 不知道是否正确,看了 Zhihu 上的解释有点凌乱,还请教指正。

    类似 Wordpress, Drupal, Joomla 等是 GPL 协议

    1.在不修改代码,发布一个 Website (自运营商用,某种服务或商城等) 这样的行为算不算违反协议?应该不算违反吧

    2.在修改部分代码,发布一个 Website (自运营商用,某种服务或商城等),无对外发布软件行为?

    3.在不修改代码,以 extension 的形式进行二次开发,自运营,无对外发布软件行为?

    总结下,其实 1-3 归于 如何能使用 GPL 软件在不违反协议的前提下进行二次开发(修改代码,或开发extension)自运营商用?

    还有一个例如开发 Wordpress Drupal 的 plugin themes 卖代码怎么理解?上面解答了,这个就不用答了。。

    谢谢大家指教。

    9 条回复    2015-07-06 09:47:01 +08:00
    xfspace
        1
    xfspace  
       2015-07-06 01:28:37 +08:00
    GNU GPL协议就是保护开源程序的。。。
    修改了源代码,而不公布修改后的源代码,就算违反了GNU GPL协议。可看事例https://zh.wikipedia.org/wiki/Linksys
    二次开发不属于修改源代码。
    Septembers
        2
    Septembers  
       2015-07-06 01:49:54 +08:00
    如果父项目提供了plngins或extensions支持在这个基础上的开发并不违反GPL许可协议
    因为建立在这个plugins API/extensions API上的开发是独立项目并不会受到GPL感染

    另外GPLv2+有linking exception如果满足这个例外规则也不违反
    see https://en.wikipedia.org/wiki/GPL_linking_exception

    (如果 理解 有误/偏差 欢迎指出
    hjc4869
        3
    hjc4869  
       2015-07-06 01:53:55 +08:00   ❤️ 1
    通常情况下,修改/引用了GPL授权的开源程序的代码就需要公开这些修改/引用。
    除非:
    以下情况不公开引用了GPL程序的程序源代码不属于违反GPL
    1.作者授权。注意是整个软件的作者,也就是假如你的软件引用的A作者的GPL库又引用了B作者的GPL库,那么你需要得到A和B两人的授权。如mono runtime等有商业授权协议的GPL软件
    2.不发布二进制文件,包括但不限定于在服务器上做服务。当然某某透明计算就算在视频中出现了其引用某开源软件的证据,没发布任何成果也不属于违反GPL。
    3.引用GPL库,但不在同一地址空间内(如fork,exec等),需要注意的是如果你使用RPC之类的手段与GPL程序交换复杂的数据结构,那么仍然有法律风险。
    4.你的程序由A和B部分组成,A部分闭源,B部分引用了GPL软件并按GPL开源,按照程序的设计,A和B运行在同一地址空间内,但是A默认不自带B,A载入B的这个过程由用户自行完成(如做成插件,分开分发),那么将A部分变为GPL的是用户,用户需要向自己索取A部分的源代码,而显然这个是做不到的。这是GPL的一个漏洞。如PotPlayer。
    jybox
        4
    jybox  
       2015-07-06 03:12:21 +08:00   ❤️ 1
    GPL 的要求都发生在“分发”时,如果你不进行分发(例如用 WordPress 搭建一个网站),那么 GPL 对你是没有什么约束的。有一个 GPL 的变种叫 AGPL, 它将开放源代码的要求扩展到了“对外服务”时,MongoDB 即使用这种协议,即如果你用 MongoDB 提供服务,那么就要向服务的使用者提供修改后的源代码(如果是公开服务则需公开发布)。

    @Septembers WordPress 的插件和主题理论上都应当是 GPL, 所以一些出售主题并限制二次分发的行为其实是违反了 WordPress 的协议的,官网有解释这个问题: https://wordpress.org/about/license/
    qw7692336
        5
    qw7692336  
       2015-07-06 04:07:24 +08:00 via Android
    如果你的项目,用了别人的代码,而别人的代码遵循gpl,那么你必须开源,否则就是侵权。
    msg7086
        6
    msg7086  
       2015-07-06 05:45:39 +08:00
    只要不发布,自己用,GPL软件的修改和开发不需要开源。
    vietor
        7
    vietor  
       2015-07-06 07:35:02 +08:00 via Android
    GPL的基础是,任何修改都要开源,别人能够随意获得。如果是GPL3则自动放弃了使用自身专利的署名权外所有权利
    monnand
        8
    monnand  
       2015-07-06 09:44:06 +08:00
    这个问题我在另外一个主题下讨论过: http://www.v2ex.com/t/195045#reply8

    /t/195045
    monnand
        9
    monnand  
       2015-07-06 09:47:01 +08:00
    引用我在 /t/195045 上发布的话来:

    其实GPL中有一个漏洞是可以利用的。而且这一个漏洞早就被无数人利用了。这句话说起来比较拗口:GPL授权要求(再)发布包含/使用GPL代码的软件的人/组织将完整的使用了GPL的程序的代码以GPL发布。

    上面那句话太难理解,我这里给个例子,假如说有个GPL程序,如果我为这个程序开发了一个插件,,那么我是可以*单独*以任何协议发布这个插件,而让用户自己去完成“安装插件”这个步骤的。法律上将,真正发布了完整系统的(GPL授权的程序 + 插件)是用户自己,而GPL规定需要向发布者索取代码,这就意味着用户自己需要向自己索取代码。这个就是个死锁了。

    这个典型的应用就是针对linux kernel发布的专有内核模块。比如n卡的驱动程序。另外还有一个典型应用就是gccgo( https://golang.org/doc/install/gccgo )。gccgo是为gcc开发的go语言编译器前端,而gccgo本身是BSD授权的;而gcc是GPL授权。所以gccgo是单独发布的。原文:Although the frontend itself is under a BSD-style license, gccgo is normally used as part of GCC and is then covered by the GNU General Public License

    法律意义上说,gccgo单独发布的代码是BSD授权。但是一旦用户自己(或者发行版的打包人员)把gccgo和gcc扔在一起,gccgo瞬间就变成了GPL授权了。

    <snip>

    GPL中明确定义了什么是“使用”。一个网站可以用很多GPL的程序,但并不意味着整个网站都被GPL感染了。MySQL也是GPL授权,但并不意味着运行MySQL的网站就都被迫需要用GPL。软件如果没有发布,是不存在许可证问题的。

    <snip>

    除了GPL以外,还有其他许可证也是会感染“使用者”的,即copyleft类型许可证。但是不同许可证对“使用者”的定义不同。LGPL就不把使用共享库的用户认为是使用者。换句话说,如果我使用了一个LGPL的共享库,那么我可以不以LGPL许可证发布我的代码。但是如果我修改了LGPL授权的程序,我需要再分发。所以LGPL是比GPL更弱的许可证。还有一个AGPL,是比GPL更强的许可证。前面说了,如果我用GPL的程序通过网络对外提供服务,那么我是不会被GPL印象的。比如,我修改了MySQL的代码,并且使用修改后的MySQL对外提供数据库服务,那么我是不用把我修改后的MySQL以GPL授权的。简单说,我是MySQL的用户,我利用MySQL给我的用户提供服务,而这些用户并不直接是MySQL的用户。即,你用户的用户不是你的用户,所以GPL无法影响。AGPL则不同,它把用户的用户也归类为自己的用户。典型的AGPL程序就是MongoDB。如果我做了一个网站,修改了MongoDB,那么一旦我的网站有了用户,我则必须给这些用户提供我修改的MongoDB的代码。AGPL的传染性非常强,所以有些大公司都会禁止使用AGPL的软件。是的,MongoDB在一些公司是禁止使用的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:05 · PVG 05:05 · LAX 14:05 · JFK 17:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.