据我所知,当我使用任何 GPL 代码(如 MySQL)构建桌面/服务器应用程序时,我将不得不在 GPL 下发布我的软件的源代码。
如果我想使用 MySQL 开发一个网络应用程序,我的代码将链接到 MySQL 库。在这种情况下,我必须按照 GPL 发布我的 webapp 的源代码吗?
如果您将其保留为仅服务器(因此是“私有”),则不必将其作为 GPL 发布。但是一旦它到达公共桌面,就不能再被认为是内部构建,因此需要源代码。
这样你就可以:
您必须发布源代码(在 GPL 下),或者支付 MySQL 的专有许可证,以便您获得根据更适合专有产品使用的许可证分发 MySQL 二进制文件的权利。不过,最好将此类问题交给您的律师。
ETA:只是澄清一点;如果您编写自己的库并使用其有线协议与 MySQL 对话,那么您将始终 100% 清楚。同样,如果您使用的库已经做到了这一点,但获得了 BSD 许可(例如),那么您也很清楚,因为您只是通过套接字连接与 MySQL 对话,而不是实际调用进入 GPL 代码。我没有立即知道任何 BSD 许可的 MySQL 协议接口,但肯定有可能在某个地方有一个。
您不必为了在应用程序中使用 MySQL 而链接 MySQL 库。您所要做的就是使用 MySQL 协议与 MySQL 服务器“对话”;在这种情况下,您作为客户端(即作为用户)连接到 MySQL 服务器,然后您不需要在 GNU GPL 许可下发布您的软件。
问题是,你的程序怎么能说 MySQL 协议?一种可能性是使用 GPL 的官方 MySQL 客户端库(连接器)。如果您这样做,您将您的程序静态链接到 GPL 库,因此您需要在 GPL 下发布您的软件。
或者,您可以使用不同的许可证链接到第三方客户端库。例如,您可以使用MariaDB 客户端库,它是 LGPL 的(因此与专有软件兼容)并提供与原始 MySQL 客户端库相同的 API。有关更多详细信息和建议,请参阅同样适用于 MySQL的MariaDB 许可常见问题解答。
将 MySQL 服务器与您的软件一起分发可能会很棘手:您可以简单地要求您的客户自己下载和安装 MySQL,或者开发一个简单的下载器来与您的软件一起分发。
如果您自己运行 Web 应用程序,而不是将其作为应用程序分发,那么您不必发布源代码。允许访问 Web 应用程序不被视为分发。
编辑:如果有兴趣,您可以查看Affero 通用公共许可证,它要求 AGPL 软件的网络用户可以使用该源(例如,它将适用于 Web 应用程序)。
除非您从 GPL 软件派生和/或分发 GPL 软件,否则您应该是安全的。
链接 MySQL 客户端库既不是衍生作品,也不是分发。
更新:想想看,你如何链接(动态或静态)与库会有所不同。静态链接是分发,但如果您动态链接并且您的客户端自己下载连接器,那不是分发,您应该是安全的。
哦,还有 IANAL。
MySQL 使用双重许可。正如他们所说——如果你有空,我们就有空。
因此,据我所知,如果您仅使用 MySQL JDBC 连接器 - 您的代码应该有许可证或 GPL。
如果我想使用 MySQL 开发一个网络应用程序,我的代码将链接到 MySQL 库。我应该在这种情况下发布我的 webapp 的源代码以符合 GPL 吗?
正如其他人所说,如果您不将应用程序分发给其他人,则根本没有问题。
通常,您将针对标准数据库 API 进行开发,并让用户决定将哪个数据库连接到应用程序。在这种情况下没有问题。“你的代码”不会链接到 libmysqlclient,但它可能会与链接到 libmysqlclient 的数据库访问模块结合使用。
如果你想分发一个安装程序,将你的应用程序和 libmysqlclient 一起设置,那可能不会算作“纯粹的聚合”,所以它需要你在开源许可证下分发你的应用程序。然而,这不一定是 GPL - 请参阅MySQL FOSS License Exception。
如果您想分发一个安装程序来设置您的应用程序和 MySQL 服务器本身,则该例外不适用,因此您仅限于 GPL。
自然是 IANAL,对于什么算作派生,尤其是在动态链接方面,肯定仍然存在一些不确定性。然而,以上是我对 MySQL AB 在许可方面的传统立场的理解,我还没有听说在 Sun 收购后有任何变化。
不幸的是,它并没有那么清晰:GPL 禁止在不提供每个“衍生产品”来源的情况下进行分发。分发在法律上被定义为将源从一台计算机转移到一台或多台计算机以供官方使用的行为。
不幸的是,这也可能包括在服务器集群、QA 盒、开发盒等上的使用。在现代开发商店中,仅将代码发布到多个前端/后端盒在技术上是分发(在法律看来)。
自由软件基金会怎么想并不重要,重要的是一旦某人/一家公司因为这样做而被起诉,一些法官的想法。
这只是GPL 的主要客户如今是希望阻止竞争对手分叉代码的公司的另一个原因。其他所有人都应该考虑少得多的许可,例如 MIT 或知识共享署名许可。
首先,我不是律师。在这里接受任何建议之前,先和一个人谈谈。
除此之外,如果您不分发您的网络应用程序,您可能不需要发布您的更改。如果您托管 Web 应用程序,您仍然可以让其他人使用您的 Web 应用程序。
如果您的发行版在同一个包中包含并安装 MySql,则需要商业许可证。
但是,如果您仅分发代码,仅使用“需要 MySql”通知和安装脚本(用于创建/填充表),AFAIK 应该没有问题。
当然,伊纳尔。