在我工作的公司中,如果开发团队的成员提出使用开源库来解决问题,项目生产者总是会询问该库附带什么软件许可证。
我们不是律师,但我知道并非所有不同的许可证都可以组合,因为每个许可证都有某些要求。
也就是说,我想知道,在我自己创建的软件中包含开源库之前需要考虑哪些因素?
在我工作的公司中,如果开发团队的成员提出使用开源库来解决问题,项目生产者总是会询问该库附带什么软件许可证。
我们不是律师,但我知道并非所有不同的许可证都可以组合,因为每个许可证都有某些要求。
也就是说,我想知道,在我自己创建的软件中包含开源库之前需要考虑哪些因素?
一般来说,您应该考虑的最重要的考虑因素是应用程序的分发形式,即用户将如何使用它。根据分发方式,许可证可能会给您带来一些障碍。
如果您的应用程序是服务 (SaaS)
在这种情况下,我所知道的唯一可以限制您的许可证是AGPL许可证,因为它迫使您制作整个AGPL应用程序并在某处发布源代码。其余的许可证可以不受限制地使用(除了作为感谢的形式链接它们会很好)。唯一的例外是JavaScript代码,它被发送到客户端并在他们的计算机上执行,应该在下一节中处理。
如果您的应用是可安装的
在这种情况下,我们必须区分两种不同类型的依赖项,一种是可以单独安装的,另一种是在您的应用程序中编译的。
对于单独安装的依赖项,大多数许可证不会影响您,因为它不会与您的应用程序混合,所做的就是将安装程序分开(这就是GitHub for Windows的工作方式,例如,安装后
git
使用GPL 许可证安装)。在最后一种情况下,您的应用程序在内部使用库,许可证可能会变得复杂,在这种情况下,“开放(BSD,MIT等)”许可证不是问题,除非有义务留下提及其使用和许可证(示例)。
最后,“免费”(或copyleft)许可证强制您授予用户访问其源代码的权限。在LGPL许可证的情况下,只需要授予对同一库的代码的访问权限(以及您对其所做的修改),而不是您的所有代码。GPL的情况更为极端,因为它要求您在该许可证下分发整个应用程序(在某些情况下这是不可能的问题,因为有些不兼容)。
澄清
通常,许可证会强制您将源代码分发给您将应用程序提供给的人,而不是公开。因此,如果将应用程序出售给特定公司供其内部使用,则许可证要求您向公司提供来源,而不是在网上发布整个内容。
最重要的区别是许可证是Copyleft(GPL 系列)还是许可(MIT、BSD、Apache 等)。前者要求在某些情况下重新许可使用与他们一起获得许可的软件的产品的代码,以始终保持用户的自由。许可许可证更加宽松,允许在某些条件下包含在封闭产品中,并且通常更简单。克里斯托弗传递的链接包含很多关于它的信息。
一个非常有趣的网站是 TLDRLegal
https://tldrlegal.com/
他们在其中解释了许多免费或开放的软件许可证,以便他们易于理解,并且将来可以对它们进行比较。
需要注意的是,没有许可证不是自由软件。没有许可意味着没有权利被授予,因为根据国际条约(伯尔尼公约),“版权”是不可剥夺的。这就是为什么会有软件许可证,它以与不同国家/地区的法律兼容的适当语言开发作者身份、归属和许可的概念。GitHub 创建了一个网站,旨在帮助开发人员为其项目选择许可证,其中包含有关该主题的有趣信息。
这个主题很广泛(参见https://es.wikipedia.org/wiki/Licencia_de_software和https://es.wikipedia.org/wiki/Anexo:Comparaci%C3%B3n_de_licencias_de_software_libre)。
您必须研究许可证(或请您公司的律师这样做)。这是无法避免的。
在这里,我们比较了“Lesser GPL”许可证和普通 GPL 许可证(两种常见的免费许可证)在库方面的使用:
(另请参阅astrojuanlu和yms的精彩回答)。
我不是律师,因此使用以下信息需要您自担风险:
开源项目有各种许可证,允许将二进制文件重新分发到闭源商业应用程序中。请注意,问题的关键是“重新分发”,如果您在公司内部使用开源项目,而不重新分发它,(通常)没有什么可担心的。
因此,最著名的许可许可证是:
注 1:LGPL 区分直接使用源、静态链接和动态链接。如果您在静态链接或源代码中使用 LGPL 库,您的代码会受到 LGPL 许可证的影响(您必须分发源代码)。我知道接口文件有例外,例如 C 和 C++ 中的 .h
注意 2:这些许可证中的每一个都可能会或可能不会对对代码的修改施加限制,这里我假设它们将在不修改的情况下使用。
最著名的非许可许可证是:
GNU GPL
GNU AGPL这是我所知道的最严格的,它包含一个条款,即使在网站或 Web 服务上使用开源项目的情况下,它也包含强制发布源代码的条款,即使二进制文件的“重新分发”不发生。
有时,GPL 和 AGPL 许可证与用于闭源商业项目的替代商业许可证相结合。
使用这种 AGPL-Commercial 双重许可策略的项目示例有 Ghostscript、iText、QT 和 MongoDB(我想知道命名这个项目的人是否会说西班牙语)。
一个重要的细节是,在许可许可下发布的开源项目可能具有在非许可许可下发布的依赖项,用作外部库。在这种情况下,以非许可许可证为准。
另一个有趣的点是字体“分布”的定义。例如,GPL 并没有说您必须将您的源代码放在任何人都可以访问的 Internet 上,其想法是每个收到您的应用程序或系统二进制文件的人都应该能够收到源代码,如果他们愿意的话,它甚至可以在 DVD 上通过邮寄方式发送,包括为刻录光盘和发送光盘付出的“合理”费用。