GPL下发布的源代码是否必须可读?


Answers:


37

GPL要求它是编辑的首选版本。如果您通常使用混淆代码编写代码,然后直接在其中进行更改,那么这就是GPL的源头。如果您使用的是可读版本,然后通过任何类型的混淆器运行它,那么GPL认为源是可读版本。

“可读性”是主观的,没有定义。在GPL下发布真正糟糕,难以理解的代码是合法的。进行更改的版本,删除空格或以其他方式使其可读性较低,然后在GPL下调用该源是非法的。


1
非常有趣,谢谢。许可证中是否有特定部分说明这一点?
阿曼德

12
GPLv2,条款和条件,来自条款3:“作品的源代码是指对其进行修改的作品的首选形式。”
David Thornley

4
此限制仅适用于被许可人。对于您自己的代码(未输入任何外部GPL代码),您可以随意进行任意混淆,而仍可以在其上贴上GPL标签(以将权限授予他人)。nVidia在一天中(1998年左右)使用驱动程序代码完成了此操作
Patrick Georgi

2
就是说,在不提供可用源代码的作品上“贴上GPL标签”是没有意义的,例如nVidia示例。您可能还使用了专有许可证。显然,nVidia希望被视为共享代码而不实际共享代码。
thomasrutter 2014年

1
只是出于好奇。如果您在专有编辑器中工作,该编辑器以加密形式保存源代码,该怎么办?从理论上讲,您具有使用它的方式来处理代码,但是,没有其他人可以使用它,因为它是没有人可以访问的专有工具。
Aidiakapi

6

使用GPL v3,在第1节中,您具有:

目标代码形式的作品的“相应源代码”是指生成,安装和(对于可执行作品而言)运行目标代码和修改作品所需的所有源代码,包括控制这些活动的脚本。

如果删除了注释和空格,并且更改了函数和变量名,则将无法合理地修改工作。

此外:

源代码形式的作品的相应来源就是相同的作品。

相同的作品,而不是改动的作品。

因此,为了阐明我的观点,我认为源代码必须保持不变,我假设人类写作==人类可读。但是,是的,您可以直接以无法理解的方式书写。


4

该问题不包含一些关键信息。如果您是唯一的作者,则可以根据需要的任何许可证(包括GPL)发布自己的代码,而不必遵循其所有规则。因此,您可以以希望用于编辑代码的形式来发送代码,并且不会违反任何版权法。别人是否可以按照自由软件许可的精神扩展您的代码值得怀疑,因此很少有人会尝试。

但是,在大多数情况下,您将不是作品的唯一作者。您将利用现有代码,创建派生的作品。此类作品必须遵循其血统的综合规则,否则您将无权在不侵犯版权的情况下进行分发。

为了使这一点更清楚,下面是一些示例(IANAL):

  • 如果您在代码中使用GPL库,则除非以David Thornley所写的形式(实际上就是您编写和编辑它的形式),否则您将不被允许仅以混淆的形式发布自己的源代码。
  • 如果在代码中使用LGPL库,则仅允许以混淆的形式发布自己的源代码。这是因为LGPL仅要求您能够将使用该库的作品与该库的较新版本一起使用。
  • 如果扩展LGPL库,则就像GPL情况一样,并且您必须交付未混淆的代码(同样,除非您实际对其进行编辑,否则)。

1
无论谁拥有版权,您都必须遵守许可的所有规则。如果您决定要在自己的网站上使用JS库,并在GPL下发布它,则可能要单独进行。这个问题不是关于LGPL的,尽管如果类似的限制适用于LGPL,因为GPL认为代码具有可读性,那么在这里将有帮助。
Armand

@Alison:许可条件适用于使用(并在这种情况下重新分发)作品的作品,而不适用于最初创建该作品并授予您许可的作品。
圣保罗Ebermann

1
@艾莉森不同意。如果您是该作品的唯一所有者,则可以随意重新授权。因此,您可以根据(此处未指定魔术许可证)的条款进行分发,并允许他人根据GPL的条款进行重新分发-GPL仅添加权利,以允许其他人重新分发从您的作品中获得的作品。当然,这是不可能的,因为如果您不相信GPL并且是唯一所有者,那么您将不会使用它。
Michael Urman

只要该语言允许二进制文件,您就不必附带使用LGPL库的源代码。您必须附带允许用户更改LGPLed零件并重建应用程序的内容(尽管GPLv2允许您阻止用户安装更改的版本)。如果您确实出于必要或方便而运送货源,则可能会感到困惑。
David Thornley,

好点子。我将编辑帖子,不再说LGPL对使用它的作品没有任何要求。
Michael Urman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.