12

我目前正在攻读研究生,重点是研究背景下的数据分析/信息学,并为全球研究社区开发实用工具,我的绝大多数目标用户都是计算机新手。换句话说,我的大多数用户不会费心(或无法)收集必要的依赖项并将它们放在他们的类路径中。为了避免人们忽略我的软件,我一直将它作为“fat-jar”分发,所有依赖项都包含在一个可执行文件中。

我一直在阅读一些关于软件许可的内容,并意识到如果不关注库的单个许可,这样做在法律上可能会很棘手。我在 StackOverflow(下面是一个完整的集合)上解决了许多问题,但最终变得越来越困惑。请注意,我完全意识到还有许多其他关于软件许可的问题,但不是在自包含软件包的背景下,我在下面列出了许多很好的问题,这些问题提供了一些难题,但在我的设想。

如果对此事有更多经验/了解的开发人员可以通过确认或否认以下陈述来阐明此事,我将不胜感激。我认为这对于那些不是程序员而是专业但越来越多地进入编程的人来说可能很有用。我的理解是:

  • 只要您不重新分发依赖项,与您为自己的项目选择的许可证相比,它们拥有什么许可证并不重要。[不幸的是,这样做也意味着我会疏远/恐吓我的大部分用户群]

  • 如果您要重新分发所有依赖项,那么您的项目许可证应该与您的依赖项兼容。[因此,作为开发人员,我必须了解每个依赖项的许可证详细信息??]

  • GPL 是目前最严格的开源许可证(来自普通许可证),因此如果我使用 GPL 许可证下的库,我自己的项目也必须遵循 GPL,这在理论上可能与其他一些许可证相矛盾依赖。

  • 假设我的项目在 GPL 下,该项目是非商业的这一事实并不重要,它也必须是开源的。[这在我的情况下相当棘手,因为算法和计算方法需要“新颖”才能发表]

我是否误解了或只是错过了一些重要的事情,或者这是对情况的一个很好的总结?鉴于我的情况,我是否还有其他可能没有在这里提到/想到的选项,例如是否可以避免与我的依赖项的许可证有关的问题?


参考:

我应该关心大量依赖项吗?

哪些许可证相互兼容?

我在哪里可以找到开源许可证的权威概述?

如何选择开源许可证?

搜索源代码的非商业许可

通过插件在闭源应用程序中使用 GPL 代码是否合法?

如何判断我是否可以在商业应用程序中重复使用“免费”软件库?[关闭]

正确应用开源许可证(特别是 @Michael Aaron Safyan 的这个答案)

如何找到适合我的项目的开源许可证?

如何使用开源许可证

如何选择开源许可证?

4

5 回答 5

5

只要您不重新分发依赖项,与您为自己的项目选择的许可证相比,它们拥有什么许可证并不重要。

是的,这是真的……对于具有主流许可证的开源依赖项。但:

  • 它迫使您的用户下载所有依赖项,这是一个坏主意。
  • 对于专有依赖项(以及具有“疯狂”许可证的开源依赖项),许可证可能会禁止这样做,或者通过禁止用户做事来使用户变得困难(-er

如果您要重新分发所有依赖项,那么您的项目许可证应该与您的依赖项兼容。

是的。但这通常并不难。有一些地方可以找出哪些许可证与其他许可证兼容;例如 FSF 的 GPL 页面。

[因此,作为开发人员,我必须了解每个依赖项的许可证详细信息??]

是的。但是您可以通过仅使用具有安全许可证的依赖项来简化此操作。(而且大多数开源许可证都是。)

GPL 是最严格的开源许可证(从常见的许可证中),因此如果我使用 GPL 许可证下的库,我自己的项目也必须在 GPL 下......

是的。但是,请注意 GPL 和 LGPL 之间存在很大差异。LGPL 没有这个限制。

...从理论上讲,这可能与其他依赖项的许可相矛盾。

理论上是的。实际上,GPL 允许使用具有大多数其他开源许可证的库。唯一的问题是其他库的许可证是否需要 GPL 禁止的东西;即喜欢对下游用户、打包者等设置额外条件。

假设我的项目在 GPL 下,该项目是非商业的这一事实并不重要,它也必须是开源的。

那是对的。

[这在我的情况下相当棘手,因为算法和计算方法需要“新颖”才能发表]

我认为您正在从根本不应该成为问题的事情中提出一个大问题:

  • 如果您担心其他人在您发布之前窃取您的想法,请推迟发布您的代码,直到您发布。这是普通常识......而不是许可问题。

  • 如果算法和方法包含在您以前分发的软件中,我认为编辑/审稿人不会拒绝您的作品发表。就出版媒体而言,您的出版物必须是新颖的......

...是否可以避免与我的依赖项的许可证有关的问题?

  • 您可以从头开始编写所有自己的代码,或者聘请其他人为您编写代码。(不现实)

  • 您可以为所有依赖项使用商业软件,并为重新分发的权利付费。

  • 您可以联系依赖项的版权所有者,并协商替代许可协议。(假设他们是可以联系的,并且愿意谈判。)

但是你不能忽视这个问题。

最重要的是,当您使用开源依赖项构建代码时,您将免费获得一些东西,但交换条件是您必须遵守规则作为回报。如果您不喜欢这些规则,请找到不涉及开源的其他方式。

于 2012-10-01T15:49:56.663 回答
1

最大的问题是,如果您正在处理不使用任何常见开源许可证的软件。简而言之,如果这些许可证禁止重新分发他们的软件,那几乎可以停止争论。

您可以以这样一种方式打包您的软件,如果用户自己获得了适当的许可证,那么您可以让用户轻松地将他们的许可库合并到您的系统中(通过适当地更新您的类路径,也许将文件复制到一个已知的地方等)。结合良好的文档或自动化脚本,这可以减少使用这些库安装软件的用户负担。

如果你只使用开源许可软件,事情就简单多了。

正如您所说,GPL 是最严格的,但大多数 OSS 许可证都与 GPLv3 兼容。阿帕奇、BSD、麻省理工学院、MPL、X11/麻省理工学院。

而且,是的,您确实需要了解所有许可证,尤其是 GPL。如果可行并且您可以避免 GPL,那么所有这些问题都几乎消失了。如前所述,LGPL 远没有 GPL 严格,许多确实走这条路的库因此选择了 LGPL,但也有一些使用纯 GPL。

美好的是,如今的 OSS 社区已经相当成熟,即使在许可方面仍然有点分散,但仍然可以互操作。大多数人甚至不问这些问题并继续他们快乐的方式,但仍然设法避免麻烦。

但是,归结为三个概念:

  • 如果您使用的是专有库,则您的选择在分发方面非常有限。

  • 如果您使用的是 GPL 库,那么您的软件也应该 GPL。

  • 如果以上都不是,根本不用担心。

于 2012-10-02T03:55:28.297 回答
1

许可重要,但如果你制作的开源、非商业软件不与商业软件直接竞争,那么有人会抱怨你可能滥用其中一个库许可证的风险非常接近于零(这样的投诉不会在法庭上走得太远,尽管您的里程可能会因您的“原籍国”而异)。

所以,不要太担心,坚持游戏精神:

  • 如果您使用商业图书馆,请获得许可证(其中很多实际上都有免费的可再分发许可证用于开源项目)

  • 如果您使用 GPL 库,请将您的项目设为 GPL(这就是您正在做的事情)

于 2012-10-02T05:43:02.437 回答
0

抱歉,如果您使用专有库,这没有解决方案。

如果您使用免费的专有库,则“除非您与作者达成协议”,否则您不能以任何方式将其包含在您的软件中,客户端必须从作者的网页或存储库下载它们,否则您将重新分发库和招致侵犯版权。

类似的案例还有几个,最近Java的Oracle in Linux。.


GPL 问题:

您的算法的一个可能的解决方案可能是将它放在一个没有任何依赖关系的单独库中并将其添加到您的主要“GPL”项目中,这是大多数公司用来做的事情。

于 2012-10-01T14:40:47.830 回答
0

我认为你的四点是正确的。

即使您的项目使用在重新分发方面相互矛盾的依赖项,也可能发生的一件事是您不分发程序,而是将其(或使用相关依赖项的部分)作为您自己托管的(Web-)服务提供服务器。然后你可以使用几乎所有你想要的依赖,甚至不需要开源任何东西。但请注意,某些许可证(主要是商业许可证)可能会限制服务器的使用。

于 2012-06-14T13:32:22.493 回答