许可和版权

作者:Michael K. Johnson

在 Usenet 上,你多久会看到类似这样一句话:“免责声明:我不是律师,我没有资格提供法律建议?” 也许有一天侵权法改革会通过,非律师就不必为了避免被起诉而做出这样的免责声明。 在那之前,我需要做出同样的免责声明:我不是律师。 我甚至不在电视上扮演律师。 您在此处阅读的是我对这些许可的解释,虽然我已尽力避免出错,但人非圣贤孰能无过。 在根据我的解释赌上您的生命、财富或神圣的名誉之前,您应该亲自阅读这些许可,对它们形成自己的理解,如果您感到不放心,请咨询律师

许可与版权的区别

您需要理解的第一件事是版权和许可之间的区别。 版权保护知识产权的所有权。 如果您拥有某些知识产权的版权,您就对该财产拥有若干权利,并且可以将部分或全部这些权利转让(出售或赠与)给他人。 另一方面,许可是一份允许某人使用您的知识产权的文件。

例如,GNU 通用公共许可证 (GPL) 通常被错误地称为“版权”,但它实际上是一种许可。 将 GPL 应用于 拥有版权的代码,并不会将版权转让给自由软件基金会(FSF,GPL 的作者)。 您仍然拥有版权——将 GPL 应用于您的代码只是允许其他人根据 GPL 的条款修改和重新分发您的代码。 GPL 太长,无法包含在这篇文章中; 您可以使用 FTP 从规范站点 prep.ai.mit.edu 的 /pub/gnu 目录中检索副本。

GPL 是 Linux 世界中最流行的许可证之一; MIT X 和 BSD 许可证也很流行。 MIT 许可证非常宽松:它声明(像我所知的所有软件许可证一样)不提供任何保证,必须保留版权声明,并且未经书面许可,不得在广告或宣传中使用 MIT 的名称(或类似许可证中版权持有者的名称)。 相比之下,BSD 许可证要求所有广告材料都必须注明“加州大学伯克利分校及其贡献者”,同时禁止将任何一方的名称用作背书。 在其他方面,它与 MIT 许可证非常相似。 如果您想不出如何在不使用 MIT 和 BSD 名称的情况下致谢,请咨询律师。 MITBSD 许可证足够简短,可以在本文中转载——请参阅侧边栏。

假设您希望开发从根据这些协议之一许可的软件派生的自由软件。 您只需维护当前的版权,并为您添加的代码插入您的版权声明,从而根据与其余代码相同的许可证许可您的添加内容。

但是,如果您希望开发从自由软件派生的商业软件,则存在更棘手的问题。 MIT 和 BSD 许可证不要求您发布源代码。 您只需遵守许可证的条款,这些条款主要与维护版权声明和遵守有关广告和促销的限制有关。 但是,如果原始软件是在 GPL 下许可的,则您必须根据 GPL 发布您的源代码,以便您可以分发派生作品。

在 Linux 下开发时的许可

Linux 新手软件开发人员最关心的共同问题是,由于 Linux 受 GPL 约束,因此在 Linux 下编写或编译的任何软件也受 GPL 约束。 幸运的是,这种担忧是没有根据的。 许多商业软件都可以在 Linux 上使用,并且它们不会以任何方式违反 GPL。 在 Linux 系统上开发和编译您的软件不会导致您的软件派生自 GPL 许可的 Linux 源代码。

有些人认为,因为他们使用 #include 来包含系统头文件到他们的应用程序中,他们的应用程序突然被认为是“派生自”这些头文件。 事实并非如此; 头文件中的声明在法律上被认为是“公共接口”,不受版权保护。 这与任何其他开发平台相同:每个商业平台上的头文件都带有版权声明,声明对头文件的所有权,但这并不意味着您的应用程序是从这些头文件派生的。

有些人还认为,如果他们使用 GNU C 编译器 (gcc) 编译他们的程序,他们的程序必须根据 GPL 的条款获得许可。 这不是真的。 GPL 声明“仅当程序输出的内容构成基于该程序的作品(独立于是否通过运行该程序生成)时,该输出才受保护。” 许多商业软件供应商完全使用 GCC 编译他们的产品; 一些 Unix 系统在出厂时就将 GCC 作为标准系统编译器。 它们没有违反 GPL。

但是,当链接到根据稍微宽松的 GPL 版本(称为 GNU 库通用公共许可证或 LGPL)许可的库时,您需要小心。 Linux 的标准 C 库及其大多数其他库都根据这些条款获得许可,这些条款要求您(阅读许可证以了解更多详细信息)执行以下一项

  • 动态链接。

  • 提供可以链接到静态库的目标文件。

  • 提供源代码。

第二种选择不太容易实现,第三种选择虽然非常适合自由分发的软件,但对于更受限制的商业软件供应商来说不太理想。 对于所有人来说,无论软件是否免费,正确的答案都是动态链接。 这提供了几个优势

  • 您的程序运行时占用更少的系统内存。

  • 允许您的程序在库中发现错误时自动升级。

  • 创建更小的二进制文件。

由于动态链接是所有正常 Unix 平台上的默认设置,因此在 Linux 平台上使用它不太可能成为困难。

请注意,此限制仅适用于根据 LGPL 许可的库。 诸如 Motif 库之类的商业库不受此条件的限制,根据 BSD 或 MIT 条款许可的库也不受此条件的限制。 由于几乎没有理由进行静态链接,因此您几乎总是可以忽略此问题。 只有当您想要分发静态链接到 LGPL 许可库的程序并且您不希望分发源代码时,才需要担心它。

注意

您可以做一些与使用 GPL 不兼容的事情。 首先,您不能从同时根据 GPL 和 BSD 许可证许可的代码派生作品。 这是因为 GPL 禁止施加超出 GPL 施加的任何限制,而 BSD 许可证施加了额外的限制,即 UCB 及其贡献者必须在广告中得到承认。

此外,禁止您发布根据协议条款开发的源代码的保密协议 (NDA) 与使用 GPL 明显不兼容。 如果您签署了不允许您分发源代码的 NDA,然后在 NDA 条款下为 GPL 应用程序编写代码,您可以使用您修改后的 GPL 应用程序版本(请记住,GPL 不以任何方式限制使用),但您不能重新分发它。

同样,如果您的代码使用了软件专利,则该专利必须获得许可供所有人免费使用,否则您不能重新分发您修改后的应用程序版本。

许可和 Linux 内核

Linux 内核是在 GPL 下许可的。 这意味着,如果您编写链接到 Linux 内核中的代码,并且想要分发它,则该代码必须在 GPL 下许可。 例如,您不允许将新硬件设备的驱动程序作为需要在编译时链接到内核中的目标文件分发。 这样做会引发所有拥有 Linux 内核某些部分版权的人提起的诉讼。

但是,可以仅以二进制形式分发驱动程序,根据您希望的任何许可条款,作为内核可加载模块。 内核提供了一个公共接口,对象模块可以在运行时绑定到该接口。 这里的关键词是公共接口。 公共接口不受版权保护。 C 头文件中的声明和系统调用接口也是公共接口的示例,它们也不受版权保护。 您可以安全地将内核可加载模块接口视为“在内核空间中以内核权限运行的代码的系统调用”。

但是,通常不建议分发仅二进制内核可加载模块,原因有很多

  • 公共接口随时可能更改且经常更改。

  • 它违反了 GPL 的精神,GPL 通过剥夺用户支持自己的自由而使 Linux 获得成功,并且一些用户或潜在用户可能会公开表示失去这种自由。

  • Linux 开发人员不会通知您接口的更改; 您需要通过“加入每日内核俱乐部”(每次发布新的开发内核时都下载、编译和运行最新的内核)来主动发现更改,否则您将收到用户关于您的软件突然崩溃的投诉。

维护基于内核可加载模块的仅二进制产品绝对是可能的,但这样做确实需要额外的工作,如果您事先没有考虑到这项工作,那么当您需要花费时间时,您可能会感到不高兴。 换句话说:Linux 上的大多数商业软件开发引发的问题不比任何其他平台上引发的问题多,但仅二进制内核模块确实会引发您需要考虑的其他问题。

许可技巧

有时人们希望他们的代码根据与 GPL 和 BSD 许可证兼容的条款获得许可。 有三种方法可以做到这一点。

第一种方法涉及版权而不是许可证。 您可以将版权捐赠给公共领域,这会将知识产权所有权授予世界上的每个人,无论是个人还是集体。 任何人都可以对代码做任何事情,没有任何限制。 由于他们拥有代码,因此他们不需要许可证即可使用它。

第二种方法是编写一个非常宽松的许可证,允许任何人将代码用于几乎任何目的。 只要您不添加任何 GPL 中没有的限制,并且只要您不阻止其他人添加限制,受这种形式的许可保护的代码就可以用于使用 GPL 或 BSD 许可证的项目,而不会产生法律问题。 如果您选择编写自己的许可证,请务必获得法律帮助。 许多由外行人编写的许可证都是法律上的无稽之谈,如果您想有机会强制执行您的许可证,请获得法律意见。 此外,如果您确实希望其他人能够使用您的代码,也请获得法律意见,因为如果没有许可证,使用您不拥有的代码是违法的。 任何担心诉讼的人都将无法使用您的代码,如果该代码是在不可强制执行的条款下许可的,即使您个人已决定永远不会因使用该代码而起诉任何人。

然而,也许最好的选择是:作为版权所有者,您可以根据您喜欢的任何许可证将您的代码许可给您喜欢的任何人。 您不必仅提供一组许可条款。 您可以为用户提供选择,例如,GPL 许可条款和 BSD 许可条款。 例如,正在开发一组名为 PAM 的库,这些库需要与 GPL 应用程序和 BSD 应用程序链接。 它的许可证首先给出了 BSD 许可证条款(修改后未提及 UCB,因为 UCB 未参与其开发),然后说,“或者,本产品可以根据 GNU 通用公共许可证的条款分发,在这种情况下,GPL 的规定是必需的,而不是上述限制。” Linux 内核中的一些代码已通过这种方式获得许可。

共享软件许可

共享软件在 Linux 世界中并没有真正流行起来。 也许是因为有太多高质量的软件无需任何形式的付费即可获得,也许是因为 Linux 源于为 Unix 编写自由软件的运动,并且早于共享软件运动,因此 Linux 世界中只有少数流行的共享软件软件包。 这些软件包中的大多数都规定个人使用可选付款,并且仅对商业或商业用途要求付款。 没有法律限制阻止您为 Linux 发布共享软件,但请注意,如果您选择将 Linux 应用程序许可为共享软件,您将进入相对未知的领域。

并没有那么难

最重要的事情是要记住,在大多数情况下,许可并不是一个特别复杂的问题。 整篇文章主要关注的是特殊情况。 大多数正常的应用程序供应商和大多数自由软件作者都不会有许可问题需要解决。 只要了解许可技术之间的差异,您就会意识到所涉及的问题。 如果您确实有任何问题需要解决。

Michael K. Johnson (johnsonm@redhat.com) 是 Linux Journal 的即将离任的编辑,作为一名程序员,他曾在 Linux 的自由软件和商业软件方面工作过。 他现在是 Red Hat Software 的程序员,Red Hat Software 是 Red Hat Linux 发行版的创建者和维护者。

加载 Disqus 评论