Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Open source 我可以根据GPL规则发布链接到封闭源代码产品的开放源代码库吗?_Open Source_Licensing_Gpl - Fatal编程技术网

Open source 我可以根据GPL规则发布链接到封闭源代码产品的开放源代码库吗?

Open source 我可以根据GPL规则发布链接到封闭源代码产品的开放源代码库吗?,open-source,licensing,gpl,Open Source,Licensing,Gpl,我开始构建一个使用开源库的商业应用程序。我一直在仔细研究各种文件和帖子,但还是有问题。据我所知,我需要“隔离”开源部分。实现这一点的一种方法是提供一个类,该类通过“普通”链接与开源进行通信 建议的解决方案是修改开放源代码(一个命令行实用程序),为其提供某种API。然后开发一个包装器或代理程序,使用API与开源程序通信。将修改后的源代码和包装作为开放源代码发布,但保持源代码的其余部分关闭。请注意,开源代码将与代码一起交付,并作为静态或动态链接库执行 这在GPL下有效吗 不,如果它是GPL,并且您与

我开始构建一个使用开源库的商业应用程序。我一直在仔细研究各种文件和帖子,但还是有问题。据我所知,我需要“隔离”开源部分。实现这一点的一种方法是提供一个类,该类通过“普通”链接与开源进行通信

建议的解决方案是修改开放源代码(一个命令行实用程序),为其提供某种API。然后开发一个包装器或代理程序,使用API与开源程序通信。将修改后的源代码和包装作为开放源代码发布,但保持源代码的其余部分关闭。请注意,开源代码将与代码一起交付,并作为静态或动态链接库执行


这在GPL下有效吗

不,如果它是GPL,并且您与它链接,那么您的代码也将成为GPL。如果是LGPL,情况就不一样了(你可以构建针对LGPL许可库的商业应用程序),但这里的情况似乎不是这样。

在我开始之前,我应该说我不是律师,这不应该被视为法律建议。如果你需要法律意见,你应该请律师

只要您将程序链接到GPL'd软件,您的软件就被视为GPL'd软件的衍生产品

如果您希望使用一个GPL'd软件,您应该根据GPL或GPL兼容许可证发布您的软件。否则,您应该找到另一个可以满足您需要的软件,或者自己编写。GPL的要点是,许可的价格是,你也可以在自由软件许可下发布你的衍生作品的源代码。如果你不考虑使用专有软件而不支付适当的许可费,你就不应该使用GPL < 隔离它的唯一方法是使用一个完全独立的可执行文件,通过通用接口(套接字、管道等)进行通信,这样您的软件或GPL的软件就可以很容易地被替换。它通过的接口需要非常通用;它不能依赖于GPL'd软件的实现细节,比如内部数据布局或任何类似的东西。基本上,如果它通过可以用作通用标准的协议进行通信,那么您的软件可以与GPL'd软件进行通信,而不被视为衍生产品

无论如何,虽然可以通过专有软件与GPL'd软件进行通信,但您不应该特意这样做。您将违反GPL的精神,并且必须非常小心地使接口具有足够的通用性,以免被视为侵权。相反,您应该找到一个具有不同许可证的软件,自己编写,或者在GPL兼容许可证下发布您的软件


编辑:Linux每周新闻中有一篇关于这个主题的文章。根据文章中的分析,即使您分离出一个可以在命令行上与GPL'd软件通信的接口,您也应该将其作为一个洁净室实现,一个组使用GPL'd代码,一个组实现另一个软件,所有在他们之间传递的规范都会被律师过滤。所以,真的,麻烦比它的价值还多。

如果你不链接它,你就没有问题了。因此,与其为这个开源命令行工具开发API,不如编写一个小包装器,直接在命令行上与程序交互

由于您没有链接,现在只是执行二进制代码,因此您的代码不必在GPL下发布

您可以使用fork、pipe、exec和friends来完成此操作!这是一个简单的解决方案,取决于应用程序在命令行上期望输入的方式,它可以很好地工作(基于诅咒的东西更难…需要某种终端)

编辑:

从评论来看,这听起来似乎是无效的,并且仍然可能导致问题。我建议联系一位律师,以确保你是清楚的,他将能够解释GPL,并告诉你什么可以和不可以做GPL的代码

我认为仅仅执行一个GPL'ed程序,然后发送数据(a.l.a.管道数据到其中)不应该导致您的程序也被GPL'ed


GPL太复杂了,如果我使用命令行工具执行它并将数据传输到它,我的程序仍然可以成为GPL。真奇怪。给我一天中任何时候的BSD或MIT,让我更容易理解。

对于GPL,我认为唯一的解决办法是将它包装成COM对象(也需要是GPL或兼容的),并在运行时连接到对象。因为这样可以避免(静态地)链接GPL代码,所以您就可以摆脱困境了


这个技巧适用于GPL v2代码,但可能不适用于GPL v3。

不要相信那些谈论远程过程调用(COM)或标准IO的人。如果有什么需要说明的话,那么标准的IO来自于遗留的情况,比如将输出传输到grep并将其传输到其他应用程序中


相反,可以这样想:您的应用程序是从GPL组件派生出来的吗?您能否向一个相当聪明的外行解释一下,为什么您的应用程序不是开源库的派生产品。你可以解释stdio的包装和COM接口,直到你脸色发青,但你的律师、法官、客户或其他任何人都不会买它。相反,您必须证明删除该GPL库不会显著修改应用程序的操作。如果你不能做到这一点,那么,很抱歉,但是你如履薄冰。

请注意,GPL有很多不同的解释