混合应用、libcurl 和第三方库的许可证
libcurl 可构建来使用相当数量的不同第三方库,这些库由其他方编写和提供,使用各自的许可证分发。 甚至 libcurl 本身就包含可能导致某些问题的代码。 本文档尝试描述 libcurl 和其他库使用的许可证,以及将它们全部链接和混合可能对最终用户造成的困境。
我不是律师,这也不是法律建议!
一个常见的困境是不允许将 GPL[1] 许可的代码与在原始 BSD 许可证(带有公告条款)下许可的代码进行链接。 您仍可同时使用它们构建自己的副本,但将它们作为二进制文件分发将违反 GPL 许可证 - 除非您的许可证符合除外条件[2]。 Modified BSD 许可证的出现解决了这个特定问题,这种许可证没有与 GPL 冲突的公告条款。
使用尽可能宽松的 MIT(即 Modified BSD)式许可证。
(可用于实现 SSL/TLS 支持)使用其公告条款与 GPL“不兼容”的 Original BSD 式许可证。 您不得发布与包含 GPL 代码的 OpenSSL 链接的二进制文件(除非该特定 GPL 代码包含 OpenSSL 的除外条件 - 这种习惯越来越常见)。 如果 OpenSSL 的许可对您而言是一个问题,请考虑使用其他 TLS 库。
(可用于实现 SSL/TLS 支持)使用 LGPL[3] 许可。 如果这对您而言是一个问题,请考虑使用其他 TLS 库。 此外请注意,GnuTLS 本身依赖并使用其他库(libgcrypt 和 libgpg-error),它们也获得了 LGPL 或 GPL 许可。
(可用于实现 SSL/TLS 支持)使用 GPL[1] 许可证或者专有许可证。 如果这对您而言是一个问题,请考虑使用其他 TLS 库。
(可用于实现 SSL/TLS 支持)在 MPL[4] 许可证、GPL[1] 许可证和 LGPL[3] 许可证范围内。 您可以选择根据 MPL 条款、GPL 条款或 LGPL 条款许可代码。 这些许可证授予您不同的权限,并且赋予不同的义务。 请选择最符合自己需求的许可证。
(可用于实现 SSL/TLS 支持)使用 Modified BSD 式许可证。
(可用于实现 SSL/TLS 支持)使用 GPL[1] 许可证或者专有许可证。 如果这对您而言是一个问题,请考虑使用其他 TLS 库。
(可用于实现 SSL/TLS 支持)作为 OpenSSL 分支,它采用与之相同的许可证。
(可用于实现 SSL/TLS 支持)作为 OpenSSL 分支,它采用与之相同的许可证。
(用于实现压缩传输编码支持)使用不与其他任何库冲突的 MIT 式许可证。
(可用于实现 GSS 支持)MIT 许可,不会与其他任何部分冲突。
(可用于实现 GSS 支持)Heimdal 通过带公告条款的 Original BSD 许可。
(可用于实现 GSS/GNU 支持)GNU GSS 获得了 GPL 许可。 注意,如果构建的 curl 使用此库,但还链接和使用任何 Original BSD 许可的库,则不得分发其二进制 curl 程序包!
(用于实现 IDNA 支持)使用 GNU 宽通用公共许可证 [3]。 LGPL 是 GPL 的变体,具有稍弱积极性的“著佐权”。 该许可证要求在分发二进制文件时符合更多要求,请参阅该许可证了解详细信息。 另请注意,如果分发的二进制文件包含此库,则还必须包含完整的 LGPL 许可证文本。 请正确指出该许可证涉及被分发程序包的哪些部分。
(用于实现 LDAP 支持)使用 Modified BSD 式许可证。 由于 libcurl 仅将 OpenLDAP 作为共享库,我还没听说任何人发布了在应用中与 libcurl 链接的 OpenLDAP。
(用于实现 scp 和 sftp 支持)libssh2 使用 Modified BSD 式许可证。
[1] = GPL - GNU 通用公共许可证:https://www.gnu.org/licenses/gpl.html
[2] =https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs 有关编写 GPL 除外条件的详细信息。
[3] = LGPL - GNU 宽通用公共许可证:https://www.gnu.org/licenses/lgpl.html
[4] = MPL-Mozilla 公共许可证:https://www.mozilla.org/MPL/