GNU GPL 许可证常见问题解答（四）
本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。
GPL 许可证
本文由高级咨询师薛亮据自由软件基金会（FSF）的英文原文翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。
![](/data/attachment/album/201801/09/183238pwdizyg4mngqswyn.png)


本文由高级咨询师薛亮据自由软件基金会（FSF）的[英文原文](https://www.gnu.org/licenses/gpl-faq.html)翻译而成，这篇常见问题解答澄清了在使用 GNU 许可证中遇到许多问题，对于企业和软件开发者在实际应用许可证和解决许可证问题时具有很强的实践指导意义。


1. [关于 GNU 项目、自由软件基金会（FSF）及其许可证的基本问题](/article-9062-1.html)
2. [对于 GNU 许可证的一般了解](/article-8834-1.html)
3. [在您的程序中使用 GNU 许可证](/article-8761-1.html)
4. 依据GNU许可证分发程序
5. 在编写其他程序时采用依据 GNU 许可证发布的程序
6. 将作品与依据 GNU 许可证发布的代码相结合
7. 关于违反 GNU 许可证的问题


### 4 依据GNU许可证分发程序


#### 4.1 我可以仅用二进制形式发布一个遵循 GPL 的程序的修改版本吗？


不可以。GPL 的要旨是所有修改版本必须是自由软件——这意味着修改版本的源代码必须可供用户使用。


#### 4.2 我从网上下载了二进制文件。如果我分发该副本，我必须也要获取源代码并分发？


是的。一般规则是，如果您分发二进制文件，则还必须分发完整的相应源代码。您收到索取源代码书面文件的例外情况非常有限。


#### 4.3 我想通过物理媒体分发二进制文件，但不附带源代码。我可以通过 FTP 提供源代码吗？


GPL v3 允许这种行为；有关详细信息，请参阅条款 6（b）。依据 GPL v2，您可以径自通过 FTP 提供源代码，大多数用户将从那里获得。然而，如果他们中的任何人宁愿通过邮件获取以物理媒体承载的源代码，那么您需要为之提供。


如果您通过 FTP 分发二进制文件，[则应通过 FTP 分发源代码](https://www.gnu.org/licenses/gpl-faq.html#AnonFTPAndSendSources)。


#### 4.4 我的朋友获取了一个遵循 GPL 的二进制文件和承诺提供源代码的书面文件，并为我提供了副本。我可以自己使用这个书面文件来获取源代码吗？


是的，你可以。该书面文件必须对拥有其所相伴的二进制文件的所有人开放。这就是为什么 GPL 说你的朋友必须给你一份这个书面文件的副本以及这个二进制文件的副本，所以你可以使用该书面文件索取源代码。 


#### 4.5 我可以将二进制文件放在我的互联网服务器上，并将源代码放在不同的网站上吗？


可以。第 6（d）条允许这样做。但是，您必须提供明确指示，以利于人们依次来获取源代码，并且必须注意，只要你的目标代码还在分发，就要确保源代码仍然可用。 


#### 4.6 我想以二进制形式分发一个遵循 GPL 的程序的扩展版本，是否分发原始版本的源代码就足够了？


不可以，您必须提供与二进制文件对应的源代码。对应的源代码意味着用户可以从中重建相同的二进制文件。


自由软件的一部分理念是用户应该可以访问他们使用的程序的源代码。使用您的版本的用户应该可以访问您的版本的源代码。


GPL 的一个主要目标是建立自由世界，确保对自由程序的改进本身是自由的。如果您发布一个改进版本的遵循 GPL 的程序，您必须依据 GPL 发布改进的源代码。


#### 4.7 我想分发二进制文件，但不太方便分发完整的源代码。我是否可以向用户提供来自与该二进制文件对应的“标准”版本的diff？


这是一个很好的想法，但是这种提供源代码的方法并没有真正做到这一点。


一年之后想要获取源代码的用户可能无法从当时的其他站点获取正确的版本。标准分发站点可能有一个较新的版本，但相同的diff 可能无法与该版本一起使用。


所以你需要为二进制文件提供完整的源代码，而不仅仅是 diff。 


#### 4.8 我可以在网络服务器上发布二进制文件，但是仅向索取的用户发送源代码吗？


如果您在网络服务器上提供二进制对象代码，则必须在网络服务器上提供对应源代码。执行此操作的最简单方法是将它们发布在同一台服务器上，但如果需要，您可以提供从其它服务器甚至[版本控制系统](https://www.gnu.org/licenses/gpl-faq.html#SourceInCVS)获取源代码的说明。不管你做什么，源代码都应该像目标代码一样容易访问。这些全部在 GPL v3 的第 6（d）节中进行了具体说明。


您提供的源代码必须完全对应于二进制文件。特别是，您必须确保它们是相同版本的程序——不是旧版本，也不是新版本。


#### 4.9 如何确保每个下载二进制文件的用户都能获得源代码？


你不必确定这一点。只要您使源代码和二进制文件可用，以便用户可以看到可用的内容并获取所需的内容，那么您已经完成了所需的操作。是否下载源代码取决于用户。


我们对再分发者的要求旨在确保用户可以获得源代码，而不是强迫用户即使在不需要的情况下也要下载源代码。 


#### 4.10 GPL 要求我提供可以构建成与我正在分发的二进制文件的精确哈希值相匹配的二进制文件的源代码吗？


完全对应的源代码意味着二进制文件依赖该源代码生成，但这并不意味着您的工具必须能够创建一个与您正在分发的二进制文件的精确哈希值相同的二进制文件。在某些情况下，可能（几乎）不可能使用正在分发的二进制文件的精确哈希值从源代码构建二进制文件——考虑以下示例：系统可能会将时间戳放在二进制文件中；或者程序可能是针对不同的（甚至未发行的）编译器版本构建的。 


#### 4.11 我是否可以发布一个遵循某许可证的程序，该许可证表示您可以依据 GPL 分发修改后的版本，但是您不能分发遵循 GPL 的原始版本？


不可以，这样的许可证是自相矛盾的。我们来看看它对用户的影响。


假设我从原始版本（称为版本 A）开始，添加一些代码（让我们假设它是 1000 行），并依据 GPL 发布修改版本（称为 B 版本）。GPL 说任何人都可以再次更改 B 版本，并依据 GPL 发布修改结果。我（或其他人）可以删除那 1000 行代码，生成与版本 A 代码相同的但遵循 GPL 的 C 版本。


通过在许可证中明确表示我不允许删除版本 B 中的那些行，重制成与遵循 GPL 的 A 版本相同的东西，您可以尝试阻止该路径。但实际上许可证表示现在我不能完全以 GPL 允许的所有方式使用版本 B。换句话说，许可证实际上不允许用户发布诸如遵循 GPL 的 B 版本这样的修改版本。


#### 4.12 我刚刚发现一家公司有一份 GPL 程序的副本，获取该副本需支付费用。他们会因为不能在互联网上提供副本而违反 GPL 吗？


不会，GPL 不要求任何人使用互联网进行分发。它也不要求任何人特意去再分发程序。而且（一个特殊情况之外），即使有人决定再分发该程序，GPL 也不会要求他必须特意向您或其他人分发副本。


GPL 要求的是，如果他愿意，他必须有权将副本分发给你。一旦版权所有者将程序的副本分发给某人，如果某人认为合适，那么该人可以将程序再分发给您或任何其他人。


#### 4.13 一家公司正在网站上运行一个 GPL 程序的修改版本。GPL 规定他们是否必须发布修改后的源代码？


GPL 允许任何人进行修改并使用修改版本，而无需将其分发给他人。（这里所说的）这家公司的做法是一个特例。 因此，公司不必发布修改后的源代码。


人们必须能够自由地对程序进行修改并自用，而无需发布这些修改。然而，将程序放在服务器上以供公众访问很难说是“自用”，因此要求在这种特殊情况下发布源代码是合法的。希望解决这个问题的开发人员可以为其程序适用 [GNU Affero GPL](https://www.gnu.org/licenses/agpl.html)，该许可证专门为网络服务器使用场景而设计。 


#### 4.14 在一个组织或公司中制作和使用多个副本构成“分发”吗？


不构成，在这种情况下，组织只是为自己制作副本。因此，公司或其他组织可以开发修改后的版本，并通过自己的设施安装该版本，但不得允许员工向外发布该修改版本。


但是，当组织将副本转移给其他组织或个人时，即构成分发。特别是，向承包商提供副本以便在场外使用，构成了分发。 


#### 4.15 如果有人窃取包含 GPL 程序的 CD，GPL 是否授予小偷再分发该版本的权利？


如果该版本已经在其他地方被发布，那么依据 GPL，这个小偷可能确实有权利制作副本并将其再分发，但是如果小偷因为窃取 CD 而被监禁，那么他们可能必须等到释放才能这样做。


如果相关版本未被公开发布并被公司视为其商业秘密，则根据其他情况，发布该版本可能会违反商业秘密法。GPL 对此没有进行改变。如果公司试图发布其版本，并仍将其视为商业秘密，则会违反 GPL，但如果公司尚未发布此版本，则不会发生此类违规。


#### 4.16 如果一家公司将副本作为商业秘密分发会构成违规吗？


如果该公司向您分发副本并声称是商业秘密，则该公司违反了 GPL，必须停止分发。请注意这与上述盗窃案有何不同；该公司没有故意在副本被盗后分发副本，所以在这种情况下，该公司没有违反 GPL。


#### 4.17 我在使用 GPL 程序的源代码时是否具有<ruby> “合理使用” <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>权限？


是的，您有。“合理使用”是在没有任何特别许可的情况下允许的使用。 由于您不需要开发人员的许可来进行这种使用，无论开发人员在许可证或其他地方对此怎么说，您都可以执行此操作，无论该许可证是 GNU GPL 还是其他自由软件许可证。


但是，请注意，没有全世界范围普适的合理使用原则；什么样的用途被认为“合理”因国而异。


#### 4.18 将副本移至控股的附属公司会构成分发吗？


副本移至/移自附属公司是否构成“分发”需要根据恰当管辖区的版权法依据个案确定。GPL 没有也不能逾越当地法律。美国版权法关于这一点的规定并不完全清楚，但似乎并不将此视为分发。


如果在某些国家，这被视为分发，而附属公司必须得到再分发程序的权利，这不会有实际的区别。附属公司由母公司控制；无论有没有权利，除非母公司决定这样做，否则附属公司不会再分发该程序。 


#### 4.19 软件安装程序可以要求用户通过点击来同意 GPL 协议吗？如果我获得一些遵循 GPL 的软件，我必须同意什么吗？


一些软件安装系统有一个地方要求您点击或以其他方式表示同意 GPL 的条款。这不是必须的，也不是禁止的。无论是否点击， GPL 的规则保持不变。


只是同意 GPL 不要求您承担任何义务。仅使用依据 GPL 进行许可的软件，您不需要同意任何事项。只有您修改或分发软件时，您才有义务。如果点击同意 GPL 真的打扰了你，没有任何东西能阻止你修改该 GPL 软件把这个步骤删除掉。


#### 4.20 我想将 GPL 软件与某种安装软件捆绑在一起。该安装程序是否需要具有与 GPL 兼容的许可证？


不需要。安装程序及其安装的文件是单独的作品。因此，GPL 的条款不适用于安装软件。


#### 4.21 GPL 软件的一些分发者要求将我囊括在其伞式的最终用户许可协议（EULA）中或作为下载过程的一部分，以“代表和保证”我位于美国，或者我打算依据相关出口管制法律分发软件。为什么他们这样做，是否违反了分发者在 GPL 下的义务？


这不违反 GPL。那些分发者（几乎都是销售自由软件分发版本和相关服务的商业企业）正在努力降低自己的法律风险，而不是控制您的行为。如果分发者故意将软件出口到某些国家或将软件提供给可能会进行这种出口行为的第三方，美国的出口管制法可能会要求分发者承担责任。分发者通过向客户和被分发软件的其他人要求做出这些声明，一旦被监管机构问及他们是否知道其分发的软件流至何方，分发者可以借此保护自己。分发者并不限制您可以用软件做什么，只是避免他们对您所做的任何事情负责。因为分发者没有对软件施加额外的限制，所以他们不违反 GPL v3 的第 10 节或 GPL v2 的第 6 节。


自由软件基金会（FSF）反对将美国出口管制法律适用于自由软件。这些法律不仅与软件自由的总体目标不符，而且达不到合理的政府目的，因为目前几乎每个国家都可以使用自由软件并且应该一直都能使用，包括没有出口管制法律的国家以及参与美国领导的贸易禁运的国家。所以没有一个国家的政府实际上被美国的出口管制法律剥夺了使用自由软件的权利，就我们而言，不管其政府的政策如何，每个国家的公民都不应该被剥夺使用自由软件的权利。自由软件基金会发布的所有 GPL 软件的副本可以通过我们获得，而不对您居住地点或您打算做什么进行任何限制。同时，自由软件基金会理解位于美国的商业分发者遵守美国法律的愿望。他们有权选择将自由软件的特定副本分发给谁；该权利的行使不违反 GPL，除非他们增加超出 GPL 许可的合同限制。


#### 4.22 GPL v3 第 6 节的开头说，如果我也符合第 6 节的条件，我可以“按照第 4 节和第 5 节的规定”，以目标代码的形式传递其覆盖的作品。这是什么意思？


这意味着您传递源代码的所有权限和条件也适用于传递目标代码：您可以收取费用，您必须保持版权声明不变，等等。


#### 4.23 我公司拥有很多专利。多年来，我们遵循“GPL 第 2 版或更新版本”的项目提供了代码，项目本身已按相同的条款进行了分发。如果用户决定将项目代码（包含我公司的贡献）适用 GPL v3，那意味着我已经自动向该用户授予 GPL v3 中的明确专利许可？


不是，当您<ruby> 传递 <rp>  （ </rp> <rt>  convey </rt> <rp>  ） </rp></ruby>遵循 GPL 的软件时，您必须遵守该许可证特定版本的条款和条件。当您这样做时，该版本定义了您拥有的义务。如果用户也可以选择使用更新版本的 GPL，那仅仅是他们拥有的额外权限——它不需要您满足 GPL 更新版本条款的要求。


不要因为答案是 NO 就认为可以用你的专利来威胁社区（LCTT 译注：感谢“西米宜家”的指正）。在许多国家，根据 GPL v2 分发软件为接收人提供了隐含的专利许可，以行使 GPL 中的权利。即使没有，任何考虑强制执行专利的人都是社区的敌人，我们将捍卫自己免受这种攻击。 


#### 4.24 如果我分发了一个遵循 GPL v3 的程序，我可以提供一个一旦用户修改程序则无效的保修吗？


可以。就像用户一旦修改设备中的软件就不需要保证设备安全一样，您不需要提供涵盖所有可能通过遵循 GPL v3 的软件进行的活动的保修。


#### 4.25 如果我给公司同事一份遵循 GPL v3 的程序的副本，是否构成了我将该副本<ruby> “传递” <rp>  （ </rp> <rt>  convey </rt> <rp>  ） </rp></ruby>给该同事？


只要您在公司的工作中使用软件，而不是个人使用该软件，那么答案是否定的。副本属于公司，不属于您或同事。这种复制是<ruby> 传播 <rp>  （ </rp> <rt>  propagation </rt> <rp>  ） </rp></ruby>而不是<ruby> 传递 <rp>  （ </rp> <rt>  convey </rt> <rp>  ） </rp></ruby>，因为公司没有将副本提供给他人。


#### 4.26 如果我通过链接至版本控制系统（例如 CVS 或 Subversion）中的源代码存储库方式提供源代码，而在 FTP 服务器上提供二进制文件，这种做法符合 GPL v3 吗？


只要源码签出过程不会变得繁重或存在其他限制，这是可以接受的。任何可以下载目标代码的人也应该可以使用公开的自由软件客户端从版本控制系统中签出源代码。应向用户提供清晰方便的说明，说明如何获取其下载的确切目标代码的源代码——毕竟，他们可能不一定需要最新的开发代码。


#### 4.27 在<ruby> 用户产品 <rp>  （ </rp> <rt>  User Product </rt> <rp>  ） </rp></ruby>中传递遵循 GPL v3 的软件的用户，是否可以使用远程认证来防止用户修改该软件？


不可以。当软件在用户产品中传递时，必须与源文件一起提供的“安装信息”的定义中明确表示：“该信息必须足以确保修改的目标代码的继续运行在任何情况下都不会仅仅因为修改过而被阻止或干扰。“如果设备以某种方式使用远程认证，则安装信息必须为您修改的软件报告自身的合法性提供一些方法。


#### 4.28 GPL v3 中的“通过网络进行通信的规则和协议”是什么意思？


这是指可以通过网络发送的流量规则。例如，如果每天可以发送到服务器的请求数量或者您可以在某处上传的文件大小有限制，如果不遵守这些限制，则可能会拒绝您对这些资源的访问。


这些规则不包括任何与网络上传播的数据无关的内容。例如，如果网络上的服务器将用户消息发送到您的设备，则您对网络的访问无法被拒绝，因为您修改了该软件以使其不显示消息。 


#### 4.29 依据 GPL v3 提供安装信息的分发者不需要为产品提供“支持服务”。 所谓的“支持服务”具体是指哪些？


这其中包括设备制造商提供的帮助您安装、使用或排除故障的服务。如果设备依赖于访问 Web 服务或类似技术才能正常运行，则通常仍然可以使用修改版本，但须符合第 6 节中关于访问网络的条款。




---


译者介绍：薛亮，集慧智佳知识产权咨询公司高级咨询师，擅长专利检索、专利分析、竞争对手跟踪、FTO 分析、开源软件知识产权风险分析，致力于为互联网企业、高科技公司提供知识产权咨询服务。


![](/data/attachment/album/201801/10/210130rsis334kss4esehz.jpg)

