伊纳尔。需要记住的一件事:几个项目明确地围绕“衍生工作”概念划定界限,以限制它可能包含的内容。
例如,由于程序在操作系统上运行的方式,在 Linux 内核上运行的每个程序最终都会将内核代码包含到操作程序中。为了便于编写程序,通常在编译程序时使用头文件,以便它知道如何合并内核位。Linus Torvalds 表示,这种使用不会使程序成为内核的衍生作品。
在其他情况下,例如 PHP(和 C,在较小程度上),不能声称该语言是其库的衍生作品。当然,您可以调用strlen()
,并且在链接时或运行时,您的程序链接到您未编写的库。但程序本身并不是语言或运行时的衍生作品。在许多情况下,所使用的库仅公开标准的实现,因此该程序不是该库的具体派生。因此,您调用的 C 程序strlen()
可以链接到其中包含的任何 C 库strlen()
。您的程序不会自动成为 Glibc 的衍生作品。甚至 PHP 也有多种实现(Resin 网络服务器附带了 Java 中的 PHP 实现)。因此,即使 PHP 是 GPL,您的程序也可能不需要。
框架实际上是一组扩展的库,并且适用于库的正常规则。例如,如果框架是标准的一种实现,那么将它与您的应用程序一起分发可能违反了 GPL,但仅仅使用它就不会,因为您的应用程序是标准的衍生品,而不是框架的这个特定实例. 例如,使用 EJB 的应用程序可以在 IBM WebSphere、RedHat 的 JBoss、Bea 的 Weblogic 等上运行,而不必遵守 JBoss 的许可。也许将 JBoss 和您的应用程序放在同一张 CD 上会违反 JBoss 的许可,但您的应用程序在其他方面不受限制(除非其中包含 JBoss 的部分内容)。
如果所讨论的框架不是标准并且没有其他人实现它,和/或您必须在自己的代码中包含框架的一部分,那么您的应用程序可能是衍生作品。考虑一个 linux 内核模块:创建一个不违反 GPL 的模块是很困难的,因为大多数模块必须包含内核代码才能完成它们的工作。nVidia 通过创建一个没有内核代码但不是功能齐全的模块的专有 blob 来回避这一点,并添加了一些 GPL 胶水代码,使其成为一个模块。大多数内核开发人员认为将内核和驱动程序一起分发是违反 GPL 的(因为您通过添加一个模块来创建内核的派生作品,但该模块不是 GPL)但单独分发模块并不会创建派生工作直到最终用户将其合并,
请记住:并非所有项目对其使用的许可证都有相同的解释。根据规定的许可,您可能在您的合法权利范围内以某种方式使用代码,但您可能不想被起诉,因此如有疑问,请咨询原始版权所有者的律师。