蚊章汇 - Fsf
type: channel
link: https://linuxcn.bwsl.wang/author/666/
description: Fsf
items: GNU GPL 许可证常见问题解答（七）
items: GNU GPL 许可证常见问题解答（六）
items: GNU GPL 许可证常见问题解答（五）
items: GNU GPL 许可证常见问题解答（四）
items: GNU GPL 许可证常见问题解答（三）
items: 常用 GDB 命令中文速览
items: GNU GPL 许可证常见问题解答（二）
items: GNU GPL 许可证常见问题解答（一）

GNU GPL 许可证常见问题解答（七）
type: item
date: 2018-09-22T22:20:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据GNU许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题7 关于违反 GNU 许可证的问题7.1 如果发现了可能违反 GPL 许可证的行为，我该怎么办？您应该进行报告。 首先，尽可能检查事实。然后告诉发行者或版权所有者涉及的具体 GPL 程序。如果是自由软件基金会，请写信给 mailto:license-violation@gnu.org。此外，程序的维护者可能是版权所有者，他可能会告诉您如何联系版权所有者，因此将其报告给维护者。7.2 谁有权力执行 GPL 许可证？（同 1.10）由于 GPL 是版权许可，软件的版权所有者将是有权执行 GPL 的人。如果您发现违反 GPL 的行为，您应该向遵循 GPL 的该软件的开发人员通报。他们是版权所有者，或与版权所有者有关。若要详细了解如何报告 GPL 违规，请参阅“如果发现了可能违反 GPL 许可证的行为，我该怎么办？”。7.3 我听说有人依据另一个许可证获得了 GPL 程序的副本。这可能吗？GNU GPL 不允许用户将其他许可证附加到程序。但是，程序的版权持有人可以依据几个不同的许可证并行发布。其中一个可能是 GNU GPL。对于您的副本中的许可证来说，假设由版权所有者放置，并且您合法地获得该副本，则是适用于您的副本的许可证。7.4 遵循 GPL 的程序的开发者是否受 GPL 的约束？开发者的行为是否会违反 GPL？严格来说，GPL 是开发者授予其他人使用、分发和更改程序的许可。开发者本身并不受其约束，所以无论开发者做什么，都不是 GPL 的“违规”。但是，如果开发者做某些违反 GPL 的行为，那么开发者一定会失去在社区的道德地位。7.5 我刚刚发现一家公司有一份 GPL 程序的副本，获取该副本需支付费用。他们会因为不能在互联网上提供副本而违反 GPL 吗？（同 4.12）不会，GPL 不要求任何人使用互联网进行分发。它也不要求任何人特意去再分发程序。而且（一个特殊情况之外），即使有人决定再分发该程序，GPL 也不会要求他必须特意向您或其他人分发副本。GPL 要求的是，如果他愿意，他必须有权将副本分发给你。一旦版权所有者将程序的副本分发给某人，如果某人认为合适，那么该人可以将程序再分发给您或任何其他人。7.6 我可以在如果客户不继续支付订阅费用就停止运行的设备上使用遵循 GPL 的软件吗？不可以。在这种情况下，继续支付费用的要求限制了用户运行程序的能力。 这是在 GPL 之上的额外要求，GPL 禁止这种行为。7.7 “纠正” （ cure ） 违反 GPL v3 的行为意味着什么？纠正违规行为意味着调整您的做法以符合许可证的要求。7.8 如果有人在笔记本电脑上安装遵循 GPL 的软件，然后将笔记本电脑借给朋友，而不提供软件的源代码，他们是否违反了 GPL？在我们调查这个问题的司法管辖区，这种借用不会被算作、 传递 （ convey ） 。笔记本电脑的所有者不会依据 GPL 承担任何义务。7.9 假设两家公司试图通过让一家公司发布已签约的软件，另一家公司发布仅运行第一家公司签约软件的用户产品，以此来规避提供安装信息的要求。这是否违反了 GPL v3？是的。如果双方通过一起工作来逃避 GPL 的要求，就可以追究它们的侵权行为。这是特别真实的情形，因为 传递 （ convey ） 的定义明确地包括会使某人对二次侵权负责的活动。译者介绍：薛亮，集慧智佳知识产权咨询公司高级咨询师，擅长专利检索、专利分析、竞争对手跟踪、FTO 分析、开源软件知识产权风险分析，致力于为互联网企业、高科技公司提供知识产权咨询服务。

GNU GPL 许可证常见问题解答（六）
type: item
date: 2018-07-11T07:53:59+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据GNU许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题6 将作品与依据 GNU 许可证发布的代码相结合6.1 GPL v3 是否与 GPL v2 兼容？不兼容。许多要求已经从 GPL v2 变为 GPL v3，这意味 GPL v2 中的精确要求并不体现在 GPL v3 中，反之亦然。例如，GPL v3 的终止条件比 GPL v2 的终止条件更为宽泛，因此与 GPL v2 的终止条件不同。由于这些差异，两个许可证不兼容：如果您试图将依据 GPL v2 发布的代码与依据 GPL v3 发布的代码组合，则将违反 GPL v2 的第 6 部分。但是，如果代码依据 GPL “v2 或更高版本”发布，则与 GPL v3 兼容，因为 GPL v3 是其允许的选项之一。6.2 GPL v2 是否有提供安装信息的要求？GPL v3 明确要求再分发中包含完整的必要的“安装信息”。GPL v2 不使用该术语，但它需要再分发中包含用于控制可编译和安装可执行文件的脚本以及完整和相应的源代码。这涵盖了 GPL v3 中称为“安装信息”的部分内容，但不包括所有内容。因此，GPL v3 对安装信息的要求较强。6.3 各种 GNU 许可证之间如何相互兼容？各种 GNU 许可证彼此之间具有广泛的兼容性。下面是唯一的一种您不能将遵循两种 GNU 许可证的代码结合起来的情况：将遵循旧版本许可证的代码与遵循该许可证新版本的代码进行结合。以下是 GNU 许可证的各种结合的详细兼容性矩阵，以便为特定情况提供易于使用的参考。它假设有人依据其中一个许可证编写了一些软件，而您希望以某种方式将该软件的代码结合到您要发布的项目（您自己的原始作品或其他人的软件的修改版本）中。在表顶部的列中找到项目的许可证，并在左侧的一行中找到其他代码的许可证。它们交叉的单元格会告诉您这种结合是否被允许。当我们说“复制代码”时，我们的意思就是：您正在从一个源代码中获取一段代码（无论是否修改），并将其插入到自己的程序中，从而基于第一部分代码形成一个作品。当您编译或运行代码时，“使用库”意味着您不直接复制任何源代码，而是通过链接、导入或其他典型机制将源代码绑定在一起。矩阵中每个标明 GPL v3 的地方，其关于兼容性的声明也同样适用于 AGPL v3。兼容性矩阵 我希望依据以下许可证许可我的代码仅 GPL v2GPL v2 或更高版本GPL v3 或更高版本仅 LGPL v2.1LGPL v2.1 或更高版本LGPL v3 或更高版本我希望复制遵循右侧许可证的代码：仅 GPL v2可以可以 【2】不可以可以，结合作品只能遵循GPL v2 【7】可以，结合作品只能遵循GPL v2 【7】【2】不可以GPL v2 或更高版本可以 【1】可以可以可以，结合作品需遵循GPL v2或更高版本 【7】可以，结合作品需遵循GPL v2或更高版本 【7】可以，结合作品需遵循GPL v3 【8】GPL v3不可以可以，结合作品需遵循GPL v3 【3】可以可以，结合作品需遵循GPL v3 【7】可以，结合作品需遵循GPL v3 【7】可以，结合作品需遵循GPL v3 【8】仅 LGPL v2.1可以，需依据GPL v2传递复制后代码 【7】可以，需依据GPL v2或更高版本传递复制后代码 【7】可以，需依据GPL v3传递复制后代码 【7】可以可以 【6】可以，需依据GPL v3传递复制后代码 【7】【8】LGPL v2.1 或更高版本可以，需依据GPL v2传递复制后代码 【7】【1】可以，需依据GPL v2或更高版本传递复制后代码 【7】可以，需依据GPL v3传递复制后代码 【7】可以 【5】可以可以LGPL v3不可以可以，结合作品需遵循GPL v3 【8】【3】可以，结合作品需遵循GPL v3 【8】可以，结合作品需遵循GPL v3 【7】【8】可以，结合作品需遵循LGPL v3 【4】可以我希望使用遵循右侧许可证的库：仅 GPL v2可以可以 【2】不可以可以，结合作品只能遵循GPL v2 【7】可以，结合作品只能遵循GPL v2 【7】【2】不可以GPL v2 或更高版本可以 【1】可以可以可以，结合作品需遵循GPL v2或更高版本 【7】可以，结合作品需遵循GPL v2或更高版本 【7】可以…

GNU GPL 许可证常见问题解答（五）
type: item
date: 2018-03-15T19:39:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据GNU许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 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 的软件纳…

GNU GPL 许可证常见问题解答（四）
type: item
date: 2018-01-10T03:15:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据GNU许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题4 依据GNU许可证分发程序4.1 我可以仅用二进制形式发布一个遵循 GPL 的程序的修改版本吗？不可以。GPL 的要旨是所有修改版本必须是自由软件——这意味着修改版本的源代码必须可供用户使用。4.2 我从网上下载了二进制文件。如果我分发该副本，我必须也要获取源代码并分发？是的。一般规则是，如果您分发二进制文件，则还必须分发完整的相应源代码。您收到索取源代码书面文件的例外情况非常有限。4.3 我想通过物理媒体分发二进制文件，但不附带源代码。我可以通过 FTP 提供源代码吗？GPL v3 允许这种行为；有关详细信息，请参阅条款 6（b）。依据 GPL v2，您可以径自通过 FTP 提供源代码，大多数用户将从那里获得。然而，如果他们中的任何人宁愿通过邮件获取以物理媒体承载的源代码，那么您需要为之提供。如果您通过 FTP 分发二进制文件，则应通过 FTP 分发源代码。4.4 我的朋友获取了一个遵循 GPL 的二进制文件和承诺提供源代码的书面文件，并为我提供了副本。我可以自己使用这个书面文件来获取源代码吗？是的，你可以。该书面文件必须对拥有其所相伴的二进制文件的所有人开放。这就是为什么 GPL 说你的朋友必须给你一份这个书面文件的副本以及这个二进制文件的副本，所以你可以使用该书面文件索取源代码。4.5 我可以将二进制文件放在我的互联网服务器上，并将源代码放在不同的网站上吗？可以。第 6（d）条允许这样做。但是，您必须提供明确指示，以利于人们依次来获取源代码，并且必须注意，只要你的目标代码还在分发，就要确保源代码仍然可用。4.6 我想以二进制形式分发一个遵循 GPL 的程序的扩展版本，是否分发原始版本的源代码就足够了？不可以，您必须提供与二进制文件对应的源代码。对应的源代码意味着用户可以从中重建相同的二进制文件。自由软件的一部分理念是用户应该可以访问他们使用的程序的源代码。使用您的版本的用户应该可以访问您的版本的源代码。GPL 的一个主要目标是建立自由世界，确保对自由程序的改进本身是自由的。如果您发布一个改进版本的遵循 GPL 的程序，您必须依据 GPL 发布改进的源代码。4.7 我想分发二进制文件，但不太方便分发完整的源代码。我是否可以向用户提供来自与该二进制文件对应的“标准”版本的diff？这是一个很好的想法，但是这种提供源代码的方法并没有真正做到这一点。一年之后想要获取源代码的用户可能无法从当时的其他站点获取正确的版本。标准分发站点可能有一个较新的版本，但相同的diff 可能无法与该版本一起使用。所以你需要为二进制文件提供完整的源代码，而不仅仅是 diff。4.8 我可以在网络服务器上发布二进制文件，但是仅向索取的用户发送源代码吗？如果您在网络服务器上提供二进制对象代码，则必须在网络服务器上提供对应源代码。执行此操作的最简单方法是将它们发布在同一台服务器上，但如果需要，您可以提供从其它服务器甚至版本控制系统获取源代码的说明。不管你做什么，源代码都应该像目标代码一样容易访问。这些全部在 GPL v3 的第 6（d）节中进行了具体说明。您提供的源代码必须完全对应于二进制文件。特别是，您必须确保它们是相同版本的程序——不是旧版本，也不是新版本。4.9 如何确保每个下载二进制文件的用户都能获得源代码？你不必确定这一点。只要您使源代码和二进制文件可用，以便用户可以看到可用的内容并获取所需的内容，那么您已经完成了所需的操作。是否下载源代码取决于用户。我们对再分发者的要求旨在确保用户可以获得源代码，而不是强迫用户即使在不需要的情况下也要下载源代码。4.10 GPL 要求我提供可以构建成与我正在分发的二进制文件的精确哈希值相匹配的二进制文件的源代码吗？完全对应的源代码意味着二进制文件依赖该源代码生成，但这并不意味着您的工具必须能够创建一个与您正在分发的二进制文件的精确哈希值相同的二进制文件。在某些情况下，可能（几乎）不可能使用正在分发的二进制文件的精确哈希值从源代码构建二进制文件——考虑以下示例：系统可能会将时间戳放在二进制文件中；或者程序可能是针对不同的（甚至未发行的）编译器版本构建的。4.11 我是否可以发布一个遵循某许可证的程序，该许可证表示您可以依据 GPL 分发修改后…

GNU GPL 许可证常见问题解答（三）
type: item
date: 2017-11-17T06:23:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据 GNU 许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题3、在您的程序中使用 GNU 许可证3.1 如何从 (L)GPLv2 升级到 (L)GPLv3？首先，在您的软件包中包含新版本的许可证。如果您在项目中使用 LGPL v3，请确保一同包含了 GPL v3 和 LGPL v3 的副本，因为 LGPL v3 现在被写成在 GPL v3 基础上的一系列附加许可。其次，将所有现有的 v2 许可证 通知 （ notice ） （通常位于每个文件的顶部）替换为“如何使用 GNU 许可证”上新的推荐文本。它更加面向未来，因为它不再包括 FSF 的邮政地址。当然，任何涉及软件包许可证的描述性的文本（如在 README中）也应该被适当更新。3.2 您能一步一步地指导我如何将GPL应用到我的程序吗？请参阅 GPL 说明书页面。3.3 为什么我要使用 GNU GPL，而不是其他自由软件许可证？（同 1.3）使用 GNU GPL 将要求所有发布的改进版本都是自由软件。这意味着您可以避免与您自己作品的专有修改版本进行竞争的风险。不过，在某些特殊情况下，最好使用一个更宽松的许可证。3.4 为什么 GPL 要求程序的每个副本必须包含 GPL 许可证副本？（同 2.14）作品包含许可证副本至关重要，因此获得程序副本的每个人都可以知道他们的权利是什么。包括一个指向许可证的 URL，而不是将许可证本身包含在内，这是一种看起来很诱人的做法。但是您不能确定该 URL 在五年或十年后仍然有效。二十年后，我们今天所知道的 URL 们可能已不复存在。不管网络将发生什么样的变化，确保拥有该程序副本的人员能够继续看到 GPL 许可证的唯一方法是，将许可证的副本包含在该程序中。3.5 只需将 GNU GPL 的副本放在我的存储库中就可以了吗？仅将 GNU GPL 的副本放在存储库中的文件中，并不能明确地声明可以依据 GNU GPL 使用同一存储库中的代码。如果没有这样的声明，并不能完全清楚地表明许可证中的权限真的可以适用于任何特定的源文件。一个明确的声明将消除所有的疑问。文件仅包含许可证文本，而没有一个声明规定某些其他文件被该许可证覆盖，类似于文件包含一个其他任何地方都不会调用的子例程。但这种相似之处并不完美：律师和法院可能应用常识得出结论，因为您希望以 GPL 方式许可代码，所以您必定要将GNU GPL 的副本放在那里。或许律师和法院不会这样做。但为什么要留下不确定性呢？每个源文件中都应该包括声明文本。只要能够伴随代码，程序的 README 文件中的清晰声明从法律上来说就足够了，但是它们很容易分离。所以，为什么要给您的代码许可证带来不确定性的风险呢？这与 GNU GPL 的具体内容无关。对于任何自由许可证来说都是正确的。3.6 为什么要在每个源文件中放置许可证 通知 （ notice ） ？您应该在每个源文件的起始处放置通知，说明它所携带的许可证，以避免代码与其许可证被断开的风险。如果您存储库的 README 文件声明源文件遵循 GNU GPL，如果有人将该文件复制到另一个程序，会发生什么呢？ 其他上下文可能无法表明该文件的许可证是什么。它似乎有一些其他许可证，或根本没有许可证（这将使代码变成非自由软件）。在每个源文件的开始添加版权声明和许可证通知很容易，造成这种混乱的可能性不大。这与 GNU GPL 的具体内容无关。对于任何自由许可证来说都是正确的。3.7 如果作品不是很长，那该怎么办？（同 2.15）如果整个软件包中只有很少的代码——我们使用的基准是不到 300 行，那么您可以使用一个宽松的许可证，而不是像 GNU GPL 这样的左版许可证（除非代码特别重要）。我们建议这种情况使用 Apache 许可证 2.0。3.8 为了节省空间，我是否可以省略 GPL 的引言部分，或者省略如何在自己的程序上使用 GPL 的 指导 （ instructions ） 部分吗？（同 2.21）引言和指导是 GNU GPL 的组成部分，不能省略。事实上，GPL 是受版权保护的，其许可证规定只能逐字复制整个 GPL。（您可以使用法律条款制作另一个许可证，但该许可证不再是 GNU GPL。）引言和指导部分共约 1000 字，不到 GPL 总文字数量的 1/5。除非软件包本身…

常用 GDB 命令中文速览
type: item
date: 2017-09-24T23:04:31+08:00
description: 目录break -- 在指定的行或函数处设置断点，缩写为 binfo breakpoints -- 打印未删除的所有断点，观察点和捕获点的列表，缩写为 i bdisable -- 禁用断点，缩写为 disenable -- 启用断点clear -- 清除指定行或函数处的断点delete -- 删除断点，缩写为 dtbreak -- 设置临时断点，参数同 break，但在程序第一次停住后会被自动删除watch -- 为表达式（或变量）设置观察点，当表达式（或变量）的值有变化时，暂停程序执行step -- 单步跟踪，如果有函数调用，会进入该函数，缩写为 sreverse-step -- 反向单步跟踪，如果有函数调用，会进入该函数next -- 单步跟踪，如果有函数调用，不会进入该函数，缩写为 nreverse-next -- 反向单步跟踪，如果有函数调用，不会进入该函数return -- 使选定的栈帧返回到其调用者finish -- 执行直到选择的栈帧返回，缩写为 finuntil -- 执行直到达到当前栈帧中当前行后的某一行（用于跳过循环、递归函数调用），缩写为 ucontinue -- 恢复程序执行，缩写为 cprint -- 打印表达式 EXP 的值，缩写为 px -- 查看内存display -- 每次程序停止时打印表达式 EXP 的值（自动显示）info display -- 打印早先设置为自动显示的表达式列表disable display -- 禁用自动显示enable display -- 启用自动显示undisplay -- 删除自动显示项help -- 打印命令列表（带参数时查找命令的帮助），缩写为 hattach -- 挂接到已在运行的进程来调试run -- 启动被调试的程序，缩写为 rbacktrace -- 查看程序调用栈的信息，缩写为 btptype -- 打印类型 TYPE 的定义break使用 break 命令（缩写 b）来设置断点。用法：break 当不带参数时，在所选栈帧中执行的下一条指令处设置断点。break <function-name> 在函数体入口处打断点，在 C++ 中可以使用 class::function 或 function(type, ...) 格式来指定函数名。break <line-number> 在当前源码文件指定行的开始处打断点。break -N break +N 在当前源码行前面或后面的 N 行开始处打断点，N 为正整数。break <filename:linenum> 在源码文件 filename 的 linenum 行处打断点。break <filename:function> 在源码文件 filename 的 function 函数入口处打断点。break 在程序指令的地址处打断点。break ... if <cond> 设置条件断点，... 代表上述参数之一（或无参数），cond 为条件表达式，仅在 cond 值非零时暂停程序执行。详见官方文档。info breakpoints查看断点，观察点和捕获点的列表。用法：info breakpoints [list...]info break [list...]list... 用来指定若干个断点的编号（可省略），可以是 2， 1-3， 2 5 等。disable禁用一些断点。参数是用空格分隔的断点编号。要禁用所有断点，不加参数。禁用的断点不会被忘记，但直到重新启用才有效。用法：disable [breakpoints] [list...]breakpoints 是 disable 的子命令（可省略），list... 同 info breakpoints 中的描述。详见官方文档。enable启用一些断点。给出断点编号（以空格分隔）作为参数。没有参数时，所有断点被启用。用法：enable [breakpoints] [list...] 启用指定的断点（或所有定义的断点）。enable [breakpoints] once list... 临时启用指定的断点。GDB 在停止您的程序后立即禁用这些断点。enable [breakpoints] delete list... 使指定的断点启用一次，然后删除。一旦您的程序停止，GDB 就会删除这些断点。等效于用 tbreak 设置的断点。breakpoints 同 disable 中的描述。详见官方文档。clear在指定行或函数处清除断点。参数可以是行号，函数名称或 * 跟一个地址。用法：clear 当不带参数时，清除所选栈帧在执行的源码行中的所有断点。clear <function>, clear <filename:function> 删除在命名函数的入口处设置的任何断点。cl…

GNU GPL 许可证常见问题解答（二）
type: item
date: 2017-09-04T17:26:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据 GNU 许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题2、对于 GNU 许可证的一般了解2.1 为什么 GPL 允许用户发布其修改版本？自由软件的一个关键特点是用户可以自由合作。绝对有必要允许希望彼此帮助的用户与其他用户分享他们对错误的修复和改进。有些人提出了 GPL 的替代方案，需要原作者批准修改版本。只要原作者持续进行维护，这种做法在实践中可能会不错，但是如果作者停止维护（或多或少会）去做别的事情，或并不打算去满足所有用户的需求，这种替代方案就会失败。除了实践上的问题之外，该方案也不允许用户之间互相帮助。有时候对修改版本的控制，是为了防止用户制作的各种版本之间造成混淆。根据我们的经验，这种混乱不是一个大问题。在 GNU 项目之外出现了许多版本的 Emacs，但用户仍可以将它们区分开。GPL 要求版本创造者将他/她的名字标注其上，以区别于其他版本，并保护其他维护者的声誉。2.2 GPL 是否要求将修改版本的源代码公开发布？GPL 不要求您发布修改后的版本或其中的任何一部分。您可以自由地进行修改并私人使用它们，而无需进行发布。这也适用于组织（包括企业）；组织可以制作修改版本，在内部使用它，并且绝不将修改版本发布到组织之外。但是，如果您以某种方式向公众发布修改后的版本，依据 GPL 许可证，GPL 要求您保证程序的用户可以获得修改后源代码。因此，GPL 给你以某些特定方式发布修改后的程序的授权，而不是以其他方式发布；但是，是否发布修改版本的决定取决于您。2.3 我可以在同一台电脑上安装一个遵循 GPL 许可证的程序和一个不相关的非自由程序吗？可以。2.4 如果我知道某些人有一个遵循 GPL 许可证的程序的副本，我可以要求他们给我一个副本吗？不可以，GPL 给人们制作和再分发程序副本的授权，倘若有人选择这样做的话。那个人也有权选择不去再分发该程序。2.5 GPL v2 中的“ 书面文件 （ written offer ） 对任何第三方有效”是什么意思？ 这是否意味着世界上每个人都可以获得任何遵循 GPL 许可证的程序的源代码？如果您选择通过书面文件提供源代码，那么任何向您索求源代码的人都有权收到。如果您对不附带源代码的二进制文件进行商业分发，GPL 要求您必须提供一份书面文件，表明将稍后分发源代码。当用户非商业性地再分发他们从您那里获取的二进制文件时，他们必须传递这份书面文件的副本。这意味着不能直接从您那里获取二进制文件的人，仍然可以收到源代码副本以及该书面文件。我们要求书面文件对任何第三方有效的原因是，以这种方式间接收到二进制代码的人可以从您那里订购源代码。2.6 GPL v2 中规定，发布后的修改版本必须“授予…所有第三方许可”。这些第三方是谁？第 2 节中规定，依据 GPL，您分发的修改版本必须授权给所有第三方。 “所有第三方”当然是指所有人，但这并不要求您为他们做任何事情。这仅仅意味着他们依据 GPL 从您那里获得了您的修改版本的许可。2.7 GPL 允许我出售程序的副本以获利吗？是的，GPL 允许每个人这样做。销售副本的权利是自由软件定义的一部分。除了一种特殊情况之外，对您可以收取什么样的价格是没有限制的。（这种例外情况是：二进制版本必须附有表明将提供源代码的书面文件。）2.8 GPL 允许我从我的分发网站收取下载程序的费用吗？允许。您可以对您分发程序副本收取任何您想收取的费用。如果您通过下载分发二进制文件，则必须提供“等同的访问权限”来让人们下载源代码，因此，下载源代码的费用可能不会超过下载二进制文件的费用。2.9 GPL 允许我要求任何接收软件的人必须向我支付费用和/或通知我吗？不允许。实际上，这样的要求会使程序变成非自由软件。如果人们在获得程序副本时必须支付费用，或者他们必须特别通知任何人，那么这个程序就不是自由软件。请参阅自由软件的定义。GPL 是自由软件许可证，因此允许人们使用甚至再分发软件，而不需要向任何人支付费用。您可以向用户收取费用，以获取您的副本。当他们从别人那里获得副本时，您不能要求人们向您支付费用。2.10 如果我收费分发遵循 GPL 的软件，我是否还需要向公众免费提供？不需要。不过，如果有人向您支付费用并获得副本，GPL 给予他们免费或收费向公众发布的自由。例如，有人可以向您支…

GNU GPL 许可证常见问题解答（一）
type: item
date: 2017-08-09T03:34:00+08:00
description: 本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题对于 GNU 许可证的一般了解在您的程序中使用 GNU 许可证依据 GNU 许可证分发程序在编写其他程序时采用依据 GNU 许可证发布的程序将作品与依据 GNU 许可证发布的代码相结合关于违反 GNU 许可证的问题1、关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题1.1 “GPL” 代表什么意思？“GPL” 代表“ 通用公共许可证 （ General Public License ） ”。 最常见的此类许可证是 GNU 通用公共许可证，简称 GNU GPL。 如果人们能够自然而然地将其理解为 GNU GPL，可以进一步缩短为“GPL”。1.2 自由软件是否意味着必须使用 GPL？根本不是的，还有许多其他自由软件许可证。我们有一个不完整的列表。任何为用户提供特定自由的许可证都是自由软件许可证。1.3 为什么我要使用 GNU GPL，而不是其他自由软件许可证？使用 GNU GPL 将要求所有发布的改进版本都是自由软件。这意味着您可以避免与您自己作品的专有修改版本进行竞争的风险。不过，在某些特殊情况下，最好使用一个更宽松的许可证。1.4 所有 GNU 软件都使用 GNU GPL 作为其许可证吗？大多数 GNU 软件包都使用 GNU GPL，但是有一些 GNU 程序（以及程序的一部分）使用更宽松的许可证，例如 LGPL（ 较宽松公共许可证 （ Lesser GPL ） ）。我们这样做是基于战略考虑。1.5 如果一个程序使用 GPL 许可证，是否会使其成为 GNU 软件？任何人都可以依据 GNU GPL 发布一个程序，但并不能使其成为 GNU 软件包。让程序成为 GNU 软件包意味着将其明确地贡献给 GNU 项目。当程序的开发人员和 GNU 项目都同意这样做时，才会发生这种情况。如果您有兴趣向 GNU 项目贡献程序，请写信至 mailto:maintainers@gnu.org 。1.6 我可以将 GPL 应用于软件以外的其他作品吗？您可以将 GPL 应用于任何类型的作品，只需明确该作品的“源代码”构成即可。 GPL 将“源代码”定义为作品的首选形式，以便在其中进行修改。不过，对于手册和教科书，或更一般地，任何旨在教授某个主题的作品，我们建议使用 GFDL，而非 GPL。1.7 手册为什么不使用 GPL 许可证？手册也可以使用 GPL 许可证，但对于手册来说，最好使用 GFDL（ 自由文本授权 （ GNU Free Documentation License ） ）许可证。GPL 是为软件程序设计的，它包含许多复杂的条款，对于程序来说至关重要；但对于图书或手册来说，这将是麻烦和不必要的。例如，任何人如果（以 GPL ）出版纸质图书，就要么必须为每份印刷版本配置该图书的机器可读形式“源代码”，或提供书面文件，表明将稍后发送“源代码”。同时，GFDL 中包含了帮助免费手册的出版商从销售副本中获利的条款，例如，出售封面文字。 背书 （ Endorsements ） 部分的特殊规则使得 GFDL 可以作为官方标准。修改版本的手册是被允许的，但该修改版本不能被标记为“该标准”。使用 GFDL，我们允许对手册中涵盖其技术主题的文本进行修改。能够修改技术部分非常重要，因为修改程序的人理所当然地要去修改对应的文档。人们有这样做的自由，它是一种道德责任。我们的手册还包括阐述我们对自由软件政治立场的部分。我们将它们标记为 “不变量” （ invariant ） ，使得它们不被更改或删除。 GFDL 中也为这些“不变部分”做出了规定。1.8 GPL 被翻译成其他语言了吗？将 GPL 翻译成英文以外的语言将是有用的。人们甚至进行了翻译，并将文本发送给我们。但我们不敢将翻译文本批准为正式有效。其中的风险如此之大，以至于我们不敢接受。法律文件在某种程度上就像一个程序。翻译它就像将程序从一种语言和操作系统转换到另一种语言。只有同时熟练使用这两种语言的律师才能做到这一点——即便如此，也有引入错误的风险。如果我们正式批准 GPL 的翻译文本，我们将不得不给予所有人许可，让他们可以去做翻译文本规定可以做的任何事情。如果这是一个完全准确的翻译，那没关系。但如果翻译错误，后果可能是我们无法解决的灾难。如果一个程序有 bug，我们可以发布一个新的版本，最终旧版本将会逐渐消失。但是，一旦我们给予每个人去根据特定翻译文本行事的许可，如果我们稍后发现它有一个错误，我们无法收回该权限。乐意提供帮助的人有时…