跳转到主要内容

应用、libcurl 与第三方库的许可证混合

libcurl 可以生成为使用相当多的各种第三方库,这些库由其他方编写和提供,并使用其各自的许可证进行分发。 甚至 libcurl 本身也包含可能给某些人带来问题的代码。本文档尝试描述 libcurl 和 其他库使用的许可证,以及将它们全部链接和混合可能给最终用户带来的困境。 我不是律师,本文不构成法律建议! 一个常见的困境是,GPL[1] 许可的代码不允许与根据原始 BSD 许可证(带有公告条款)许可的代码链接。你仍然可以生成使用所有这些代码的自有副本,但将它们作为二进制文件分发则会违反 GPL 许可证,除非你在许可证中附带例外条款[2]。此特定问题 在创建修改版 BSD 许可证时得到了解决,该许可证没有与 GPL 冲突的公告条款。 libcurl 使用尽可能宽松的 MIT(或修改版 BSD)风格许可证。 OpenSSL (可用于 SSL/TLS 支持)使用带有公告条款的原始 BSD 风格许可证,这使其与 GPL “不兼容”。不允许发布与 OpenSSL 链接且包含 GPL 代码的二进制文件(除非该特定 GPL 代码包含针对 OpenSSL 的例外条款,这种做法正变得越来越普遍)。如果 OpenSSL 的许可对你来说是个问题,请考虑使用其他 TLS 库。 GnuTLS (可用于 SSL/TLS 支持)使用 LGPL[3] 许可证。如果这对你来说是个问题,请考虑使用其他 TLS 库。另请注意,GnuTLS 本身依赖并使用其他库(libgcrypt 和 libgpg-error),它们也采用 LGPL 或 GPL 许可。 WolfSSL (可用于 SSL/TLS 支持)使用 GPL[1] 许可证或专有许可证。如果这对你来说是个问题,请考虑使用其他 TLS 库。 NSS (可用于 SSL/TLS 支持)受 MPL[4] 许可证、GPL[1] 许可证和 LGPL[3] 许可证约束。你可以选择按照 MPL 条款、GPL 条款或 LGPL 条款许可代码。这些许可证授予你不同的权限并施加不同的义务。你应选择最符合你需求的许可证。 axTLS (可用于 SSL/TLS 支持)使用修改版 BSD 风格许可证。 mbedTLS (可用于 SSL/TLS 支持)使用 GPL[1] 许可证或专有许可证。如果这对你来说是个问题,请考虑使用其他 TLS 库。 BoringSSL (可用于 SSL/TLS 支持)作为 OpenSSL 的分支,它与 OpenSSL 具有相同的许可证。 libressl (可用于 SSL/TLS 支持)作为 OpenSSL 的分支,它与 OpenSSL 具有相同的许可证。 <!—c-ares (用于异步名称解析)使用非常宽松的 MIT 许可证,不会对你可能链接的任何其他库或部分施加任何限制。—> zlib (用于压缩的 Transfer-Encoding 支持)使用 MIT 风格许可证,不应与任何其他库冲突。 MIT Kerberos (可用于 GSS 支持)采用 MIT 许可,不应与任何其他部分冲突。 Heimdal (可用于 GSS 支持)Heimdal 采用带有公告条款的原始 BSD 许可。 GNU GSS (可用于 GSS 支持)GNU GSS 采用 GPL 许可。请注意,如果你将 curl 生成为同时链接和使用任何原始 BSD 许可的库,则不得分发使用此库的二进制 curl 包! libidn (用于 IDNA 支持)使用 GNU 宽通用公共许可证 [3]。LGPL 是 GPL 的一种变体,其”著佐权”(copyleft)稍弱。此许可证要求在分发二进制文件时满足更多要求,有关详细信息,请参阅许可证。另请注意,如果分发包含此库的二进制文件,则还必须包含完整的 LGPL 许可证文本。请正确指出许可证所涉及的分发包的部分。 OpenLDAP (用于 LDAP 支持)使用修改版 BSD 风格许可证。由于 libcurl 仅将 OpenLDAP 用作共享库,我还没听说有人在应用中发布与 libcurl 链接的 OpenLDAP。 libssh2 (用于 scp 和 sftp 支持)libssh2 使用修改版 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/
最后修改于 2026年10月20日