Как GPL работает в отношении таких языков, как Dart, которые компилируются в другие языки?

11

Язык Google Dart не поддерживается никакими веб-браузерами, кроме специальной сборки Chromium, известной как Dartium. Чтобы использовать Dart для производственного кода, вам нужно запустить его через компилятор / переводчик Dart-> JavaScript, а затем использовать выведенный JavaScript в вашем веб-приложении.

Поскольку JavaScript является интерпретируемым языком, каждый, кто получает «двоичный файл» (Aka, файл .js), также получает исходный код.

Теперь GNU General Public License v3.0 гласит, что:

«« Исходный код »для работы означает предпочтительную форму работы для внесения в нее изменений».

Что подразумевает, что исходный код Dart в дополнение к коду JavaScript также должен быть предоставлен конечному пользователю. Означает ли это, что любые веб-приложения, написанные на Dart, должны также предоставлять исходный код Dart всем посетителям их веб-сайта, даже если копия исходного кода уже была предоставлена ​​в удобочитаемой / доступной для записи / изменяемой форме?

Питер-W
источник
3
Я бы на самом деле не назвал файл .js «исходным кодом» так же, как обфусцированный js - «исходный код». Конечно, это все еще интерпретируется, но ни в коем случае не является исходным кодом. Это больше похоже на вывод HTML скрипта PHP. Не уверен, как это работает с точки зрения лицензирования, однако.
Бен Брока
Когда вы говорите «Код производства», вы имеете в виду «Productized»? Внутреннее использование не требует выпуска исходного кода. Код Dart, который вы используете, основан на чужом лицензионном коде GPL (или другом)? Или это весь оригинальный код, разработанный вами? Ответ действительно зависит от этих деталей
Пол
1
Вам не нужно предоставлять исходный код посетителям, если вы запускаете приложение под GPL. Вы должны предоставить исходный код, только если распространяете приложение. (Если это был AGPL, то вы должны были предоставить источник: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Если приложение работает на общедоступном веб-сервере, то не распространяется ли код на каждого посетителя? Даже если он загружен только браузером во временное местоположение перед выполнением.
Peter-W
@ Peter-W Я бы сказал, что аргумент технический, а не четкий. То, что браузер загружает javascript, является своего рода деталями реализации; большинство пользователей не знают, что они что-то «распространяли», тогда как большинство пользователей понимают, что получение компакт-диска или загрузка материала считается «распространением». В этом случае механизм реализации является дистрибутивом (для браузера и временным), что делает всю проблему неясной для меня. РЕДАКТИРОВАТЬ : также, в некотором смысле, JS-код "байт-код" с точки зрения Dart-кодера, не так ли?
Андрес Ф.

Ответы:

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 является примером. Поскольку GCC является GPL, и я использую его для компиляции программы с «закрытым исходным кодом», требуется ли для этого исходная версия? Я верю, что то же самое будет верно для любого "компилятора" GPL
Пол
3
Этот ответ неверен. Даже если код Dart распространяется по лицензии GPL, вам не нужно предоставлять исходный код Dart, если вы не распространяете приложение. Запуск приложения GPL на сервере не требует предоставления исходного кода для этого приложения. Вот почему есть еще одна лицензия с именем AGPL . Для этой конкретной цели.
JCasso
2
@JCasso, это было бы верно, если бы код выполнялся на сервере, но в случае с Dart результирующий объектный код представляет собой JavaScript, который в большинстве случаев распространяется на клиента. Очевидно, что если вы делаете что-то действительно странное, например, запускаете серверную часть JavaScript, то это не считается распространением.
Дирк Холсоппл
3
@JCasso, который применяется только к серверному коду. С этой же страницы: JavaScript Drupal, включая копию jQuery, которая входит в Drupal, также находится под лицензией GPL, поэтому любой Javascript, который взаимодействует с JavaScript Drupal в браузере, также должен быть под лицензией GPL или GPL-совместимой.
Дирк Холсоппл
2

Прежде всего, речь идет о GPL, а не AGPL.

Если вы не распространяете приложение под GPL, если вы запускаете его на сервере, вам не нужно предоставлять исходный код . Для этого есть AGPL. GPL это все о распределении.

Из Drupal FAQ:

Нужно ли давать код моего веб-сайта всем, кто посещает его?

Нет. 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

JCasso
источник
2
Но, учитывая, что это Dart, который скомпилирован в Javascript, а затем выполнен как на cilent, это применимо?
Уинстон Эверт
1
GPL ясно об этом. Если я дам вам компакт-диск с Ubuntu, я должен предоставить вам способ получить исходный код. Если я помещаю файл ubuntu.iso на файловый сервер, я также должен предоставить ссылку для скачивания (или что-то в этом роде). Это называется распределением. Если вы распространяете его, вы должны предоставить исходный код. Но наличие онлайн-приложения (на сервере) никогда не считается "распространением".
Дж.Кассо
3
Дело в том, что код запускается в браузере, а не на сервере. Ваш ответ имеет смысл только если мы смотрим на код, который выполняется на сервере. Но мы не. Мы смотрим на код, который работает на клиентских компьютерах. Если код был выполнен на сервере, вы были бы правы, это не распространение. Но поскольку код загружается браузером и запускается, он распространяется, и ваш ответ неуважительный.
Уинстон Эверт
2
На самом деле, я думаю, что очень важно, какой процессор его обрабатывает. Если я запускаю ваш код на моем процессоре, то по необходимости вы передаете мне свой код. По сути, это точно так же, как если бы я скачал программу и запустил ее. Этот вопрос обсуждался ранее: 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
Речь идет не о компиляторе Dart, который является GPL (который, кстати, не имеет отношения к выводу программы (компилятора)), а о программе Dart, которая является GPL.
2
@delnan Я не читал вопрос так же, как ты. 1) Смотрите мою первую ссылку, Дарт это BSD. 2) Если бы программа Dara была под GPL, он бы не задавал вопрос. Я прочитал вопрос, поскольку он хотел знать, должен ли он также выпустить свой исходный код Dart. Вы на самом деле читали мой ответ?
Пол
2
Ну, вы, кажется, единственный, кто читает это так. Хотя OP явно не упоминает, что рассматриваемая Dart-программа является GPL, на него ничего не намекает, если предположить, что Dart-компилятор тоже GPL, поэтому я не хочу предполагать, что он так мало исследовал.
Извините, так что протяните это ... Итак, если ни одна из программ Dart не является GPL, а Dart не является BSD (на самом деле это так, или, по крайней мере, сайт говорит, что это так), то в чем вопрос? Если речь идет только о том, «Должен ли я распространять A (GPL'd), когда я хочу выпустить B (не GPL)», то это дублирующий вопрос
Пол
2
@Paul Мое предположение, как и все остальные, состоит в том, что программа Dart фактически GPL'd.
0

Основной вопрос:

Включение javascript на веб-страницу (например, ссылки через тег скрипта) считается "передачей" работы под GPL?

Если это так, вы должны сделать исходный код доступным в предпочтительной форме для изменения кода, если нет, то вы этого не сделаете. В этом случае предпочтительной формой является исходный код Dart, используемый для генерации JavaScript.

Я не могу найти однозначного ответа на этот вопрос на сайте FSF, но эссе Столлмана «Ловушка Javascript», похоже, указывает на то, что он считает, что он переносит, и поэтому вам придется сделать доступным исходный код Dart. См. Его примечание о разрешении минимизированных версий, которые не включают текст лицензии, но все еще охватываются лицензией.

См. Также этот FAQ о javascript и шаблонах для исключения, которое позволило бы шаблонам использовать JavaScript под GPL без GPL.

Абсолютно лучший способ узнать, соответствует ли то, что вы хотите сделать, лицензии, - это спросить у владельца авторских прав на код, потому что только они имеют право применять лицензию. Они могли интерпретировать лицензию по-разному и хотели бы добавить исключение, чтобы сделать их интерпретацию явной.

Craig
источник
На самом деле, это не вопрос. Если вы внимательно прочитаете вопрос, ФП предполагает, что вам потребуется распространить javascript. Это только другие по этому вопросу, кто подверг сомнению эту интерпретацию. Вопрос в том, должен ли он также распространять код Дартса.
Уинстон Эверт
@WinstonEwert Когда я говорю «исходный код», я имею в виду оригинальные исходные файлы Dart, используемые для генерации JavaScript. Я уточню свой ответ, чтобы прояснить это.
Крейг,