本文由高级咨询师薛亮据自由软件基金会(FSF)的英文原文翻译而成,这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题,对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。
5 在编写其他程序时采用依据 GNU 许可证发布的程序
5.1 我可以在同一台电脑上安装一个遵循 GPL 许可证的程序和一个不相关的非自由程序吗?(同 2.3)
可以。
5.2 我可以使用遵循 GPL 许可证的编辑器(例如 GNU Emacs)来开发非自由程序吗?我可以使用遵循 GPL 许可证的工具(例如 GCC)来编译它们吗?
可以,因为编辑器和工具的版权并不覆盖您所编写的代码。从法律上来说,使用它们不会对适用于您代码的许可证施加任何限制。
有些程序出于技术原因将其自身某些部分复制到输出文件中,例如,Bison 将标准解析器程序复制到其输出文件中。在这种情况下,输出文件中复制的文本遵循其在源代码中所遵循的相同许可证。同时,源自程序输入部分的输出部分继承输入部分的版权状态。
正因为如此,Bison 也可以用来开发非自由程序。这是因为我们决定明确允许在 Bison 输出文件中不受限制地使用 Bison 标准解析器程序。我们之所以做出这个决定,是因为还有其他与 Bison 相媲美的工具已被许可用于非自由程序。
5.3 有没有一些方法可以让使用我的程序的人们得到的输出物遵循 GPL?例如,如果我的程序用于开发硬件设计,我可以要求这些设计必须是自由的吗?(同 3.17)
一般来说,这在法律上是不可能的;针对人们通过使用您的程序获取数据形成的输出物如何使用,版权法并没有赋予您任何发言权。如果用户使用您的程序输入或转换自己的数据,输出物的版权属于他,而不是您。更一般来说,当程序将其输入物转换成其他形式时,输出物的版权状态将继承其得以生成的输入物的版权状态。
所以您对输出物的使用拥有发言权的唯一方式是输出物的实质部分(或多或少)是从您程序的文本中复制出来。例如,如果我们在这种具体情况下没有例外,那么Bison的一部分输出物(参见问题 5.2)将被 GNU GPL 所涵盖。
所以,即使没有技术原因,您也可以人为制作一个程序,将某些文本复制到其输出物中。但是,如果复制的文本没有实际用途,用户可以简单地从输出物中删除该文本,并且仅使用其余的内容。那么他就不必满足重新分发所复制文本的条件。
5.4 在什么情况下,遵循 GPL 的程序其输出文件也必须遵循 GPL 呢?
程序的输出文件通常不受程序代码的版权保护。因此,程序代码的许可证不适用于输出文件,无论是将其导入文件,还是制作屏幕截图、屏幕录像或视频。
例外情况是,程序全屏显示来源于程序的文本和/或艺术品。该文本和/或艺术品的版权则会覆盖其输出文件。输出音频的程序(例如视频游戏)也将适用于此例外。
如果艺术品/音乐遵循 GPL,则无论您如何进行复制,GPL 都适用。不过, 合理使用 ( fair use ) 可能仍然适用。
请记住,一些程序,特别是视频游戏,可以具有与底层遵循 GPL 的游戏分开许可的艺术品/音频。在这种情况下,艺术品/音频的许可证将规定视频/流媒体可以依之产生的条款。另请参阅:1.6 我可以将GPL应用于软件以外的其他作品吗?
5.5 如果我将我的程序移植到 GNU/Linux,这是否意味着我必须将其作为遵循 GPL 或其他自由软件许可证的自由软件进行发布?
一般来说,答案是否定的——这不是法律规定。具体来说,答案取决于您要使用哪些库以及许可证。大多数系统库都使用 GNU LGPL 许可证,或者使用 GNU GPL 加上允许将库与任何东西链接的例外声明。这些库可以在非自由程序中使用;但是在 LGPL 的情况下,它确实有一些必须遵循的要求。
一些库依据 GNU GPL 单独发布;您必须使用与 GPL 兼容的许可证才能使用这些库。但是这些通常是更特定的库,而在另一个平台不会有任何类似它们的库,所以您可能不会想要简单地移植使用这些库。
当然,如果您的软件不是自由软件,它不会对我们的社区做出贡献,而重视软件自由的人也会拒绝使用它。只有愿意放弃软件自由的人才会使用您的软件,这意味着它将有效地成为人们失去软件自由的诱因。
如果您希望有一天回头看您的职业生涯,觉得它有助于发展一个善良和自由的社会,您需要使您的软件成为自由软件。
5.6 我想将遵循 GPL 的软件纳入我的专有系统。我只依据 GPL 给予我的权限来使用该软件。我可以这样做吗?
您不能将遵循 GPL 的软件纳入专有系统。GPL 的目标是授予每个人复制、再分发、理解和修改程序的自由。如果您可以将遵循 GPL 的软件整合到非自由系统中,则可能会使遵循 GPL 的软件不再是自由软件。
包含遵循 GPL 程序的系统是该 GPL 程序的扩展版本。GPL 规定,如果它最终发布的话,任何扩展版本的程序必须依据 GPL 发布。这有两个原因:确保获得软件的用户获得自己应该拥有的自由,并鼓励人们回馈他们所做的改进。
但是,在许多情况下,您可以将遵循 GPL 的软件与专有系统一起分发。要有效地做到这一点,您必须确保自由和非自由程序之间的通信保持 一定距离 ( arms length ) ,而不是将它们有效地结合成一个程序。
这种情况与“纳入”遵循 GPL 的软件之间的区别,部分是实质问题,部分是形式问题。实质上是这样的:如果两个程序结合起来,使它们成为一个程序的两个部分,那么您不能将它们视为两个单独的程序。所以整个作品必须遵循 GPL。
如果这两个程序保持良好的分离,就像编译器和内核,或者像编辑器和 shell 一样,那么您可以将它们视为两个单独的程序,但是您必须恰当执行。这个问题只是一个形式问题:您如何描述您在做什么。为什么我们关心这个?因为我们想确保用户清楚地了解软件集合中遵循 GPL 的软件的自由状态。
如果人们分发遵循 GPL 的软件,将其称为系统(用户已经知晓其中一部分为专有软件)的“一部分”,用户可能不确定其对遵循 GPL 的软件所拥有的权利。但是如果他们知道他们收到的是一个自由程序加上另外一个程序,那么他们的权利就会很清楚。
5.7 如果我分发了一个与我修改后的遵循 LGPL v3 的库相链接的专有程序,那么为了确定我正在做出的明确的专利许可授权的范围, “贡献者版本” ( contributor version ) 是什么?它仅是库,还是整个组合?
“贡献者版本”仅是您的库版本。
5.8 依据 AGPL v3,当我根据第 13 节修改程序时,必须提供什么样的 相应源代码 ( Corresponding Source ) ?
“相应源代码”在许可证的第 1 节中定义,您应该提供其列出的内容。因此,如果您的修改版本取决于遵循其他许可证的库,例如 Expat 许可证或 GPL v3,则相应源代码应包括这些库(除非是系统库)。如果您修改了这些库,则必须提供您修改后的源代码。
第 13 节第一段的最后一句只是为了强化大多数人所自然地认为的那样:尽管在第 13 节中通过特殊例外来处理与遵循 GPL v3 的代码相结合的情况,相应源代码仍然应该包括以这种方式与程序相结合的代码。这句话并不意味着您只需提供 GPL v3 所涵盖的源代码;而是意味着这样的代码不会从相应源代码的定义中排除。
5.9 在哪里可以了解更多有关 GCC 运行时库例外的信息?
GCC 运行时库例外包含 libgcc、libstdc ++、libfortran、libgomp、libdecnumber 以及与 GCC 一起分发的其他库。这个例外是为了让人们根据自己选择的条件分发用 GCC 编译的程序,即使这些库的一部分作为编译过程的一部分被包含在可执行文件中。要了解更多信息,请阅读有关 GCC 运行时库例外的常见问题。
译者介绍:薛亮,集慧智佳知识产权咨询公司高级咨询师,擅长专利检索、专利分析、竞争对手跟踪、FTO 分析、开源软件知识产权风险分析,致力于为互联网企业、高科技公司提供知识产权咨询服务。