请问使用 GPL 协议的 pyqt ,后期开发的所有代码都必须遵守 GPL 协议吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
inyfee
V2EX    问与答

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

  •  
  •   inyfee 2015-05-31 11:02:36 +08:00 9759 次点击
    这是一个创建于 3853 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前在工作中经常需要开发一些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授权的程序运行在单独的进程中,仅仅通过网络/进程间通信的机制来完成任务。
    inyfee
        10
    inyfee  
    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     Solana     4984 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 01:13 PVG 09:13 LAX 17:13 JFK 20:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86