45、开源 awk 实现及 GNU 通用公共许可证详解

开源 awk 实现及 GNU 通用公共许可证详解

1. gawk 问题反馈与维护人员

许多 GNU/Linux 发行版和基于 BSD 的操作系统都有自己的错误报告系统。当你使用发行版的错误报告系统报告 gawk 的错误时,应该同时发送一份报告到 bug-gawk@gnu.org。原因如下:
- 部分发行版不会将错误报告转发给 GNU 邮件列表,这可能导致 gawk 维护人员无法看到报告。
- 发送到 GNU 列表的邮件会被存档,所有信息集中在 GNU 项目中,便于管理。

非错误类的建议也一直受到欢迎。如果你对文档中不清楚的内容或模糊的功能有疑问,可以在错误列表中提问,维护人员会尽力提供帮助。

如果你在 gawk 的非 Unix 移植版本中发现错误,需要给错误列表发送邮件,并抄送该移植版本的维护人员。以下是各移植版本的维护人员信息:
| 系统 | 维护人员 | 邮箱 |
| — | — | — |
| Unix 和 POSIX 系统 | Arnold Robbins | arnold@skeeve.com |
| MS - DOS with DJGPP | Scott Deifik | scottd.mail@sbcglobal.net |
| MS - Windows with MinGW | Eli Zaretskii | eliz@gnu.org |
| OS/2 | Andreas Buening | andreas.buening@nexgo.de |
| VMS | John Malmberg | wb8tyw@qsl.net |
| z/OS (OS/390) | Dave Pitts | dpitts@cozx.com |

如果你的错误在 Unix 系统下也能重现,同样需要将报告副本发送到 bug-gawk@gnu.org 邮件列表。

2. 其他免费可用的 awk 实现

除了 gawk,还有许多其他免费的 awk 实现,下面为你介绍获取它们的途径:
- Unix awk :由 Unix awk 的原始设计者之一 Brian Kernighan 提供。可通过其主页获取,有多种存档格式:
- Shell 存档:http://www.cs.princeton.edu/~bwk/btl.mirror/awk.shar
- 压缩 tar 文件:http://www.cs.princeton.edu/~bwk/btl.mirror/awk.tar.gz
- Zip 文件:http://www.cs.princeton.edu/~bwk/btl.mirror/awk.zip
- 也可从 GitHub 获取: git clone git://github.com/onetrueawk/awk bwkawk ,该命令会在名为 bwkawk 的目录中创建 Git 仓库副本。若省略 bwkawk 参数,仓库副本将创建在名为 awk 的目录中。此版本需要 ISO C(1990 标准)编译器,GCC 的 C 编译器效果良好。此外,Dan Bornstein 创建了一个跟踪所有 BWK awk 版本的 Git 仓库:git://github.com/danfuzz/one - true - awk。
- mawk :由 Michael Brennan 编写,与 gawk 一样遵循 GPL 许可。原分发站点已无源代码,可从 http://www.skeeve.com/gawk/mawk1.3.3.tar.gz 获取副本。2009 年起由 Thomas Dickey 维护,下载地址为 http://invisible - island.net/datafiles/release/mawk.tar.gz。下载后可用 gunzip 解压,安装方式与 gawk 类似。
- awka :由 Andrew Sumner 编写,能将 awk 程序翻译成 C 语言,编译并链接到提供核心 awk 功能的函数库,还有许多扩展功能。awk 翻译器遵循 GPL 许可,库遵循 LGPL 许可。可从 http://sourceforge.net/projects/awka 获取,但该项目自 2001 年左右起似乎已停止更新。
- pawk :由犹他大学的 Nelson H.F. Beebe 修改 BWK awk 而来,可提供计时和分析信息,与 gawk 的 --profile 选项不同,它基于 CPU 进行分析。可从以下地址获取:
- ftp://ftp.math.utah.edu/pub/pawk/pawk - 20030606.tar.gz
- http://www.math.utah.edu/pub/pawk/pawk - 20030606.tar.gz

以下是获取上述部分 awk 实现的流程 mermaid 图:

graph LR
    A[选择 awk 实现] --> B{Unix awk}
    A --> C{mawk}
    A --> D{awka}
    A --> E{pawk}
    B --> B1[通过主页获取多种格式]
    B --> B2[从 GitHub 克隆]
    C --> C1[从指定地址下载副本]
    C --> C2[解压安装]
    D --> D1[从 SourceForge 获取]
    E --> E1[从 FTP 或 HTTP 地址获取]
3. GNU 通用公共许可证(GPLv3)概述

GNU 通用公共许可证(GPL)是一种自由、反版权的软件许可证,旨在保障用户自由分享和修改软件的权利,确保软件始终为所有用户免费使用。大多数软件的许可证会限制用户的这些自由,而 GPL 与之相反。

开发者使用 GPL 保护用户权利的步骤如下:
1. 声明对软件的版权。
2. 提供此许可证,给予用户合法复制、分发和/或修改软件的权限。

GPL 明确指出,该免费软件没有任何形式的保证,同时要求修改后的版本需标记为已更改,避免将问题错误归咎于先前版本的作者。此外,GPL 还禁止某些设备制造商限制用户安装或运行修改版本软件的行为,以保护用户修改软件的自由。并且,GPL 确保专利不会使软件变为专有软件。

4. GPLv3 术语和条件定义
  • 定义

    • “本许可证”指 GNU 通用公共许可证第 3 版。
    • “版权”涵盖适用于其他类型作品的类似版权法律,如半导体掩膜。
    • “程序”指根据本许可证授权的任何受版权保护的作品。每个被许可人称为“你”,“被许可人”和“接收者”可以是个人或组织。
    • “修改”作品指以需要版权许可的方式复制或改编作品的全部或部分,但不包括制作精确副本。修改后的作品称为“修改版本”或“基于”早期作品的作品。
    • “受保护作品”指未修改的程序或基于该程序的作品。
    • “传播”作品指在未经许可的情况下,根据适用版权法会使你直接或间接承担侵权责任的任何行为,但在计算机上执行或修改私人副本除外。传播包括复制、分发(无论是否修改)、向公众提供等。
    • “传达”作品指任何能使其他方制作或接收副本的传播方式。仅通过计算机网络与用户交互而不传输副本不属于传达。
    • 交互式用户界面显示“适当的法律通知”,需包含方便且显眼的功能,显示适当的版权通知,告知用户作品无保证(除非有提供)、被许可人可根据本许可证传达作品以及如何查看本许可证副本。若界面有用户命令或选项列表,列表中的突出项需满足此标准。
  • 源代码

    • “源代码”是指便于对作品进行修改的首选形式,“目标代码”是指作品的非源代码形式。
    • “标准接口”是指由公认标准机构定义的官方标准接口,或在特定编程语言中开发者广泛使用的接口。
    • 可执行作品的“系统库”包括除作品整体外的其他内容,这些内容包含在主要组件的正常打包形式中,但不是主要组件的一部分,且仅用于使作品能与主要组件一起使用,或实现可公开获取源代码的标准接口。“主要组件”指特定操作系统(如果有)的主要基本组件(如内核、窗口系统等)、用于生成作品的编译器或用于运行作品的目标代码解释器。
    • 目标代码形式作品的“对应源代码”指生成、安装和(对于可执行作品)运行目标代码以及修改作品所需的所有源代码,包括控制这些活动的脚本,但不包括作品的系统库、通用工具或在执行这些活动时未修改使用且不属于作品一部分的通用免费程序。对应源代码无需包含用户可从其他部分自动重新生成的内容。源代码形式作品的对应源代码就是该作品本身。
5. GPLv3 基本权限与相关规定
  • 基本权限 :本许可证授予的所有权利在程序的版权期限内有效,且在满足规定条件时不可撤销。许可证明确允许你无限制地运行未修改的程序。运行受保护作品的输出仅在其内容构成受保护作品时才受本许可证约束。同时,本许可证承认你享有版权法规定的合理使用或其他等效权利。

你可以在不传达作品的情况下制作、运行和传播受保护作品,只要你的许可证仍然有效。你也可以将受保护作品传达给他人,让他们只为你进行修改,或为你提供运行这些作品的设施,但需确保你在传达不拥有版权控制的所有材料时遵守本许可证的条款。为你制作或运行受保护作品的人必须仅代表你,在你的指导和控制下进行操作,并禁止他们在与你的关系之外制作你的版权材料副本。在其他情况下传达作品需遵循以下条件,且不允许进行再许可。

  • 保护用户免受反规避法律影响 :任何受保护作品都不应被视为适用法律下有效技术措施的一部分,这些法律履行了 1996 年 12 月 20 日通过的世界知识产权组织版权条约第 11 条规定的义务,或类似禁止或限制规避此类措施的法律。当你传达受保护作品时,你放弃了禁止规避技术措施的法律权力,只要这种规避是通过行使本许可证赋予你对该受保护作品的权利实现的,并且你声明无意限制作品的操作或修改,以对作品的用户强制执行你或第三方禁止规避技术措施的合法权利。

  • 传达逐字副本 :你可以在任何介质中传达你收到的程序源代码的逐字副本,但需在每份副本上显著且适当地发布适当的版权声明,保留所有声明本许可证和根据第 7 条添加的任何非许可条款适用于该代码的通知,保留所有关于无任何保证的通知,并随程序一起向所有接收者提供本许可证的副本。你可以对每份传达的副本收取任意价格,也可以提供收费的支持或保修服务。

  • 传达修改后的源代码版本 :你可以以源代码形式传达基于程序的作品或对程序进行修改后产生的作品,但需满足以下所有条件:

    1. 作品必须带有显著的通知,说明你对其进行了修改,并给出相关日期。
    2. 作品必须带有显著的通知,说明它是根据本许可证和第 7 条添加的任何条件发布的。此要求修改了第 4 条中“保留所有通知”的要求。
    3. 你必须将整个作品作为一个整体,根据本许可证许可给任何获得副本的人。因此,本许可证以及任何适用的第 7 条附加条款将适用于整个作品及其所有部分,无论它们如何打包。本许可证不允许以其他方式许可作品,但如果你已单独获得此类许可,则该许可不会失效。
    4. 如果作品具有交互式用户界面,每个界面都必须显示适当的法律通知;但是,如果程序的交互式界面不显示适当的法律通知,你的作品无需强制使其显示。

将受保护作品与其他独立作品进行编译,且这些作品本质上不是受保护作品的扩展,也未与受保护作品组合形成更大的程序,在存储或分发介质的卷中,这种编译称为“聚合”。如果聚合及其产生的版权不用于限制聚合用户的访问或合法权利,超出单个作品允许的范围,则将受保护作品包含在聚合中不会使本许可证适用于聚合的其他部分。

以下是传达不同形式作品的条件总结表格:
| 作品形式 | 传达条件 |
| — | — |
| 逐字副本(源代码) | 显著发布版权声明,保留相关通知,提供许可证副本,可收费 |
| 修改后的源代码版本 | 说明修改情况及日期,说明发布许可条件,整体按许可证许可,界面显示法律通知(有交互界面时) |

6. GPLv3 传达非源代码形式及其他规定
  • 传达非源代码形式 :你可以根据第 4 条和第 5 条的条款以目标代码形式传达受保护作品,但需同时以以下方式之一根据本许可证传达机器可读的对应源代码:
    1. 将目标代码包含在或体现在物理产品(包括物理分发介质)中,并随附固定在通常用于软件交换的耐用物理介质上的对应源代码。
    2. 将目标代码包含在或体现在物理产品(包括物理分发介质)中,并随附一份书面要约,该要约在至少三年内有效,并且只要你为该产品型号提供备件或客户支持就一直有效,向拥有目标代码的任何人提供以下两种选择之一:(1)以不超过你实际传达源代码的合理成本的价格,在通常用于软件交换的耐用物理介质上提供产品中受本许可证保护的所有软件的对应源代码副本;(2)免费从网络服务器复制对应源代码的访问权限。
    3. 随目标代码的单个副本提供一份提供对应源代码的书面要约。此替代方案仅允许偶尔和非商业性使用,并且仅当你按照第 6b 款的规定收到带有此类要约的目标代码时才可使用。
    4. 通过指定地点(免费或收费)提供目标代码的访问权限,并以相同方式通过同一地点免费提供对应源代码的等效访问权限。你无需要求接收者与目标代码一起复制对应源代码。如果复制目标代码的地点是网络服务器,对应源代码可以位于支持等效复制功能的不同服务器(由你或第三方操作)上,但你需在目标代码旁边保留明确的指示,说明在哪里可以找到对应源代码。无论对应源代码由哪个服务器托管,你都有义务确保在需要时始终可以获取它。
    5. 使用点对点传输传达目标代码,但需告知其他对等方作品的目标代码和对应源代码在第 6d 款规定下免费向公众提供的位置。

可分离的目标代码部分,如果其源代码作为系统库被排除在对应源代码之外,则在传达目标代码作品时无需包含该部分。

“用户产品”指“消费产品”(即通常用于个人、家庭或家庭目的的任何有形个人财产)或设计或销售用于并入住宅的任何物品。在确定产品是否为消费产品时,有疑问的情况应倾向于涵盖。对于特定用户收到的特定产品,“正常使用”指该类产品的典型或常见使用方式,无论特定用户的身份或特定用户实际使用、期望使用或预期使用产品的方式如何。除非商业、工业或非消费用途是产品的唯一重要使用方式,否则产品即为消费产品。

“安装信息”指在用户产品中从修改后的对应源代码安装和执行受保护作品的修改版本所需的任何方法、程序、授权密钥或其他信息。该信息必须足以确保修改后的目标代码的持续运行不会仅因为进行了修改而受到阻止或干扰。

如果你根据本节规定在用户产品中、与用户产品一起或专门为用户产品使用而传达目标代码作品,并且传达是在将用户产品的占有和使用权永久或在固定期限内转让给接收者的交易的一部分(无论交易如何定性),则根据本节传达的对应源代码必须附带安装信息。但如果你和任何第三方都无法在用户产品上安装修改后的目标代码(例如,作品已安装在 ROM 中),则此要求不适用。提供安装信息的要求不包括为接收者修改或安装的作品或用户产品提供持续的支持服务、保修或更新。当修改本身对网络的运行产生重大不利影响或违反网络通信的规则和协议时,可以拒绝网络访问。根据本节传达的对应源代码和提供的安装信息必须采用公开记录的格式(并且其实现可公开获取源代码形式),并且不需要特殊密码或密钥进行解包、读取或复制。

以下是传达非源代码形式作品流程的 mermaid 图:

graph LR
    A[以目标代码形式传达受保护作品] --> B{选择传达对应源代码方式}
    B --> B1[物理产品附带对应源代码]
    B --> B2[物理产品附带书面要约]
    B --> B3[目标代码副本附带书面要约]
    B --> B4[指定地点提供访问权限]
    B --> B5[点对点传输并告知位置]
    B2 --> B21[提供介质副本或网络访问]
    B4 --> B41[确保对应源代码可获取]
  • 附加条款 :“附加权限”是指通过对本许可证的一个或多个条件进行例外规定来补充本许可证条款的条款。适用于整个程序的附加权限应被视为包含在本许可证中,只要它们在适用法律下有效。如果附加权限仅适用于程序的一部分,则该部分可以在这些权限下单独使用,但整个程序仍受本许可证约束,不受附加权限的影响。

当你传达受保护作品的副本时,你可以选择从该副本或其任何部分中删除任何附加权限。(附加权限可以规定在某些情况下修改作品时必须删除它们。)你可以对添加到受保护作品中的材料设置附加权限,前提是你拥有或可以获得该材料的适当版权许可。

尽管本许可证有其他规定,但对于你添加到受保护作品中的材料,在获得该材料版权持有者授权的情况下,你可以用以下条款补充本许可证的条款:
1. 与本许可证第 15 条和第 16 条的条款不同地放弃保修或限制责任。
2. 要求在该材料或包含该材料的作品显示的适当法律通知中保留指定的合理法律通知或作者归属。
3. 禁止对该材料的来源进行虚假陈述,或要求以合理的方式标记该材料的修改版本,使其与原始版本有所区别。
4. 限制将许可方或作者的名称用于宣传目的。
5. 拒绝授予商标法下使用某些商标、商号或服务标记的权利。
6. 要求任何传达该材料(或其修改版本)并对接收者承担合同责任的人对该材料的许可方和作者进行赔偿,以补偿这些合同责任直接施加给许可方和作者的任何责任。

所有其他非许可性附加条款被视为第 10 条意义上的“进一步限制”。如果你收到的程序或其任何部分包含通知,说明它受本许可证和作为进一步限制的条款的约束,你可以删除该条款。如果许可文档包含进一步限制但允许根据本许可证进行再许可或传达,你可以将受该许可文档条款约束的材料添加到受保护作品中,但前提是该进一步限制在再许可或传达后不会继续存在。如果你根据本节向受保护作品添加条款,你必须在相关源代码文件中放置适用于这些文件的附加条款声明,或指示在哪里可以找到适用条款的通知。附加条款,无论是许可性还是非许可性的,可以以单独编写的许可证形式或作为例外情况陈述;上述要求同样适用于这两种方式。

  • 终止 :你不得违反本许可证的明确规定传播或修改受保护作品。任何违反规定的传播或修改尝试均无效,并将自动终止你在本许可证下的权利(包括第 11 条第三段授予的任何专利许可)。

然而,如果你停止所有违反本许可证的行为,那么你从特定版权持有者处获得的许可证将(a)暂时恢复,除非且直到版权持有者明确并最终终止你的许可证;(b)如果版权持有者在你停止违规行为后的 60 天内未通过合理方式通知你违规情况,则永久恢复。

此外,如果版权持有者通过合理方式通知你违规情况,这是你第一次从该版权持有者处收到违反本许可证(针对任何作品)的通知,并且你在收到通知后的 30 天内纠正了违规行为,那么你从该版权持有者处获得的许可证将永久恢复。

本节规定下你的权利终止不会终止根据本许可证从你处获得副本或权利的各方的许可证。如果你的权利已被终止且未永久恢复,你将不符合根据第 10 条获得相同材料新许可证的条件。

  • 接受与否及自动许可 :你无需接受本许可证即可接收或运行程序的副本。仅因使用点对点传输接收副本而附带传播受保护作品同样不需要接受本许可证。然而,除本许可证外,没有其他许可授予你传播或修改任何受保护作品的权利。如果你不接受本许可证而进行这些操作,则构成侵犯版权。因此,通过修改或传播受保护作品,你表示接受本许可证以进行此类操作。

每次你传达受保护作品时,接收者将自动从原始许可方获得在本许可证约束下运行、修改和传播该作品的许可证。你无需负责确保第三方遵守本许可证。

“实体交易”是指转移组织控制权、转移组织的绝大部分资产、分割组织或合并组织的交易。如果受保护作品的传播是由实体交易引起的,那么该交易中接收作品副本的每一方也将获得其利益前身在上述段落中拥有或可以授予的对该作品的任何许可证,以及如果其利益前身拥有或可以通过合理努力获得该作品的对应源代码,则有权从其利益前身处获得该对应源代码。

你不得对本许可证授予或确认的权利的行使施加任何进一步的限制。例如,你不得对行使本许可证授予的权利收取许可费、特许权使用费或其他费用,也不得发起诉讼(包括诉讼中的交叉索赔或反诉),声称制造、使用、销售、要约销售或进口程序或其任何部分侵犯了任何专利索赔。

7. GPLv3 专利相关及其他补充规定
  • 专利 :“贡献者”是指授权根据本许可证使用程序或程序所基于的作品的版权持有者。如此授权的作品称为贡献者的“贡献者版本”。

贡献者的“必要专利索赔”是指贡献者拥有或控制的所有专利索赔,无论这些索赔是已经获得还是以后获得的,这些索赔会因本许可证允许的某种制造、使用或销售其贡献者版本的方式而被侵犯,但不包括仅因对贡献者版本进行进一步修改而被侵犯的索赔。就本定义而言,“控制”包括以符合本许可证要求的方式授予专利分许可证的权利。

每个贡献者授予你在其必要专利索赔下的非排他性、全球性、免版税专利许可,以制造、使用、销售、要约销售、进口以及以其他方式运行、修改和传播其贡献者版本的内容。

在以下三段中,“专利许可”是指任何明示协议或承诺,无论其名称如何,不执行专利(例如,明示允许实施专利或承诺不就专利侵权提起诉讼)。“授予”此类专利许可给一方是指达成此类协议或承诺不针对该方执行专利。

如果你传达受保护作品,并且明知依赖专利许可,而该作品的对应源代码无法通过公开可用的网络服务器或其他易于访问的方式供任何人免费根据本许可证复制,那么你必须要么(1)使对应源代码可如此获取,要么(2)安排剥夺自己对该特定作品的专利许可利益,要么(3)以符合本许可证要求的方式安排将专利许可扩展到下游接收者。“明知依赖”是指你实际知道,如果没有专利许可,你在某个国家传达受保护作品或你的接收者在某个国家使用受保护作品将侵犯你有理由相信在该国有效的一个或多个可识别专利。

如果根据单一交易或安排,你传达或通过促成传达受保护作品,并向部分接收受保护作品的各方授予专利许可,授权他们使用、传播、修改或传达该受保护作品的特定副本,那么你授予的专利许可将自动扩展到该受保护作品及其衍生作品的所有接收者。

如果专利许可不包括本许可证明确授予的一项或多项权利的范围、禁止行使这些权利或以上述权利的不行使为条件,则该专利许可是“歧视性的”。如果你是与从事软件分发业务的第三方达成安排的一方,根据该安排你根据传达作品的活动程度向第三方付款,并且根据该安排第三方授予从你处接收受保护作品的任何一方歧视性专利许可(a)与你传达的受保护作品副本(或从这些副本制作的副本)有关,或(b)主要针对并与包含受保护作品的特定产品或编译有关,除非你在 2007 年 3 月 28 日之前达成该安排或授予该专利许可,否则你不得传达受保护作品。

本许可证的任何内容均不应被解释为排除或限制你在适用专利法下可能获得的任何默示许可或其他侵权抗辩。

  • 不放弃他人自由 :如果对你施加的条件(无论是通过法院命令、协议还是其他方式)与本许可证的条件相矛盾,这些条件不能免除你遵守本许可证条件的责任。如果你无法传达受保护作品以同时满足本许可证和任何其他相关义务,那么结果是你根本不能传达该作品。例如,如果你同意承担从你处接收程序的人进一步传达程序时收取特许权使用费的义务,那么你同时满足这些条款和本许可证的唯一方法是完全不传达程序。

  • 与 GNU Affero 通用公共许可证一起使用 :尽管本许可证有其他规定,但你有权将任何受保护作品与根据 GNU Affero 通用公共许可证第 3 版许可的作品链接或组合成一个单一的组合作品,并传达由此产生的作品。本许可证的条款将继续适用于作为受保护作品的部分,但 GNU Affero 通用公共许可证第 13 条关于通过网络进行交互的特殊要求将适用于整个组合作品。

  • 修订版本 :自由软件基金会可能会不时发布 GNU 通用公共许可证的修订版和/或新版本。这些新版本将与当前版本在精神上相似,但可能在细节上有所不同,以解决新的问题或担忧。每个版本都有一个独特的版本号。如果程序指定某个编号的 GNU 通用公共许可证“或任何更高版本”适用于它,你可以选择遵循该编号版本或自由软件基金会发布的任何更高版本的条款和条件。如果程序未指定 GNU 通用公共许可证的版本号,你可以选择自由软件基金会发布的任何版本。

如果程序指定一个代理可以决定可以使用哪些未来版本的 GNU 通用公共许可证,该代理公开声明接受某个版本将永久授权你为该程序选择该版本。

更高版本的许可证可能会给你额外或不同的权限。然而,你选择遵循更高版本不会给任何作者或版权持有者带来额外的义务。

  • 免责声明和责任限制 :在适用法律允许的范围内,程序没有任何保证。除非另有书面说明,版权持有者和/或其他各方按“原样”提供程序,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性和特定用途适用性的暗示保证。程序质量和性能的全部风险由你承担。如果程序被证明有缺陷,你承担所有必要的维修、修复或纠正费用。

在任何情况下,除非适用法律要求或书面同意,任何版权持有者或任何根据上述规定修改和/或传达程序的其他方均不对你因使用或无法使用程序而产生的损害负责,包括任何一般、特殊、偶然或间接损害(包括但不限于数据丢失、数据不准确、你或第三方遭受的损失或程序与任何其他程序无法正常运行),即使该持有者或其他方已被告知此类损害的可能性。

如果上述免责声明和责任限制根据当地法律无法按其条款生效,审查法院应适用最接近绝对放弃与程序相关的所有民事责任的当地法律,除非随程序副本收取费用并附带保修或责任承担声明。

8. 如何将 GPLv3 应用于新程序

如果你开发了一个新程序,并希望它对公众最有用,最好的方法是使其成为自由软件,让每个人都能根据这些条款重新分发和修改它。

为此,你需要在程序中附加以下通知。为了最有效地声明排除保证,最好将这些通知附加到每个源代码文件的开头,并且每个文件至少应有“版权”行和指向完整通知位置的指针。

one line to give the program's name and a brief idea of what it does.
Copyright (C) year name of author
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

同时,你还应添加关于如何通过电子和纸质邮件联系你的信息。

如果程序进行终端交互,在其以交互模式启动时,应输出类似以下的简短通知:

program Copyright (C) year name of author
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

假设的命令 show w show c 应显示通用公共许可证的相应部分。当然,你的程序的命令可能不同;对于图形用户界面,你可以使用“关于框”。

此外,如有必要,你还应让你的雇主(如果你是程序员)或学校为该程序签署“版权免责声明”。有关更多信息,以及如何应用和遵循 GNU GPL,请访问 http://www.gnu.org/licenses/。需要注意的是,GNU 通用公共许可证不允许将你的程序合并到专有程序中。如果你开发的是子程序库,你可能认为允许专有应用程序与该库链接更有用。如果是这样,你可以考虑使用 GNU Lesser 通用公共许可证,而不是本许可证。但在此之前,请先阅读 http://www.gnu.org/philosophy/why - not - lgpl.html。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值