如果仅分发客户端软件,我可以在服务器上商业使用GPL许可的软件吗?


15

了解 GPL 的规则该规则指出,如果我使用GPL代码分发任何软件,则该代码必须采用GPL许可协议

但是,我想知道在这种情况下的规则是什么:我正在创建一个将在其中进行销售和分销的服务 客户端软件。

客户端软件中绝对没有GPL代码。这是我自己的代码的100%。

但是,客户端软件将连接到我的服务器,该服务器内部使用GPL代码。

不是分发服务器端软件;服务器端软件将驻留在我独自控制的专用服务器上,但是如果不连接到该服务器,客户端软件将无法工作。

这算作一个软件吗?如果要这样做,是否需要将我的客户端源代码许可为GPL?或者,我可以在不发布其源代码的情况下出售客户端软件吗?

Answers:


12

这不是一个明确的问题。考虑频谱的两个极端:

  1. 您的专有客户端软件是HTTP客户端,它呈现HTML响应。它可以与任何HTTP服务器一起使用。用于服务的HTTP服务器恰好使用GPL组件。

  2. 您有一个使用GPL许可组件的程序。您在该程序的操作中选择一个任意点,并将该程序分为两个程序。这两个程序通过完全多余的网络跃点进行通信。您将所有GPL许可的组件放在GPL下的第一个程序和许可证中,并将另一个程序在GPL不兼容的许可证下许可。

第一种情况显然是可以的。第二种情况显然不好。您没有提供有关您的特定案件的太多信息,即使您这样做,也只有法院的裁决才能确定您是否正确。

GPL FAQ 在互操作性,单独许可的程序中这样的说法

但是,在许多情况下,您可以将GPL涵盖的软件与您的专有系统一起分发。为了有效地做到这一点,您必须确保自由程序和非自由程序保持正常通信,不要以使它们有效地成为一个程序的方式进行组合。

这与“整合” GPL涵盖的软件之间的区别部分是实质问题,部分是形式。实质部分是这样的:如果将这两个程序组合在一起,以便它们有效地成为一个程序的两个部分,那么您就不能将它们视为两个单独的程序。因此,GPL必须涵盖整个过程。

您必须决定您是否认为自己的客户端服务器符合“同一程序的两个部分”的标准(因此,每个都必须根据GPL进行许可)。GPL FAQ 在另一个问题上对此主题作了进一步解释

两个单独的程序和一个包含两个部分的程序之间的界线在哪里?这是一个法律问题,最终由法官决定。我们认为,适当的标准既取决于通信机制(exec,管道,rpc,共享地址空间内的函数调用等),也取决于通信语义(交换各种信息)。

...

相比之下,管道,套接字和命令行参数是通常在两个单独的程序之间使用的通信机制。因此,当它们用于通信时,模块通常是单独的程序。但是,如果通信的语义足够紧密,可以交换复杂的内部数据结构,那么这也可能是考虑将这两个部分组合成一个更大的程序的基础

因此,网络通信当然可以通过“通信机制”测试,但是尚不清楚您的客户端/服务器对在“通信语义”测试中的位置。


将程序之间的接口公开化的程度进行区分是否合理?例如,如果我实现了一个象棋游戏系统,该系统使用了与专有象棋引擎进行通信的GPL用户界面程序,并且我记录了其他任何希望编写自己的象棋引擎的人如何使其能够使用相同的UI前端,那么我会即使认为,除非有人碰巧编写了替代引擎,否则UI前端除了与专有程序进行对话外,没有其他目的。
超级猫

嗯 我这么模糊地问了这个问题,因为我只是对GPL很好奇。但是,我想我现在明白了区别。如果我的服务器具有我的客户端软件需要运行的用户帐户信息,那么这显然违反了GPL。如果我的服务器就像一个数据包中继服务器,只允许我的客户端软件的两个版本相互通信,那将是可以的。我对这些假设是否正确?
史蒂芬·杰弗里斯

4

通过网络进行通信的两个进程并不需要像将可执行文件与库链接在一起那样来创建派生作品。因此,服务器上的GPL代码不适用于客户端代码。

在GPL下,分发二进制文件时需要分发修改后的源代码。由于您不分发服务器二进制文件,因此不需要分发服务器源代码。

GNU Affero GPL是与GPL类似的许可,带有附加的语言,旨在弥补您希望利用的这个漏洞(请参阅:http ://www.gnu.org/licenses/why-affero-gpl.html 和http://en.wikipedia.org/wiki/Affero_General_Public_License#Examples_of_web_applications_under_GNU_AGPL)。

免责声明:我是开发商,而不是律师。


3
刚一说明警告:如果客户端的设计与具体沟通这个服务器软件,那么它是完全有可能的是,FSF 考虑服务器和客户端软件作为一个产品。另请参见这里的GPL常见问题
巴特面包车不收Schenau

另一方面,如果第三方编写客户端软件以与您的服务器进行通信,而又没有看到服务器软件或许可证,则该说法似乎很荒谬。例如,这意味着微软可以起诉任何编写连接到Outlook服务器的软件的人。
gnasher729

2

客户端软件是否依赖于服务器软件才能正常运行?换句话说,客户端软件是否可以在不连接服务器的情况下运行?

如果答案是“是”,并且服务器仅向客户端软件提供了其他功能,而不是核心支持,那么您可能就很清楚了。如果服务器软件是客户端软件的组成部分,并且为客户端软件提供了核心功能(即,如果没有服务器,客户端软件将无法运行),则该组合是衍生产品,属于GPL协议。


我会谨慎行事,然后不要在服务器中使用GPL代码。
史蒂芬·杰弗里斯

2
@StevenJeffries此答案与当前实践和GPL要求背道而驰。只要我不分发软件或衍生作品,我就可以在服务器(例如Linux或GCC或WordPress)上自由使用GPL的软件。仅使用软件不会创建派生作品。在GPL的情况下,至少涉及进程级分离(没有共享内存,没有共享数据结构)时,它被认为是可以的。有关正确的解决方案和参考,请参阅J. Lenthe的答案。
阿蒙2015年

@amon:如果您甚至没有在服务器和客户端之间共享数据结构,那么您是对的。不过,我怀疑情况是否如此。我所描绘的区别(客户端软件是否正确执行取决于服务器软件)并不是任意的;这是FSF认为不是“衍生作品”的两个基本要求之一;另一个是“公平的沟通”。不要相信我。在FSF网站上自行阅读。
罗伯特·哈维

@amon:您可以在此处了解更多信息。
罗伯特·哈维

@amon这是另一个非常相关的GPL常见问题解答项目(在阅读了Robert的链接后做为后续工作),尤其是后三段:gnu.org/licenses/gpl-faq.html#MereAggregation
apsillers 2015年
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.