假设有一个根据GPL许可的库。我要使用它是封闭源项目。我这样做:
- 围绕该GPL库创建小型包装应用程序,该应用程序侦听套接字,解析消息并调用GPL库。然后返回结果。
- 发布其来源(符合GPL)
- 在我的主应用程序中为此包装创建客户端,并且不发布源代码。
我知道,与静态/动态链接相比,这会增加巨大的开销,但是我对理论方法感兴趣。
假设有一个根据GPL许可的库。我要使用它是封闭源项目。我这样做:
我知道,与静态/动态链接相比,这会增加巨大的开销,但是我对理论方法感兴趣。
Answers:
从法律上讲,我认为可以(但我不是律师,请咨询律师以寻求法律建议)。
道德上,这是应受谴责的。如果您不喜欢GPL,那么“适当”的解决方案是不使用GPL库。
编辑:为了澄清,无论GPL在是否允许动态链接方面具有法律地位,LGPL都是专门为允许在库的情况下允许动态链接而创建的。因此,对我来说似乎很清楚,通过选择GPL而不是LGPL,该库的作者明确地这样做是为了禁止动态链接。在我看来,使用技术手段来解决表达作者对代码的明确意图的法律限制是可以理解的。
作为记录,我个人不是GPL的粉丝(我更喜欢MIT或BSD这样的宽松许可)。但是,我非常乐于尊重其他开发人员的工作,如果他们不希望您将其库与开源软件链接,那么这是特权。
IANAL,但我相信您还可以,GPL3的相关部分位于第5部分的末尾:
涵盖作品与其他单独且独立的作品的汇编,其本质上不是涵盖作品的扩展,并且不与之合并以形成更大的程序,无论是在存储量还是发行量中如果没有将汇编及其产生的版权用于限制汇编用户的访问或合法权利,而不是超出个人作品的许可范围,则该介质被称为“汇总”。将涵盖的作品包括在汇总中不会导致本许可适用于汇总的其他部分。
这可能将完全取决于您的“客户”的行为,mouviciel的答案可能是有关如何安全地进行操作的良好指导
如果您认为您的应用是库的扩展而不是库的扩展,那么您可能是对的(应该在一个合适的地方知道这一点),在这种情况下,最好的选择是与作者联系并尝试获取一个不同的许可证
这似乎回我的位置,这是明确由GPL允许的,假设得当。
请参阅“ 我要在我的专有系统中合并GPL覆盖的软件”。我可以这样做吗?
问题是,您的包装器应用程序本身是否有用?如果您制作的程序的命令行版本是GPL,则可以使用其他许可证发行GUI。例如,您可以为封闭源代码的gcc制作IDE或基于diff的可视化diff工具。
但是,如果您打包的库除了被程序使用之外没有其他用途,并且没有该库就没有程序使用,因为它是派生的作品,需要根据GPL发布。
据我了解,只要您可以在没有GPL库的情况下运行软件,就可以将其关闭。将GPL库视为一个插件,缺少该插件不会使您的软件失效。
还有一些有争议的选择。在大多数立法机构中,动态链接应该是“派生作品”的边界。其背后的逻辑是,在动态链接时,您只是在程序中包含头文件。在许多法规中,头文件被视为API定义,并且明确地排除了头文件的版权。另一方面,通过动态链接,与GPL库的实际链接是在最终用户的系统上完成的。但是,正如我已经说过的那样,存在很多争议,斯托曼强烈反对。
如果亚当·布朗编写了一个使用GPL库并充当“服务器”的程序是合法的,如果他将所有源代码发布到与之相关的所有内容,但他发布的唯一客户端代码就显得微不足道,因为这就是全部他写了客户端?我认为没有任何依据可以。
如果Charles Dover找到了Adam Brown的“服务器”并决定编写一个闭源程序与之通信,那么GPL会以任何方式限制他的行动吗?我看不到,因为他唯一使用GPL版本的软件就是他从亚当·布朗那里收到的二进制文件。如果他分发亚当的二进制文件,他还必须包括到源的链接,但是GPL中的其他内容都不会影响任何查尔斯的代码。
关于一个人编写GPL许可的服务器,然后将该服务器用于自己的闭源用途,如果他在编写服务器时做出了真正的努力,我认为这不会有任何法律问题。对于可能希望以相同方式使用提供的GPL代码的其他用户很有用。尤其是,接口的公开发布的文档应足以使合格的程序员能够像原始程序一样为客户端程序编写将为客户端程序接受的服务器代码,并编写使用该程序的客户端程序。服务器与作者的应用程序相同。