通过将库移出进程来避免违反GPL


21

假设有一个根据GPL许可的库。我要使用它是封闭源项目。我这样做:

  1. 围绕该GPL库创建小型包装应用程序,该应用程序侦听套接字,解析消息并调用GPL库。然后返回结果。
  2. 发布其来源(符合GPL)
  3. 在我的主应用程序中为此包装创建客户端,并且不发布源代码。

我知道,与静态/动态链接相比,这会增加巨大的开销,但是我对理论方法感兴趣。


6
您编写的包装程序将根据GPL获得许可。因此,使用包装程序仍然会受到GPL的用于连接等条款
TZHX

4
为什么不先与作者联系,看看您是否可以根据LGPL或类似许可证进行许可。
jk。

8
@TZHX我相信他的意思是包装程序将是一个充当服务器的独立应用程序-他的专有代码将在客户端
jk。

谁也将分发封闭源应用程序?和GPL的版本是许可证
JK。

2
@jwenting这个问题清楚地表明它正在用尽进程
jk。

Answers:


32

从法律上讲,我认为可以(但我不是律师,请咨询律师以寻求法律建议)。

道德上,这是应受谴责的。如果您不喜欢GPL,那么“适当”的解决方案是不使用GPL库。

编辑:为了澄清,无论GPL在是否允许动态链接方面具有法律地位,LGPL都是专门为允许在库的情况下允许动态链接而创建的。因此,对我来说似乎很清楚,通过选择GPL而不是LGPL,该库的作者明确地这样做是为了禁止动态链接。在我看来,使用技术手段来解决表达作者对代码的明确意图的法律限制是可以理解的。

作为记录,我个人不是GPL的粉丝(我更喜欢MIT或BSD这样的宽松许可)。但是,我非常乐于尊重其他开发人员的工作,如果他们不希望您将其库与开源软件链接,那么这是特权。


12
我不认为这里有一个道德问题- GPL似乎明确地允许他使用情况
JK。

3
@vartec是官方GPL常见问题解答的引文:“与其他模块进行静态或动态链接是基于组合的工​​作。因此,GNU通用公共许可证的条款和条件涵盖了整个组合。” 如果Stallman对什么是开源有不同的看法,这并不意味着他讨厌它。他是这一运动的主要思想家。
安德烈

8
@vartec:我给您的印象是,您不了解,当您在应用程序中使用SOMEONE ELSE的代码时,您必须遵守HE使用HIS代码的条款。不喜欢吗 不要使用别人的GPL代码。这么简单。
约翰·斯特罗姆

3
这是我的建议:从您似乎非常依赖的 GPL代码中得出地狱,并查看法院案件的结局。创建GPL3就是为了在GPL2中插入这样的合法漏洞,所以也许您会摆脱它。我怀疑人们会为了您的荣誉而游行,因为您逃避了法律手段,并且如果您足够有效,人们会使用更多的使用条款来许可他们的代码,只是为了ite视您。最后,通过避免使用此类线程可以改善世界。
Godeke

3
坚决不同意这种说法在道德上应受谴责。在道德上应受谴责的是告诉人们他们无权做GPL允许他们做的事情。当我将作品放在GPL之下时,我这样做是因为我希望GPL的规则适用。告诉人们他们不应行使GPL赋予他们的权利,这是应受谴责的。这是GPL允许的。那些将作品放置在GPL之下的人这样做是因为他们希望这样做。
大卫·史瓦兹

6

IANAL,但我相信您还可以,GPL3的相关部分位于第5部分的末尾:

涵盖作品与其他单独且独立的作品的汇编,其本质上不是涵盖作品的扩展,并且不与之合并以形成更大的程序,无论是在存储量还是发行量中如果没有将汇编及其产生的版权用于限制汇编用户的访问或合法权利,而不是超出个人作品的许可范围,则该介质被称为“汇总”。将涵盖的作品包括在汇总中不会导致本许可适用于汇总的其他部分。

这可能将完全取决于您的“客户”的行为,mouviciel的答案可能是有关如何安全地进行操作的良好指导

如果您认为您的应用是库的扩展而不是库的扩展,那么您可能是对的(应该在一个合适的地方知道这一点),在这种情况下,最好的选择是与作者联系并尝试获取一个不同的许可证

似乎回我的位置,这是明确由GPL允许的,假设得当。


我读了它,但是问题是GPL文本是用法律语言而不是开发语言编写的。包装的诀窍是使商业应用“聚合”,而不是“衍生”。但是我认为它属于“所涵盖作品的自然扩展”。
安德烈

在法律语言方面寻求帮助时,您将需要一名律师。如果您认为您的应用是库的扩展而不是库的扩展,那么您可能是对的(应该在一个合适的地方知道这一点),在这种情况下,最好的选择是与作者联系并尝试获取一个不同的许可证
JK。

1
@Andrey:如果程序的“性质”直接与GPL代码绑定,则上面引用的部分将不适用。从您的问题来看,确实是这样。一个反例可能是网络入侵分析程序,该程序恰好通过您提出的机制使用GNU readline。(Readline是一个有趣的测试用例,因为有BSD许可的替代方案。)
Fred Nurk,

“ aggregate”子句是为了明确表明位于同一CD-Rom或Linux发行版上不会创建派生类。
肖恩·麦克米伦

6

请参阅“ 我要在我的专有系统中合并GPL覆盖的软件”。我可以这样做吗?

问题是,您的包装器应用程序本身是否有用?如果您制作的程序的命令行版本是GPL,则可以使用其他许可证发行GUI。例如,您可以为封闭源代码的gcc制作IDE或基于diff的可视化diff工具。

但是,如果您打包的库除了被程序使用之外没有其他用途,并且没有该库就没有程序使用,因为它是派生的作品,需要根据GPL发布。


我的理解是,您可以在MIT许可下授予包装器,但仍然可以。
烤面包机

2
科林,绝对不是。包装程序明确地与GPL库组合成一个二进制文件。要在一个二进制文件中使用GPL代码,您必须对自己的代码进行GPL许可。
混凝土塘鹅

5

海事组织,从法律上来说还可以。(IANAL)为了改善问题的道德方面,请不要将其称为“使FooBar合法可用于MyClosedApp的FooBar包装器”,而应将其称为服务器。使它成为一个不错的开源小程序,“允许通过网络执行FooBar”。将其放在SourceForge上或将其专用于一个网站,其中包含项目页面,说明和内容。然后让“ MyClosedApp”仅使用“ FooBar服务器”。


2

据我了解,只要您可以在没有GPL库的情况下运行软件,就可以将其关闭。将GPL库视为一个插件,缺少该插件不会使您的软件失效。


1
这绝对是错误的。将其用作插件(也称为动态链接)会使生成的应用程序“衍生”为GPL。
Andrey

我不确定插件始终是动态链接的同义词。当然在这种情况下,OP没有提出动态链接任何东西,所以我觉得mouviciel的建议看台
JK。

@jk好吧,如果您仅创建一个插件并且它是基于GPL许可证的,那么这听起来很违反。
安德烈

4
除非套接字通过网络,否则AGPL不会禁止这样做。这很具体。而且,这不是对有用性的检验,而是对GPLed和专有软件的紧密程度的检验。静态链接肯定太紧密了,套接字(除了特定的AGPL案例)肯定还可以,动态链接可能存在也可能不是(我听过两边都有法律依据的论点,而且还没有美国判例法)。
David Thornley

1
@Andrey:所以您现在要说的是,只要像Photoshop这样的闭源软件能够在没有GPL组件的情况下完成其工作,就可以在不使其成为GPL的情况下进行分发。这正是这个答案所说明的。
布朗

1
  1. 尝试寻找开源替代方案,如果没有替代方案,则选择GPL;
  2. 检查是否是带有Affero子句GPLv3,没有什么可做的;
  3. 如果是GPLv2,则可以完全按照您的建议进行操作;

还有一些有争议的选择。在大多数立法机构中,动态链接应该是“派生作品”的边界。其背后的逻辑是,在动态链接时,您只是在程序中包含头文件。在许多法规中,头文件被视为API定义,并且明确地排除了头文件的版权。另一方面,通过动态链接,与GPL库的实际链接是在最终用户的系统上完成的。但是,正如我已经说过的那样,存在很多争议,斯托曼强烈反对。


GPL v2和v3之间的区别是什么使得我无法进行黑客攻击?我不是动态链接,而是尽可能地将它们分离。
安德烈(Andrey)

GPLv3的目标之一是防止这种“规避”方法。
vartec

4
首先,GPL变体是经过OSI批准的官方开源许可证(就像没有广告条款的BSD许可证是Stallman批准的自由软件许可证一样)。其次,没有GPL版本(包括Affero)限制您使用GPL和专有软件与标准进程间通信方法(例如套接字)进行通信的能力。
David Thornley

允许DRM子句的IMO GPLv3违反了开放源代码定义opensource.org/docs/osd的
vartec

1
@vartec:DRM不是“奋斗的领域”。请参阅“例如,它可能不限制程序在[商业用途]中使用或在基因研究中使用。” OSI显然认为GPL3是开源的,并且满足他们定义的所有要点,因为他们批准了它。
Thomas Edleson

0

如果亚当·布朗编写了一个使用GPL库并充当“服务器”的程序是合法的,如果他将所有源代码发布到与之相关的所有内容,但他发布的唯一客户端代码就显得微不足道,因为这就是全部他写了客户端?我认为没有任何依据可以。

如果Charles Dover找到了Adam Brown的“服务器”并决定编写一个闭源程序与之通信,那么GPL会以任何方式限制他的行动吗?我看不到,因为他唯一使用GPL版本的软件就是他从亚当·布朗那里收到的二进制文件。如果他分发亚当的二进制文件,他还必须包括到源的链接,但是GPL中的其他内容都不会影响任何查尔斯的代码。

关于一个人编写GPL许可的服务器,然后将该服务器用于自己的闭源用途,如果他在编写服务器时做出了真正的努力,我认为这不会有任何法律问题。对于可能希望以相同方式使用提供的GPL代码的其他用户很有用。尤其是,接口的公开发布的文档应足以使合格的程序员能够像原始程序一样为客户端程序编写将为客户端程序接受的服务器代码,并编写使用该程序的客户端程序。服务器与作者的应用程序相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.