对于像Dart这样可编译为其他语言的语言,GPL如何运作?


11

除了特殊的Chromium版本Dartium之外,任何Web浏览器均不支持Google Dart语言。要将Dart用于生产代码,您需要通过Dart-> JavaScript编译器/翻译器运行它,然后在Web应用程序中使用输出的JavaScript。

因为JavaScript是一种解释型语言,所以每个接收“二进制”(也称为.js文件)的人也都收到了源代码。

现在,GNU通用公共许可证v3.0指出:

“作品的“源代码”是指对作品进行修改的首选形式。”

这意味着除JavaScript代码外,还必须将原始Dart代码提供给最终用户。这是否意味着即使已经以人类可读/可写/可修改的形式提供了源代码的副本,但任何用Dart编写的Web应用程序也必须向其网站的所有访问者提供原始Dart代码?


3
我不会真正将.js文件称为“源代码”,而将经过混淆的js称为“源代码”。当然,它仍在解释中,但绝不是源代码。它更像是PHP脚本的HTML输出。不确定如何在许可方面工作。
本·布罗卡

当您说“生产代码”时,您是说“已生产”吗?内部使用不需要发布源代码。您使用的Dart代码是基于他人的GPL(或其他)许可代码吗?还是这是您开发的所有原始代码?答案确实取决于这些细节
保罗

1
如果您运行的是GPL应用程序,则无需向访问者提供源代码。如果您分发应用程序,则只需提供源代码。(如果是AGPL,那么您必须提供来源:gnu.org/licenses/why-affero-gpl.html
JCasso 2012年

1
假设应用程序在面向公众的Web服务器上运行,那么代码是否不会“分发”给每个访问者?即使仅在执行前由浏览器将其下载到一个临时位置。
Peter-W

@ Peter-W我要说的是技术性的,而不是明确的。浏览器下载javascript是各种实现细节;大多数用户不知道他们已经“分发”了任何东西,而大多数用户将理解获得CD或下载内容计数为“分发”。在这种情况下,实现机制是一种分发(向浏览器和临时的分发),这使整个问题对我而言并不明确。编辑:另外,从Dart编码器的角度来看,js代码在某种程度上是“字节码”,不是吗?
Andres F.

Answers:


9

是的,如果代码在GPL下,并且您提供了输出的JavaScript,则还必须提供原始的Dart代码。通常,这可以通过从您的站点下载源代码的链接来完成,但是您也可以将其嵌入注释或类似内容中。

我认为在这种情况下遵守GPL的最简单方法是使用选项d分发源代码

d)通过提供从指定地点的访问权(免费或收费)来传达目标代码,并以相同的方式通过同一地点提供对相应源的等效访问权,而无需另外付费。您不需要收件人将对象源代码与相应的源一起复制。如果要复制目标代码的位置是网络服务器,则相应的源可能位于支持等效复制功能的另一台服务器(由您或第三方操作)上,前提是您在目标代码旁边保持清晰的方向,指明要在何处进行复制。找到相应的来源。不管由哪个服务器托管相应的源,您都有义务确保它在满足这些要求所需的时间内一直可用。

本质上,当您在页面中包含JS文件时,您就可以执行此操作

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->

2
请阅读我的答案。请注意,有关GPL的说明不需要释放原始源,仅在这种情况下才产生。在这种情况下,GPL不需要他分发,因此分发机制无关紧要。就像我说的,其他许可证有不同的规则。
保罗

1
我认为海湾合作委员会就是一个例子。由于GCC是GPL,并且我使用它来编译“封闭源代码”程序,这是否要求我发布原始源代码?我相信同样会为任何GPL“编译”是真的
保罗

3
这个答案是错误的。即使Dart代码是根据GPL许可的,您也不必提供Dart源代码,除非您分发应用程序。在服务器上运行GPL应用程序不需要提供该应用程序的源代码。这就是为什么还有另一个名为AGPL的许可证的原因。为此目的。
JCasso 2012年

2
@JCasso如果代码在服务器上运行,那将是正确的,但是对于Dart而言,生成的目标代码是JavaScript,它在大多数情况下都分发给客户端。显然,如果您做的事情真的很奇怪,例如在服务器端运行JavaScript,那么它就不算发行版。
德克·霍尔索普

3
@JCasso仅适用于服务器端代码。在同一页面上:Drupal的JavaScript(包括Drupal附带的jQuery副本)本身也属于GPL,因此在浏览器中与Drupal的JavaScript交互的任何Javascript也必须受GPL或GPL兼容许可证的约束。
德克·霍尔索普

2

首先,我们谈论的是GPL,而不是AGPL。

如果您不分发 GPL应用程序,则可以在服务器上运行它,而无需提供源代码。有AGPL。GPL与发行有关。

从Drupal常见问题解答:

我是否必须将网站的代码提供给访问它的任何人?

不可以。GPL不会考虑将网站视为“分发”,因此您无需共享服务器上运行的代码。http://drupal.org/licensing/faq/#q6

请注意,Drupal是根据GPL许可的,并且包含js文件(很多)。

从GNU:

GNU Affero GPL的目的是防止影响到通常在服务器上使用的免费程序的开发人员的问题。

假设您在普通的GNU GPL下开发并发布了一个免费程序。如果开发人员D修改了程序并发布了程序,则GPL要求他也必须在GPL下分发其版本。因此,如果您获得他的版本的副本,则可以自由地将他的部分或全部更改合并到您自己的版本中。

但是,假设该程序主要在服务器上有用。当D修改程序时,他很可能会在自己的服务器上运行该程序,并且从不释放副本。这样一来,您将永远不会获得其版本源代码的副本,因此您将永远没有机会在其版本中包含他的更改。您可能不喜欢这种结果。

使用GNU Affero GPL避免了这种结果。如果D在每个人都可以使用的服务器上运行其版本,那么您也可以使用它。假设他已遵循许可要求,以允许服务器用户下载其版本的源代码,则可以执行此操作,然后可以将其更改合并到您的版本中。(如果他没有遵循,则您的律师向他投诉。)资料来源:http//www.gnu.org/licenses/why-affero-gpl.html


2
但是,看到的是Dart,它被编译为Javascript,然后在cilent上执行,是否适用?
温斯顿·埃韦特

1
GPL对此很清楚。如果我给您提供Ubuntu CD,则我必须为您提供获取源代码的方法。如果我把ubuntu.iso放到文件服务器上,我也必须提供下载链接(或类似的东西)。这称为分发。如果分发它,则必须提供源代码。但是,拥有(在服务器上)在线应用程序永远不会算作“分发”。
JCasso 2012年

3
关键是代码在浏览器而不是服务器上运行。仅当我们查看在服务器上运行的代码时,您的答案才有意义。但是我们不是。我们正在研究在客户端计算机上运行的代码。如果代码是在服务器上执行的,那是对的,它不是分发。但是因为代码是由浏览器下载并运行的,所以它是分发的,您的答案是无礼的。
温斯顿·埃韦特

2
实际上,我认为哪个CPU处理它非常重要。如果我在CPU上运行您的代码,那么根据需要,您已经将代码分发给了我。出于所有目的和目的,它与我下载并运行该程序完全相同。:这个问题以前已经讨论stackoverflow.com/questions/1239470/...programmers.stackexchange.com/questions/62869/...
温斯顿·埃韦特

2
另外,请参见链接到的AGPL页面。它明确讨论了在服务器上执行的代码,而不是在客户端上执行的代码。如果作者认为GPL不适用于您的javascript执行代码,那么他会在讨论中提到。
温斯顿·埃韦特

1

通常,它实际上取决于许可证。在您的情况下,Dart是一个不好的例子,因为它是BSD,并且GNU 3.0似乎涵盖了您所讨论的情况。作为非律师,我会将其解释为“未专门涵盖生成的代码”

Dart主页 涉及此:BSD许可证

所以您对GPL的质疑还没有定论

另外:GNU 3.0许可证

有什么方法可以使人们从使用我的程序中获得GPL?例如,如果我的程序用于开发硬件设计,我可以要求这些设计必须免费吗?(#GPLOutput)

一般来说,从法律上讲这是不可能的。版权法在使用人们使用您的程序从其数据中获得的输出方面没有任何发言权。如果用户使用您的程序输入或转换自己的数据,则输出的版权归他所有,而不是您所有。更一般而言,当程序将其输入转换为其他形式时,>输出的版权状态将继承其生成的输入的版权状态。

因此,使用输出的唯一方法是是否从程序中的文本复制(或多或少)输出的实质部分。例如,如果我们在此特定情况下没有例外,则Bison的部分输出(参见上文)将由GNU GPL涵盖。

即使没有技术原因,您也可以人为地使程序将某些文本复制到其输出中。但是,如果复制的文本没有实际用途,则用户可以简单地从输出中删除该文本,而仅使用其余文本。这样,他就不必遵守复制文本重新分发的条件。


3
问题不是关于GPL的Dart编译器(BTW与程序(编译器)输出无关),而是关于GPL的Dart程序。

2
@delnan我读的问题与您读的不一样。1)看到我的第一个链接,Dart是BSD。2)如果Dara程序是GPL,他不会问这个问题。我读了这个问题,因为他想知道是否需要他还发布他的Dart源代码。你真的读过我的答案吗?
保罗

2
好吧,您似乎是唯一这样阅读它的人。尽管OP并未明确提及所讨论的Dart程序是GPL,但假设Dart编译器也是GPL,也没有暗示他,因此我不愿意假设他所做的研究很少。

抱歉,请继续进行扩展...因此,如果Dart程序既不是GPL也不是Dart是BSD(确实是,或者至少是网站说的是),那么问题是什么?如果只是“我要发布B(而不是GPL)时是否必须分发A(GPL)”,那么这是一个重复的问题
Paul,

2
@Paul我的假设以及其他所有人的假设都是Dart程序实际上是GPL制定的。

0

基本问题是:

网页上包含的javascript(例如,通过脚本标签引用)是否算作“传达” GPLed作品?

如果是这样,则必须以首选形式提供源代码以用于修改代码,如果不是这样的话,则必须这样做。在这种情况下,首选形式是用于生成javascript的原始Dart源代码。

我在FSF网站上找不到此问题的明确答案,但Stallman的文章“ The Javascript Trap”似乎表明他确实认为它在传达,因此您必须提供原始的Dart源代码。请参阅他关于允许精简版本的注释,这些精简版本不包含许可证文本,但仍包含在许可证中。

另请参阅有关javascript和模板的此FAQ,以了解允许模板在不经过GPL的情况下使用GPL的javascript的异常。

知道您要执行的操作是否符合许可证的绝对最佳方法是询问代码的版权所有者,因为只有他们才有权执行许可证。他们可能对许可有不同的解释,并愿意添加例外以使其解释明确。


实际上,这不是问题。如果您仔细阅读了该问题,则OP会假设您需要分发JavaScript。在这个问题上只有其他人质疑过这种解释。问题是他是否还必须分发Dart代码。
温斯顿·埃韦特2012年

@WinstonEwert当我说“源代码”时,是指用于生成javascript的原始Dart源文件。我将更新我的答案以使其更清楚。
Craig
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.