这是针对英文原版页面的中文翻译。

如何在你的软件中使用 GNU 许可证

本文简介如何让你的程序使用 GNU 通用公共许可证GNU 宽通用公共许可证或者 GNU Affero 通用公共许可证。对 GNU 自由文档许可证,请参看我们的 独立页面

更多信息,请参看我们的 许可证常见问题解答

如果你考虑使用 GNU 宽通用公共许可证,请先阅读 “为什么你的下一个库不应该使用 LGPL”。该文章解释了为什么使用普通的 GPL 更好,以及我们会如何决定。

以下总结了在选择按照我们的许可证发布程序时,你需要做的事项:

  • 从你的雇主或学校获取一份版权免除声明。
  • 为每个文件提供适当的版权声明。确保 用户可用的许可证版本被清晰地标识出来
  • 添加一个带有 GNU GPL 或 GNU AGPL 副本的 COPYING 文件。
  • 如果使用了 GNU LGPL,那么再添加一个带有 GNU LGPL 副本的 COPYING.LESSER 文件。
  • 每个文件都要有许可证声明。
  • (可选项)程序开始时显示一个声明。
  • (如果使用 AGPL)让程序带有提供源代码的选项。

这意味着每个程序都要添加两个单元:版权声明(比如 “Copyright 1999 Terry Jones”)和拷贝授权声明,说明本程序按照 GNU 通用公共许可证(或 LGPL、Affero GPL)的条款发布。

如果你是个人,并且你有雇主或你在校学习,请你的雇主或学校就你的程序签署一份版权免除声明是明知之举,这样他们以后就不能再对此主张版权而彻底剥夺你发布程序的权利。这个真的和 GNU GPL 无关——无论你的程序使用何种自由软件许可证,你都要考虑这个版权免除声明。

以下是一个版权免除声明的式样;你只需适当修改名字、题目和程序说明就好了:

Yoyodyne 公司,现在声明放弃所有与由 James Hacker 编写的程序 “Woodpecker”(该程序分解树形结构)有关的版权利益。

Moe Ghoul 签署 1989 年 4 月 1 日
Moe Ghoul,副总裁

如果你是大学生,我们建议你 在编写程序的早期 就要求版权免除声明以减少阻力。如果你不是研究助理或助教,那么有可能学校对你的工作并不能主张版权,不过最好还是咨询一下律师来确认此事。

如果你受雇,最好 在商讨雇佣合约时,就讨论发布自由软件的许可。

版权声明应该包含你完成许可证的年份(如果你是 1998 年准备好许可证的,但是在 1999 年才使用,那么请使用 1998 年)。你还应该提供每个发布版本的年份;比如,如果在你 1998 年发布了一些版本,在 1999 年也发布了一些版本,那么你应该写上 “Copyright 1998, 1999 Terry Jones”。如果代码包含多个人的贡献,那么请写上所有人的名字。

如果在连续多年都有软件发布,那么你可以使用一个年限范围(“2008-2010”)而无需列出单个年份(“2008, 2009, 2010”),除非其中有单个 “版权” 年份需要单独列出;而且你要在文档中明确说明这一点。

按照国际惯例,请使用英文的 “Copyright” 一词;即使文档使用的是其他语言。如果愿意(并且字符集支持),加上版权的图标 “©” 也没问题,但并不是必须的。使用 “(C)” 并没有特别的法律效果,但是也无伤大雅。

如果你拷贝的其他程序的代码也使用同样的许可证,那么把它们的版权声明也拷贝过来。请把一个文件的所有版权声明放在一起,并放在文件的一开始。

许可证文件

你应该在程序中包含一份许可证的拷贝。所有程序,无论是 GPL,还是 LGPL,都应该包含 GPL 的纯文本版。对 GNU 程序来说,我们的惯例是把许可证放在一个叫做 COPYING 的文件里。

如果你的程序按照 GNU AGPL 发布,那么请使用 GNU AGPL 的纯文本版,而不是 GNU GPL 的纯文本版。

如果你的程序按照 Lesser GPL 发布,那么你还要包含一份 LGPL 的纯文本版,通常放在叫做 COPYING.LESSER 的文件里。请注意,LGPL 是在 GPL 基础上的一些额外授权,所以你的程序包含 LGPL 和 GPL 两个许可证拷贝非常关键,这样用户才能够全面了解他们的权利。

许可证声明

每个文件的复制许可声明(又称为许可证声明)应当紧跟在版权声明之后。对由单个文件构成的程序,该声明(对 GPL)应该类似以下内容,使用 GPL 版本 3 或以后版本:

本程序是自由软件:你可以再分发之和/或依照由自由软件基金会发布的 GNU 通用公共许可证修改之,无论是版本 3 许可证,还是(按你的决定)任何以后版都可以。

发布该程序是希望它能有用,但是并无保障;甚至连可销售和符合某个特定的目的都不保证。请参看 GNU 通用公共许可证,了解详情。

你应该随程序获得一份 GNU 通用公共许可证的复本。如果没有,请看 <https://www.gnu.org/licenses/>。

对由多个文件构成的程序,最好将其中的 “this program” 替换为程序的名字,并以 “This file is part of NAME” 为开头。例如,

本文件是 Foobar 的一部分。

Foobar 是自由软件:你可以再分发之和/或依照由自由软件基金会发布的 GNU 通用公共许可证修改之,无论是版本 3 许可证,还是(按你的决定)任何以后版都可以。

发布 Foobar 是希望它能有用,但是并无保障;甚至连可销售和符合某个特定的目的都不保证。请参看 GNU 通用公共许可证,了解详情。

你应该随程序获得一份 GNU 通用公共许可证的复本。如果没有,请看 <https://www.gnu.org/licenses/>。

如果要使用一个不同版本的 GPL,你需要改写一些第一段的末尾部分。例如,如果使用的是版本 2 或者其以后版本,你需要把 “3” 替换为 “2”。

该声明应当放在每个源文件的开头,就在版权声明下面。当使用 LGPL 时,请在 三处 出现 “General” 一词的前面插入 “Lesser”。当使用 GNU AGPL 时,请在 三处 出现 “General” 一词的前面插入 “Affero”。

为什么要有许可证声明?

自由软件许可证的意义在于给所有软件用户应有的权利。如果你给予的权利没有清晰的描述,那么就是无的放矢。我们的做法就是避免任何不确定性。

如果一个程序在其源代码里复制了一份 FOO 许可证,但是并没有明确声明 “This program is released under license FOO,”那么这里就有 FOO 许可证是否会应用到该程序的不确定性漏洞。

如果一个发布版在诸如 README 文件里声明了 “This program is released under license FOO,”那么对 该发布版 就是清楚的。然而,程序员经常会把源文件从一个程序复制到另一个程序。如果一个源文件不包含许可证声明,那么文件拷贝就会让源文件失去许可证信息。这就会造成混淆和错误。

起始声明

对于有交互的程序,让程序在开始时显示简要的版权声明和拷贝许可通常是一个不错的主意。请参看 GNU GPL 末节 来了解更多信息。

Affero 声明

如果你要使用 GNU AGPL 发布程序,并且程序通过网络和用户交互,那么该程序应当为其用户提供源代码。例如,如果程序是网络应用,那么用户界面应当显示用户可以访问的 “源代码” 链接。GNU AGPL 接受非常宽泛的源代码访问手段,请 —参看其第 13 节。

其他

从实用的原因来看,在比如 README 文件里,包含你的联系方式是非常重要的,但是对实施许可证的法律问题来说,这个并不相关。

没有法律要求你需要登记版权;编写程序就意味着有了版权。不过,在美国,通过 US Registry of Copyrights 注册版权是一个好主意,因为这样的话,如果有人在美国违反了许可证,你就处在非常有利的地位。大多数国家并没有此类版权注册的机构。

我们想要在自由软件目录下列出所有的自由软件,包括所有使用 GPL (无论版本)的自由软件。因此,当你的程序达到一定的可用度时,请提交一个说明条目。请参看 自由软件目录 Wiki 来了解更多信息以及在线提交的格式。

你的程序也可以变成 GNU 软件包,作为 GNU 工程的一部分。如果你有兴趣加入 GNU 工程,请参看 GNU 软件评价页面 来了解更多信息并完成一个问卷。我们会联系你并和你讨论此事。

即使你的程序不是 GNU 软件包,你也可以使用我们的许可证;实际上,我们很期待你使用我们的许可证,无论哪个版本都行。它们是为所有人准备的。如果你想对你使用的许可证做推广,请放心使用 我们的许可证标识