Як GPL працює щодо таких мов, як Dart, які компілюються на інші мови?


11

Мова Dart Google не підтримується жодними веб-браузерами, крім спеціальної збірки Chromium, відомої як Dartium. Щоб використовувати Dart для виробничого коду, потрібно запустити його через компілятор / перекладач Dart-> JavaScript, а потім використати виведений JavaScript у веб-програмі.

Оскільки JavaScript є інтерпретованою мовою, кожен, хто отримує "двійковий" (Aka, файл .js), також отримав вихідний код.

Тепер у GNU General Public License v3.0 зазначено, що:

"Вихідний код для твору означає бажану форму твору для внесення змін до нього."

Що означає, що оригінальний код Dart на додаток до коду JavaScript також повинен бути наданий кінцевому користувачеві. Чи означає це, що будь-які веб-додатки, написані на Dart, також повинні надавати оригінальний код Dart всім відвідувачам свого веб-сайту, навіть якщо копія вихідного коду вже була надана у формі, що читається / записується / змінюється людиною?


3
Я б насправді не називав .js файл "вихідним кодом" більше, ніж затеблений js - "вихідний код". Звичайно, це все ще інтерпретується, але це жодним чином не вихідний код. Це більше схоже на вихід HTML у сценарій PHP. Не впевнений, як це працює на основі ліцензування.
Бен Брокка

Коли ви говорите "Виробничий кодекс", ви маєте на увазі "Виробництво"? Внутрішнє використання не потребує звільнення вихідного коду. Чи використовується код Dart, який базується на чужому ліцензованому коді GPL (чи іншому)? Або це весь оригінальний код, розроблений вами? Відповідь справді залежить від цих деталей
Павло

1
Вам не потрібно надавати вихідний код відвідувачам, якщо ви запускаєте програму GPL'd. Ви маєте надати вихідний код, лише якщо ви поширюєте програму. (Якщо це було AGPL'd, тоді вам потрібно було надати джерело: gnu.org/licenses/why-affero-gpl.html )
JCasso

1
Якщо припустити, що програма запущена на загальнодоступній веб-сторінці, чи не розповсюджується код кожному відвідувачу? Навіть якщо він завантажений лише браузером у тимчасове місце, перш ніж його виконати.
Пітер-Ш

@ Peter-W Я б сказав, що аргумент технічний і не чіткий. Що браузер завантажує javascript - це детальна інформація про реалізацію; більшість користувачів не знають, що їм щось було "розповсюджено", тоді як більшість користувачів розуміють отримання компакт-диска або завантаження матеріалів як "розповсюдження". У цьому випадку механізм реалізації - це розподіл (до браузера, і тимчасовий), що робить всю проблему для мене незрозумілою. EDIT : також таким чином js-код є "байт-кодом" з точки зору кодера Dart, чи не так?
Андрес Ф.

Відповіді:


9

Так, якщо код знаходиться під GPL та ви доставляєте виведений JavaScript, ви також повинні надати оригінальний код Dart. Зазвичай це робиться за допомогою посилання для завантаження вихідного коду з вашого сайту, але ви також можете вбудувати його в коментар чи щось подібне.

Я думаю, що найпростіший спосіб дотримуватися GPL в цьому випадку - використовувати варіант 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'd на сервері не вимагає надання вихідного коду для цієї програми. Саме тому існує ще одна ліцензія на ім'я 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:

Чи повинен я надати код свого веб-сайту тому, хто його відвідує?

Ні. 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, а потім виконується як на чиленті, чи це стосується?
Вінстон Еверт

1
GPL це зрозуміло. Якщо я дам вам компакт-диск ubuntu, я повинен надати вам спосіб отримати вихідний код. Якщо я поставлю ubuntu.iso на сервер файлів, я також повинен надати посилання для завантаження (або щось подібне). Це називається розподілом. Якщо ви поширюєте його, вам слід надати вихідний код. Але наявність онлайн-програми (на сервері) ніколи не вважається "розповсюдженням".
JCasso

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 (див. Вище) покривалась би GPL GNU, якби ми не зробили виняток у цьому конкретному випадку.

Ви можете штучно зробити програму копіювати певний текст у його вихід, навіть якщо для цього немає технічних причин. Але якщо цей скопійований текст не виконує жодних практичних цілей, користувач може просто видалити цей текст із виводу та використовувати лише інше. Тоді він не повинен був би дотримуватися умов перерозподілу скопійованого тексту.


3
Питання стосується не компілятора Dart, який є GPL (що BTW не має значення для виходу програми (компілятора)), а про програму Dart, яка є GPL'd.

2
@delnan Я не читав питання так само, як ти. 1) Дивіться моє перше посилання, Дарт - BSD. 2) Якщо програма Dara була GPL'd, він би не задавав питання. Я читав питання, як він хоче знати, чи потрібно йому також випустити свій вихідний код Dart. Ви насправді читали мою відповідь?
Пол

2
Що ж, ти, здається, єдиний, хто читав це так. Хоча ОП прямо не згадує, що програма Dart, про яку йдеться, GPL'd, нічого не натякає на нього, припускаючи, що компілятор Dart також є GPL, тому я не бажаю вважати, що він провів так мало досліджень.

Вибачте, так розтягніть це ... Тож якщо ні програма Dart не є GPL, а Dart є BSD (насправді це так, або, принаймні, сайт каже, що так є), то в чому питання? Якщо мова йде лише про те, "чи повинен я поширювати A (GPL'd), коли я хочу випустити B (не GPL)", то це питання, що повторюється
Павло,

2
@Paul Моє припущення, і всі інші припущення, програма Dart насправді GPL'd.

0

Основне питання:

Чи враховує включення javascript на веб-сторінці (наприклад, посилання через тег сценарію) як "передачу" роботи GPLed?

Якщо це так, ви повинні зробити джерело доступним у бажаній формі для зміни коду, якщо ні - ні. У цьому випадку кращою формою є оригінальний вихідний код Dart, який використовується для створення javascript.

Я не можу знайти чітку відповідь на це запитання на веб-сайті FSF, але нарис Сталлмана "Пастка Javascript", схоже, вказує на те, що він вважає це Перекладом, і як такий вам доведеться зробити доступним оригінальний вихідний код Dart. Див. Його примітку щодо дозволу мінімізованих версій, які не містять текст ліцензії, але все ще охоплені ліцензією.

Дивіться також цей FAQ про javascript та шаблони для винятку, який дозволить шаблонам використовувати GPLed javascript без GPLed.

Абсолютний найкращий спосіб дізнатися, чи відповідає те, що ви хочете зробити, - це запитати у власника авторського права коду, тому що лише вони мають право примусово застосовувати ліцензію. Вони, можливо, трактували ліцензію по-різному і готові додати виняток, щоб зробити їх тлумачення явним.


Власне, це не питання. Якщо ви уважно читаєте питання, ОП передбачає, що вам потрібно буде поширити javascript. Єдині інші з цього питання, хто поставив під сумнів цю інтерпретацію. Питання в тому, чи повинен він також поширювати код Дартса.
Вінстон Еверт

@WinstonEwert Коли я кажу "вихідний код", я маю на увазі оригінальні вихідні файли Dart, що використовуються для створення JavaScript. Я оновлю свою відповідь, щоб зробити це зрозумілим.
Крейг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.