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

请问使用 GPL 协议的 pyqt ,后期开发的所有代码都必须遵守 GPL 协议吗?

  •  
  •   yeelone · 2015-05-31 11:02:36 +08:00 · 9099 次点击
    这是一个创建于 3243 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前在工作中经常需要开发一些win 程序,由于比较熟悉python ,所以选择pyqt ,但由于pyqt是gpl协议 ,心中有个疑问想问一下各位。比如我使用“软件开源免费,定制服务收费”的模式,为客户定制的功能代码也是必须遵守GPL协议的吗?
    15 条回复    2015-10-02 15:55:07 +08:00
    9hills
        1
    9hills  
       2015-05-31 11:03:55 +08:00 via iPad
    是的,请换替代品
    wwqgtxx
        2
    wwqgtxx  
       2015-05-31 11:22:17 +08:00 via Android
    的确,不过貌似在天朝没人管吧…
    sneezry
        3
    sneezry  
       2015-05-31 11:24:59 +08:00 via iPhone
    对的,GPL协议有时被说成是病毒协议(贬义),因为它像病毒一样会感染衍生代码强制继续遵循GPL协议发布。
    hjc4869
        4
    hjc4869  
       2015-05-31 11:46:51 +08:00   ❤️ 1
    是的。珍爱生命,远离GPL库。
    ZreySoft
        5
    ZreySoft  
       2015-05-31 11:54:09 +08:00
    如果客户定制的功能代码,可以脱离你的程序运行,这个就属于GPL的边缘地带;反之,就是GPL协议覆盖的一部分。

    另外,PyQT是有商业版本的,按人头算,一个License三千多人民币,我们就是购买的,还能接受。
    billlee
        6
    billlee  
       2015-05-31 12:04:31 +08:00
    可以选择 LGPL 授权的 PySide
    uleh
        7
    uleh  
       2015-05-31 12:10:13 +08:00 via iPhone
    为pyqt单独写个程序,跟主程序之间通过文件、网络之类的通讯,可以隔离GPL
    monnand
        8
    monnand  
       2015-05-31 12:29:39 +08:00   ❤️ 4
    简单说,是的,因为GPL中界定“使用GPL程序”包括调用GPL授权的共享库。但是请继续往下看:

    按照你说的“软件开源免费,定制服务收费”的模式,其实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授权了。

    楼主可以考虑这样:主要程序采用GPL发布,但是支持插件。插件单独发布,可以采用任何授权方式,甚至可以是专有的。但是把插件和程序组装起来这个动作则需要用户自己完成。

    免责声明:本人非法律专业,言论仅供参考。
    monnand
        9
    monnand  
       2015-05-31 12:30:59 +08:00
    对了,@uleh 的办法也是可以。你可以让GPL授权的程序和非GPL授权的程序运行在单独的进程中,仅仅通过网络/进程间通信的机制来完成任务。
    yeelone
        10
    yeelone  
    OP
       2015-05-31 14:11:37 +08:00
    我明白了。谢谢@monnand 这么详细的为我解释。我需要好好考虑一下这其中的利与弊。
    skydiver
        11
    skydiver  
       2015-05-31 16:23:01 +08:00
    http://www.zhihu.com/question/19771481 这个答案里说的很清楚了。。楼上面说的有点乱而且好像不是那个意思。
    monnand
        12
    monnand  
       2015-05-31 17:19:48 +08:00   ❤️ 3
    @skydiver 看了你链接中排名第一的答案(冯东的答案),里面很多明显错误/逻辑不清的地方。以下仅举几个例子:

    > 比如说,GCC 是运行在 Linux 上的。如果 Sun 把 GCC 移植到 Solaris 上,也不会感染 Solaris。必须证明你的系统是 GPL 软件的潜在目标平台。

    这几句话非常具有误导性。事实是:无论把GCC移植到哪个平台,都不可能感染这些平台。因为GCC是独立运行的程序,按照GPL中对于“使用”的定义,独立运行的程序是不会感染其他程序的。至于所谓的“必须证明你的系统是 GPL 软件的潜在目标平台”,我没明白什么意思。我知道的是,如果微软开发一款运行在Windows平台上的GPL授权的软件,只要没有共享代码,那么显然不用担心Windows受到影响。

    原题主问:如果我不发布我的软件,而只是做为一个web site运行,那么不管是否使用GPL软件,都可以私有?

    冯东回答:没有发布行为,不违法。但是你的知识产权很危险。因为你的整个 site 从法律上说是 GPL 的。任何人以任何手段拿到,都可以自由公开。(当然你可以惩罚签署了 NDA 的员工,但是仅此而已。如果你没有实证是哪个员工的行为,连这点也没法惩罚了。)

    再次强调:GPL中明确定义了什么是“使用”。一个网站可以用很多GPL的程序,但并不意味着整个网站都被GPL感染了。MySQL也是GPL授权,但并不意味着运行MySQL的网站就都被迫需要用GPL。软件如果没有发布,是不存在许可证问题的。另外,GPL是对*用户*授权,不是我的用户,我没有义务用给他看代码。*员工*不一定是软件的用户,所以并不会受到GPL协议的影响。换句话说,GPL说的是软件用户可以使用/修改/在分发软件的代码。但是员工并非他们开发的软件的用户,所以他们不能享有GPL赋予的权利。保护公司内部代码不外露的手段是保密协议,这已经是很强的法律手段了。并不存在所谓“知识产权很危险”这个问题。

    再多说几句:

    除了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在一些公司是禁止使用的。
    skydiver
        13
    skydiver  
       2015-05-31 18:19:15 +08:00
    @monnand 请你也到知乎发一个答案吧,以正视听~
    monnand
        14
    monnand  
       2015-06-01 09:32:09 +08:00
    @skydiver 多谢!不过我就不去知乎上掺和了。毕竟我不是专业的法律人士,而且GPL和中国当前著作权法的关系是什么我也不了解。
    middleware
        15
    middleware  
       2015-10-02 15:55:07 +08:00
    今天偶然看到这个,@monnad 说的是我的答案,所以我觉得虽然日久挖坟,也要澄清一下。

    第一,我非常反对说「不是专业的法律人士」就不能谈法律。法律本来就是让大众理解的,难不成大家平时混日子,打官司的时候再撞大运看自己的行为合法与否?

    接下来说这个例子:「如果 Sun 把 GCC 移植到 Solaris 上,也不会感染 Solaris 。必须证明你的系统是 GPL 软件的潜在目标平台。」 @monnad 说例子很有误导性,其实 FSF 自己解释 system exception 的时候用的就是这个例子,只不过用的 Windows 。

    @monnad 说这个例子没有共享代码,这是我没有说清楚。因为 GCC 在 Solaris 上必然要动态链接 Solaris 的 libc (而不是 glibc )。但是 Solaris libc 却不必开源。这里没发用 address space boundary 来解释,所以必须用 system exception 来解释。

    再有,@monnad 说「 GPL 中明确定义了什么是“使用”。一个网站可以用很多 GPL 的程序,但并不意味着整个网站都被 GPL 感染了。」我想我前面已经对如何「感染」写的很清楚,所以这里偷了一点懒,用了「整个网站」。但是我的意思是如果作者在没有两道边界的情况下用了 GPL ,那么在边界之内的整个部分都是 GPL 的。至于 @monnand 说「保护公司内部代码不外露的手段是保密协议,这已经是很强的法律手段了。」我并不认为这个手段比版权更强。因为这个手段只能惩罚泄密行为本身,并不能保证禁止后续的对作品的使用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1128 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:00 · PVG 07:00 · LAX 16:00 · JFK 19:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.