只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  使用了GPL软件开发的产品,如何避免GPL感染?


使用了GPL软件开发的产品,如何避免GPL感染?

发布时间:2019-05-24 06:52:52  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
继续问, 如果我使用了GPL的程序,并在此基础上修改了部分代码,然后用到我自己的软件中,那么我是否可以把自己的程序分为两部分,其中一部分包含了修改过GPL程序的程序,另一部分完全不包含任何GPL程序
使用了GPL软件开发的产品,如何避免GPL感染? 继续问, 如果我使用了GPL的程序,并在此基础上修改了部分代码,然后用到我自己的软件中,那么我是否可以把自己的程序分为两部分,其中一部分包含了修改过GPL程序的程序,另一部分完全不包含任何GPL程序,然后我再分别发布这两个程序,但是这两个程序必须同时使用才能正常运行,我可以通过这种方式私有化部分程序吗? 有没有例子说明一下这种情况? 针对题目,答案是可以避免 GPL 感染,但另外需要做一些工作。在开源脑残粉们把这里成讨伐你的阵地之前,先假设你说的 GPL 是 GPLv2 ,解答一下你的问题。
  1. 如果我在发布软件的时候不同时发布使用到的GPL软件,而是让用户自己安装这些GPL软件,那么是否可以私有? 简单说,条件不足,无法做出判断。分别发布只是 GPL 要求之一。
  2. 如果我使用了某种GPL的编程语言开发程序,而这个程序也必须在安装了此编程语言运行环境时才能使用,那么我发布这个程序是否必须用GPL? 这个应该不必吧? 确实不必。
  3. 如果我以GPL协议发布了某种软件,我是否可以再使用其它协议发布同一款软件?可以,但必须是兼容 GPL 的协议。
  4. 最后确定一点,如果我不发布我的软件,而只是做为一个web site运行,那么不管是否使用GPL软件,都可以私有?条件不足,无法判断。比如你弄了个 GPL 的 Java Applet 改了改放到网站上给人用,也要发布源代码。不限于二进制。再比如你弄了个 GPL 的 Javascript 改了改,也要发布修改版(当然不用特别发布,反正别人也能拽下来呵呵)。
  5. 如果我使用了GPL的程序,并在此基础上修改了部分代码,然后用到我自己的软件中,那么我是否可以把自己的程序分为两部分,其中一部分包含了修改过GPL程序的程序,另一部分完全不包含任何GPL程序,然后我再分别发布这两个程序,但是这两个程序必须同时使用才能正常运行,我可以通过这种方式私有化部分程序吗? 有没有例子说明一下这种情况?如果你隔离 GPL 影响,分开两部分是必须的。但在此之上也有其它要求。包含 GPL 代码的部分,受到 GPL 影响的(法律定义是原GPL作品的衍生作品,后面称为衍生部分),必须按照 GPL 要求开源。剩下的一部分,则是你自己的作品,可以自由选择协议(后面称为自由部分)。但是 GPL 对两者交互模式和发行方式都有要求:
    1. 代码上讲,自由部分完全必须独立于 GPL 代码,非 GPL 作品修改/衍生/翻译。(GPLv2 条款 0 说明的适用范围)。需要注意,对衍生作品的定义每个国家不同,中国版权法没有明确定义。
    2. 运行时交互上讲,两种部件在运行时交互的方式被 GPL 限定为:前端后端交互方式,或者主程序插件交互方式。
    3. 发布形式上,两者不能捆绑发布。具体一点,把GPL非GPL部分仅仅是物理上放到一张光盘(软件合集什么的)上给人是可以的。但逻辑上如果都在一个安装包中一装全装上是不行的。但是写个脚本先从网上下一个装一个再下了装一个则是可行的(没有先后顺序要求)。
    4.我自己的软件 SpeedTao 就是这么搞的,程序本身私有,用户下载时只能下载到自由部分。但如果用户要激活 P2P 下载功能,需要用到 GPLv2 的 mlnet。此时程序会提示用户下载该部件并安装。运行起来 Speedtao 是 mlnet 的前端,通过socket交互。mlnet 安装包以及自行修改代码也在网站上公布。
  6. 你写的代码你有知识产权,只要不违反 GPL,愿意用什么协议用什么协议,别管一粉胜十黑的脑残开源粉。。。
GPL 的传染可以被两道边界阻止(但是很不幸,这两道边界都很模糊,所以你必须用最保守的方式「自我审查」):
  1. 证明你的产品不是 derived work;或者
  2. 证明你满足 system exception。

如何证明不是 Derived Work
唯一被认可的方式是建立 address space boundary。被承认的 ASD 包括:
  1. 基于 MMU 的内存空间隔离(进程隔离,用户态,内核态隔离)。
  2. 程序、数据隔离。比如 GCC 不会感染被编译的源文件。
  3. 虚拟机隔离。两种语言并不使用同样的 IP(instruction counter)。比如 Lua 虚拟机和其上的 Lua 代码,JVM 和 Java byte code。VM 使用硬件的 IP,而 byte code 采用 VM 提供的虚拟 IP。Byte code 到 VM 之间的控制权切换并不是简单的 IP 附值。

如何证明满足 System Exception
这个比较少见。比如说,GCC 是运行在 Linux 上的。如果 Sun 把 GCC 移植到 Solaris 上,也不会感染 Solaris。必须证明你的系统是 GPL 软件的潜在目标平台。比如说,如果有人给 Photoshop 开发 GPL 许可证的 plug-in,也不可能感染 Photoshop。

后话
FSF 是一个意识形态很浓的组织。它们在不断试图增强感染性,而不是控制它。比如对于 ASD,FSF 就非常不满,甚至针对 Web service 开始提出能越过 ASD 的许可证。所以最好的方法是远离 FSF。Linus 在早期为 Linux kernel 采用 GPL,不过 kernel 社区稳定之后,Linus 对 FSF 的行为越发反对,决定永久停留在 GPLv2。而且很多类型的开源软件都有更商业友好的版本。

针对你的案例
如果我在发布软件的时候不同时发布使用到的 GPL 软件,而是让用户自己安装这些GPL软件,那么是否可以私有?
发布方式无关紧要。取决于 ASD 是否存在。
如果我使用了某种 GPL 的编程语言开发程序,而这个程序也必须在安装了此编程语言运行环境时才能使用,那么我发布这个程序是否必须用GPL? 这个应该不必吧?
属于 ASD。
如果我以 GPL 协议发布了某种软件,我是否可以再使用其它协议发布同一款软件?
可以。但是要保证其中没有其他人的 GPL 代码。或者集成其他人的代码需要要求其作者放弃 copyright。
最后确定一点,如果我不发布我的软件,而只是做为一个web site运行,那么不管是否使用GPL软件,都可以私有?
没有发布行为,不违法。但是你的知识产权很危险。因为你的整个 site 从法律上说是 GPL 的。任何人以任何手段拿到,都可以自由公开。(当然你可以惩罚签署了 NDA 的员工,但是仅此而已。如果你没有实证是哪个员工的行为,连这点也没法惩罚了。)作为自由软件的支持者(先表面立场),我来回答一下这个问题。

1、取决于你的软件结构是如何了:如果你的软件依赖GPL软件运行,但两者如 @冯东所说的存在地址空间隔离,那OK;如果不是地址空间隔离的,则需要LGPL,前提是不能修改LGPL发布的内容;如果你修改了,也放在同一个地址空间了,恭喜你,进入了GPL的Monad。

2、语言的运行时环境通常是LGPL的,而且不是你发布的,完全没有问题。

3、完全以任何你喜欢的方式再发布,前提是你有100%的所有权。但是这个再发布的部分要保证不是衍生作品,即保证已经发布的GPL和其他方式再发布的没有任何区别。如果别人获取到的是非GPL版本,他可以私有这个软件(不影响已经GPL发布的原软件),所以这个非GPL版本通常要比GPL版本贵很多(虽然本质上是完全一样的)。而使用别人已经GPL软件,你必须去获取它的非GPL版本(GPL决定了他们本质上完全一样),但是这个通常非常难:广泛使用的GPL软件的所有权通常非常复杂(GNU系列的所有权都是FSF,这个倒是很简单,但是你不给够钱,人家FSF不卖你),要re-licence需要获得所有作者的同意,在free software世界里,能这样给你开的机构基本可以数出来。

4、Website使用也是分情况的,如果使用者是你自己(你的Web server),用户接触到的只是一个UI,那么,这属于没有发布的内容;如果是使用者是用户(的浏览器),用户可以接触到Javascript代码,Java插件,这时就是发布了。GPL限制你发布时必须使用GPL,但却给你没发布时”几乎“任意使用的自由。没有发布GPL衍生作品当然不是私有的(不然GPL部分作者的利益就被你侵犯了),只是没有发布的而已;一旦要发布,要copy,就必须是GPL的。

5、其实已经说得很清楚了:发布基于GPL的衍生作品,必须GPL;发布使用GPL,但没有修改的,如果是地址空间隔离,完全没有限制,如果是LGPL,只要没修改,不算作衍生作品,可以同时发布(两个不同的许可证)。已经发布的GPL想要私有化,不可能!你最多只能买到(大部分情况买不到)一个非GPL发布的拷贝(虽然和GPL发布的完全一致),基于私有版本做的才能私有化。

==========================

P.S. 这年头创业的,idea不值钱,代码(idea的实现)不值钱,只有运营和品牌值钱。给你个Google的源代码,你能再创立一个glegoo吗?
想要控制自己的代码,就别发布。GPL给用户最大的自由的同时,也最大程度上剥离的作者的对代码的控制(用户和作者不可能同时控制代码)。

开发的产品中准备采用一个GPL的JS库,那么此产品也必须使用GPL,这一点是明确的

现在有个疑问是:我的产品基于GPL开源后,其中能否依赖其他非GPL协议的库,比如EPL1和Apache2?

我的理解:

  1. EPL和GPL不兼容,我的产品不能同时包含EPL和GPL的库,https://eclipse.org/legal/eplfaq.php#GPLCOMPATIBLE
  2. Apache2和GPLv3是兼容的,对我的产品没有影响,https://www.apache.org/licenses/GPL-compatibility.html

所以我准备如下来防止GPL污染我的整个系统:

  • 服务端源码上不包含此js
  • 浏览器中运行的代码,涉及引用或依赖此GPL库的代码全部基于一个独立项目使用GPL开源、调用时全部走RPC

请大家帮忙看看有问题没?

刚好在研究类似问题,这个GNU网址上的FAQ正好是针对这个问题的(What is the difference between an “aggregate” and other kinds of “modified versions”?)

我想用盗版Adobe软件,还不想付钱该怎么办

今年早些时候,德国的 Netfilter 内核子系统贡献者 Patrick McHardy 引发了争议,他自行担负起了 GPL 执法的角色,他联络了德国的许多企业,以不遵守 GPL 为由索要小额金钱。在 18 个月内他利用这种方法勒索到了 200 万欧元。

FossID可以帮助大家找到GPL的违规使用情况。

GPL是老美自己定的协议规定,我们干嘛要遵守?法律都是有国界的,区区几句话还能凌驾在法律之上吗

责任编辑:
热门阅读排行
© 16货源网 1064879863