Jak działa GPL w odniesieniu do języków takich jak Dart, które kompilują się w innych językach?

11

Język Google Dart nie jest obsługiwany przez żadną przeglądarkę internetową inną niż specjalna wersja Chromium znana jako Dartium. Aby użyć Dart do kodu produkcyjnego, musisz uruchomić go za pomocą kompilatora / translatora Dart-> JavaScript, a następnie użyć wyjściowego JavaScript w swojej aplikacji internetowej.

Ponieważ JavaScript jest językiem interpretowanym, każdy, kto otrzymuje „binarny” (Aka, plik .js), również otrzymał kod źródłowy.

Obecnie GNU General Public License v3.0 stwierdza, że:

„„ Kod źródłowy ”utworu oznacza preferowaną formę utworu do wprowadzania modyfikacji.”

Co oznaczałoby, że oryginalny kod Dart oprócz kodu JavaScript musi być również dostarczony użytkownikowi końcowemu. Czy to oznacza, że ​​wszelkie aplikacje internetowe napisane w Dart muszą również dostarczać oryginalny kod Dart wszystkim odwiedzającym ich witrynę, nawet jeśli kopia kodu źródłowego została już dostarczona w postaci czytelnej / zapisywalnej / modyfikowalnej przez człowieka?

Peter-W
źródło
3
Tak naprawdę nie nazwałbym pliku .js „kodem źródłowym” tak samo, jak zaciemniony js to „kod źródłowy”. Jasne, wciąż jest interpretowane, ale w żadnym wypadku nie jest to kod źródłowy. To bardziej przypomina wyjście HTML skryptu PHP. Nie jestem jednak pewien, jak działa licencja.
Ben Brocka,
Kiedy mówisz „Kod produkcji”, masz na myśli „Produkt”? Użycie wewnętrzne nie wymaga wydania kodu źródłowego. Czy kod Dart, którego używasz, jest oparty na czyimś licencjonowanym kodzie GPL (lub innym)? Czy jest to cały oryginalny kod opracowany przez Ciebie? Odpowiedź naprawdę zależy od tych szczegółów
Paul
1
Nie musisz podawać kodu źródłowego użytkownikom, jeśli uruchamiasz aplikację GPL. Musisz podać kod źródłowy tylko wtedy, gdy rozpowszechniasz aplikację. (Jeśli był to AGPL, musiałeś podać źródło: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Zakładając, że aplikacja działa na publicznym serwerze WWW, to czy kod nie jest „dystrybuowany” do każdego użytkownika? Nawet jeśli jest on pobierany tylko przez przeglądarkę do tymczasowej lokalizacji przed wykonaniem.
Peter-W
@ Peter-W Powiedziałbym, że argument jest techniczny i nie jest jednoznaczny. To, że przeglądarka pobiera javascript, jest swego rodzaju szczegółem implementacji; większość użytkowników nie zdaje sobie sprawy z tego, że została „rozpowszechniona”, podczas gdy większość użytkowników zrozumiałaby, że dostanie płytę CD lub pobranie rzeczy liczy się jako „dystrybucja”. W tym przypadku mechanizmem implementacji jest dystrybucja (do przeglądarki i tymczasowa), co sprawia, że ​​cały problem jest dla mnie niejasny. EDYCJA : w pewnym sensie kod js jest „bajtecode” z punktu widzenia kodera Dart, prawda?
Andres F.,

Odpowiedzi:

9

Tak, jeśli kod jest objęty GPL i dostarczasz wygenerowany kod JavaScript, musisz również podać oryginalny kod Dart. Zazwyczaj robi się to za pomocą linku do pobrania kodu źródłowego z Twojej witryny, ale możesz również osadzić go w komentarzu lub czegoś podobnego.

Myślę, że najłatwiejszym sposobem na przestrzeganie GPL w tym przypadku jest użycie opcji d do dystrybucji źródła

d) Prześlij kod obiektowy, oferując dostęp z wyznaczonego miejsca (bezpłatnie lub za opłatą) i oferuj równoważny dostęp do odpowiedniego źródła w ten sam sposób przez to samo miejsce bez dodatkowych opłat. Nie musisz wymagać od odbiorców kopiowania odpowiedniego źródła wraz z kodem obiektowym. Jeśli miejscem kopiowania kodu obiektowego jest serwer sieciowy, Odpowiednie Źródło może znajdować się na innym serwerze (obsługiwanym przez Ciebie lub osobę trzecią), który obsługuje równoważne funkcje kopiowania, pod warunkiem, że zachowujesz jasne instrukcje obok kodu obiektowego z informacją, gdzie należy znajdź odpowiednie źródło. Niezależnie od tego, na którym serwerze znajduje się odpowiednie źródło, pozostajesz zobowiązany do zapewnienia, aby był on dostępny tak długo, jak to konieczne, aby spełnić te wymagania.

Zasadniczo robisz to, umieszczając plik JS na swojej stronie

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
źródło
2
Proszę przeczytać moją odpowiedź. Zwróć uwagę na uwagi, że GPL nie wymaga wydania oryginalnego źródła, generowane tylko w tym przypadku. W takim przypadku GPL nie wymagałoby od niego dystrybucji, więc mechanizm dystrybucji nie ma znaczenia. Jak powiedziałem, inne licencje mają inne reguły.
Paul
1
Myślę, że GCC jest przykładem. Skoro GCC jest GPL i używam go do kompilacji programu „zamkniętego źródła”, czy wymaga to wydania oryginalnego źródła? Wierzę, że to samo dotyczy każdego „kompilatora” GPL
Paul
3
Ta odpowiedź jest zła. Nawet jeśli kod Dart jest licencjonowany na licencji GPL, nie musisz podawać kodu źródłowego Dart, chyba że rozpowszechniasz aplikację. Uruchomienie aplikacji GPL na serwerze nie wymaga podania kodu źródłowego dla tej aplikacji. Dlatego istnieje kolejna licencja o nazwie AGPL . W tym konkretnym celu.
JCasso
2
@JCasso byłoby to prawdą, gdyby kod działał na serwerze, ale w przypadku Dart wynikowym kodem obiektowym jest JavaScript, który w większości przypadków jest dystrybuowany do klienta. Oczywiście, jeśli robisz coś naprawdę dziwnego, na przykład uruchamiając JavaScript po stronie serwera, nie liczy się to jako dystrybucja.
Dirk Holsopple
3
@JCasso, który dotyczy tylko kodu po stronie serwera. Z tej samej strony: JavaScript Drupala, w tym kopia jQuery, która jest dołączona do Drupala, również jest objęta GPL, więc każdy JavaScript, który wchodzi w interakcję z JavaScriptem Drupala w przeglądarce, musi również być objęty licencją GPL lub zgodną z GPL.
Dirk Holsopple
2

Przede wszystkim mówimy o GPL, a nie AGPL.

Jeśli nie rozpowszechnisz aplikacji GPL, jeśli uruchomisz ją na serwerze, nie musisz podawać kodu źródłowego . Jest na to AGPL. W GPL chodzi o dystrybucję.

Z Drupal FAQ:

Czy muszę podawać kod mojej witryny każdemu, kto ją odwiedza?

Nie. GPL nie uważa, że ​​przeglądanie witryny można uznać za „rozpowszechnianie”, dlatego nie jest wymagane udostępnianie kodu działającego na serwerze. Http://drupal.org/licensing/faq/#q6

Pamiętaj, że Drupal jest licencjonowany na licencji GPL i zawiera pliki js (dużo).

Z GNU:

Celem GNU Affero GPL jest zapobieganie problemowi, który dotyka twórców darmowych programów, często używanych na serwerach.

Załóżmy, że tworzysz i wypuszczasz darmowy program na zwykłej licencji GNU GPL. Jeśli programista D zmodyfikuje program i wyda go, GPL wymaga, aby rozpowszechniał również swoją wersję na GPL. Tak więc, jeśli otrzymasz kopię jego wersji, możesz włączyć niektóre lub wszystkie jego zmiany do własnej wersji.

Załóżmy jednak, że program jest użyteczny głównie na serwerach. Kiedy D modyfikuje program, może bardzo prawdopodobne, że uruchomi go na własnym serwerze i nigdy nie wyda kopii. Wtedy nigdy nie dostaniesz kopii kodu źródłowego jego wersji, więc nigdy nie będziesz mieć szansy na włączenie jego zmian do swojej wersji. Wynik może Ci się nie podobać.

Korzystanie z GNU Affero GPL pozwala uniknąć tego wyniku. Jeśli D uruchamia swoją wersję na serwerze, z którego każdy może korzystać, Ty również możesz go użyć. Zakładając, że spełnił wymaganie licencyjne, aby użytkownicy serwera mogli pobrać kod źródłowy jego wersji, możesz to zrobić, a następnie możesz włączyć jego zmiany do swojej wersji. (Jeśli nie zastosował się do tego, twój prawnik narzeka na niego.) Źródło: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
źródło
2
Ale biorąc pod uwagę, że jest to Dart, który jest kompilowany do Javascript, a następnie wykonywany jak na cilent, czy to się dzieje?
Winston Ewert
1
GPL nie ma co do tego wątpliwości. Jeśli dam ci dysk CD z Ubuntu, muszę zapewnić ci sposób na uzyskanie kodu źródłowego. Jeśli umieszczę ubuntu.iso na serwerze plików, muszę także podać link do pobrania (lub coś w tym rodzaju). Nazywa się to dystrybucją. Jeśli go rozpowszechniasz, musisz podać kod źródłowy. Ale posiadanie aplikacji online (na serwerze) nigdy nie jest liczone jako „dystrybucja”.
JCasso
3
chodzi o to, że kod działa w przeglądarce, a nie na serwerze. Twoja odpowiedź ma sens tylko wtedy, gdy patrzymy na kod działający na serwerze. Ale my nie jesteśmy. Patrzymy na kod, który działa na komputerach klienckich. Jeśli kod został wykonany na serwerze, miałbyś rację, to nie jest dystrybucja. Ale ponieważ kod jest pobierany przez przeglądarkę i uruchamiany, jest to dystrybucja, a twoja odpowiedź nie ma znaczenia.
Winston Ewert
2
Właściwie myślę, że bardzo ważne jest, który procesor go przetwarza. Jeśli uruchomię twój kod na moim CPU, to z konieczności rozprowadzasz go do mnie. Do wszystkich celów i celów jest dokładnie tak samo, jak gdybym pobrał program i uruchomił go. Pytanie zostało omówione wcześniej: stackoverflow.com/questions/1239470/... , programmers.stackexchange.com/questions/62869/... .
Winston Ewert
2
Zobacz także stronę AGPL, do której linkujesz. Wyraźnie omawia kod wykonywany na serwerach, a nie kod wykonywany na klientach. Gdyby autor pomyślał, że GPL nie ma zastosowania do kodu wykonywanego w javascript, wspomniałby o tym w swojej dyskusji.
Winston Ewert,
1

Zasadniczo zależy to od licencji. W twoim przypadku Dart jest złym przykładem, ponieważ jest BSD i wydaje się, że GNU 3.0 obejmuje przypadek, o którym mówisz. Jako osoba niebędąca prawnikiem interpretowałbym ten cytat jako „Wygenerowany kod nie jest konkretnie objęty”

Strona główna Dart Odnosi się do: Licencja BSD

Więc pytanie o GPL jest dyskusyjne

Ponadto: Licencja GNU 3.0

Czy jest jakiś sposób, że mogę GPL uzyskać wyniki uzyskiwane przez ludzi z mojego programu? Na przykład, jeśli mój program służy do opracowywania projektów sprzętowych, czy mogę wymagać, aby projekty te były bezpłatne? (#GPLOutput)

Zasadniczo jest to prawnie niemożliwe; prawo autorskie nie daje Ci prawa głosu w zakresie wykorzystania danych uzyskanych przez ludzi z ich danych za pomocą Twojego programu. Jeśli użytkownik korzysta z programu do wprowadzania lub konwertowania własnych danych, prawa autorskie do danych wyjściowych należą do niego, a nie do Ciebie. Mówiąc bardziej ogólnie, gdy program tłumaczy swoje dane wejściowe na inną formę, status praw autorskich wyjścia dziedziczy status danych wejściowych, z których został wygenerowany.

Zatem jedynym sposobem, w jaki możesz wypowiedzieć się na temat wykorzystania danych wyjściowych, jest skopiowanie (mniej więcej) znacznej części danych wyjściowych z tekstu w programie. Na przykład część danych wyjściowych Bison (patrz wyżej) byłaby objęta GNU GPL, gdybyśmy nie zrobili wyjątku w tym konkretnym przypadku.

Możesz sztucznie zmusić program do skopiowania określonego tekstu na jego wynik, nawet jeśli nie ma technicznych powodów. Ale jeśli skopiowany tekst nie ma praktycznego celu, użytkownik może po prostu usunąć tekst z pliku wyjściowego i użyć tylko reszty. Wówczas nie musiałby przestrzegać warunków redystrybucji skopiowanego tekstu.

Paweł
źródło
3
Pytanie nie dotyczy kompilatora Dart, który jest GPL (który BTW nie miałby znaczenia dla wyjścia programu (kompilatora)), ale programu Dart, który jest GPL.
2
@delnan Nie przeczytałem pytania tak samo jak ty. 1) Zobacz mój pierwszy link, Dart to BSD. 2) Gdyby program Dara był na licencji GPL, nie zadałby tego pytania. Przeczytałem to pytanie, gdy chciał wiedzieć, czy jest zobowiązany do wydania kodu źródłowego Dart. Czy rzeczywiście przeczytałeś moją odpowiedź?
Paul
2
Wygląda na to, że jesteś jedynym, który tak to czyta. Podczas gdy OP nie wspomina wprost, że omawiany program Dart jest objęty GPL, nic nie wskazuje na to, że kompilator Dart jest także GPL, więc nie chcę zakładać, że przeprowadził tak mało badań.
Przepraszam, więc rozciągnij to ... Więc jeśli żaden program Dart nie jest GPL, a Dart to BSD (tak naprawdę jest, a przynajmniej strona twierdzi, że tak jest), to jakie jest pytanie? Jeśli chodzi tylko o „Czy muszę rozpowszechniać A (GPL), kiedy chcę wydać B (nie GPL)”, to jest to duplikat pytanie
Paul
2
@Paul Moje założenie i założenie wszystkich innych jest takie, że program Dart jest w rzeczywistości GPL.
0

Podstawowe pytanie brzmi:

Czy umieszczenie javascript na stronie internetowej (np. Odwoływanie się przez tag skryptu) liczy się jako „Przenoszenie” pracy GPL?

Jeśli tak, musisz udostępnić źródło w preferowanej formie modyfikacji kodu, jeśli nie, to nie. W tym przypadku preferowaną formą jest oryginalny kod źródłowy Dart używany do generowania javascript.

Nie mogę znaleźć jednoznacznej odpowiedzi na to pytanie na stronie FSF, ale esej Stallmana „The Javascript Trap” wydaje się wskazywać, że uważa to za przekazanie i jako taki musiałbyś udostępnić oryginalny kod źródłowy Dart. Zobacz jego notatkę na temat dopuszczania wersji zminimalizowanych, które nie zawierają tekstu licencji, ale nadal są objęte licencją.

Zapoznaj się również z często zadawanymi pytaniami na temat javascript i szablonów, aby uzyskać wyjątek, który zezwalałby szablonom na używanie javascript w GPL bez korzystania z GPL.

Absolutnie najlepszym sposobem, aby dowiedzieć się, czy chcesz zachować zgodność z licencją, jest zwrócenie się do właściciela praw autorskich o kod, ponieważ tylko oni mają prawo do egzekwowania licencji. Mogli interpretować licencję inaczej i byli gotowi dodać wyjątek, aby wyjaśnić swoją interpretację.

Craig
źródło
Właściwie to nie jest pytanie. Jeśli dokładnie przeczytasz pytanie, PO zakłada, że ​​będziesz musiał rozpowszechniać javascript. Tylko inni w tym pytaniu zakwestionowali tę interpretację. Pytanie brzmi, czy musi on również rozpowszechniać kod Dart.
Winston Ewert,
@WinstonEwert Kiedy mówię „kod źródłowy”, mam na myśli oryginalne pliki źródłowe Dart używane do generowania javascript. Zaktualizuję moją odpowiedź, aby to wyjaśnić.
Craig,