W jaki sposób reguła łączenia statycznego i dynamicznego GPL ma zastosowanie do języków interpretowanych?

19

W moim rozumieniu GPL zabrania łączenia statycznego z kodu innego niż GPL do kodu GPL, ale zezwala na dynamiczne łączenie z kodu innego niż GPL do kodu GPL. Więc co to jest, gdy dany kod nie jest w ogóle połączony, ponieważ kod jest napisany w języku interpretowanym (np. Perl)?

Wydaje się, że korzystanie z reguły byłoby zbyt łatwe, jeśli uznano by to za dynamiczne łączenie, ale z drugiej strony wydawałoby się niemożliwe, aby legalnie odwoływać się do kodu GPL z kodu innego niż GPL, gdyby był uważany za statyczny! Języki skompilowane mają przynajmniej rozróżnienie między łączeniem statycznym i dynamicznym, ale kiedy całe „łączenie” uruchamia tylko skrypty, nie można powiedzieć, co to jest bez wyraźnej licencji!

Czy też moje rozumienie tego problemu jest nieprawidłowe, co sprawia, że ​​pytanie jest dyskusyjne? Słyszałem również o „wyjątku klasy”, który obejmuje dynamiczne łączenie; czy to nie jest część GPL, ale coś, co można do niej dodać, więc dynamiczne linkowanie jest dozwolone tylko wtedy, gdy licencja zawiera ten wyjątek?

ekolis
źródło
2
@delnan lgpl! = gpl
Johann
softwareengineering.stackexchange.com/questions/87446/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

16

Jeśli chodzi o konkretne pytanie dotyczące tłumaczonych języków, FAQ GPL jest bardzo jasne :

Zinterpretowany program dla tłumacza to tylko dane; licencja wolnego oprogramowania, taka jak GPL, oparta na prawie autorskim, nie może ograniczać danych, na których używasz tłumacza. Możesz uruchomić go na dowolnych danych (zinterpretowanym programie), w dowolny sposób i nie ma żadnych wymagań dotyczących licencjonowania tych danych nikomu.

Co do ogólnego pytania na temat łączenia dynamicznego vs. statycznego. Po pierwsze, pogląd FSF i Stallmana jest taki, że nie ma znaczenia, czy łączenie jest statyczne czy dynamiczne, GPL zaraża w obu kierunkach. Z FSF GPL FAQ:

Jeśli program dynamicznie łączy wtyczki i wykonuje wzajemne wywołania funkcji i współużytkuje struktury danych, uważamy, że tworzą one pojedynczy program, który należy traktować jako rozszerzenie zarówno programu głównego, jak i wtyczek. Oznacza to, że połączenie wtyczki objętej GPL z niewolnym programem głównym naruszy GPL.

i

Powiązanie [nazwa twojego programu] statycznie lub dynamicznie z innymi modułami stanowi połączoną pracę opartą na [nazwa twojego programu]. Zatem warunki Powszechnej Licencji Publicznej GNU obejmują całą kombinację

Jest to jednak wątpliwe z prawnego punktu widzenia. W jedynym przypadku, który faktycznie trafił do sądu w sprawie dynamicznego linkowania - Galoob przeciwko Nintendo - Sąd Apelacyjny orzekł, że dzieło pochodne „musi zawierać część dzieła chronionego prawem autorskim w jakiejś formie” . Nie jest tak w przypadku dynamicznego linkowania.

W każdym razie, niezależnie od tego, czy dynamiczne linkowanie rzeczywiście infekuje, czy nie, istnieje obejście. Jest używany na przykład przez Nvidię do dostarczania sterowników binarnych dla Linuksa. Tworzysz (L) opakowanie GPL, ale jako autor możesz dodać specjalny wyjątek, aby połączyć się z określonym zamkniętym źródłem. Vide FSF GPL FAQ .

vartec
źródło
Jedną z natury dzieła pochodnego jest to, że nie jest możliwe jednoznaczne oddzielenie dzieła pierwotnego właściciela praw autorskich. Jeśli Bob Foo()jest statycznie powiązany z telefonem Joe Bar(), do którego właściciela praw autorskich należy CALLprzypisać instrukcje między nimi? Taka interakcja byłaby wystarczająca, aby stanowić „dzieło pochodne”. Jeśli jednak praca Joe pozostaje całkowicie w jednym pliku, a praca Boba pozostaje całkowicie w innym, samo pojawienie się tych plików w różnych katalogach na tym samym dysku stanowi agregację, a nie wyprowadzenie.
supercat
2
@thepaul: istnieje już precedens prawny, który stanowi, że co najmniej część utworu chronionego prawem autorskim musi być zawarta w utworze, aby stanowić utwór pochodny. Wierzenia Stallmana często mają bardzo niewiele podstaw w prawdziwym prawie.
vartec
1
@thepaul: z jednej strony masz praktykę prawną, z której korzysta firma o wartości 9 miliardów dolarów, z drugiej strony facet, który lubi nosić czapkę z blachy. Twierdzisz, że później jest bardziej wiarygodny i masz całkowitą rację.
vartec
1
Cytujesz niewłaściwą część FAQ GPL jest bardzo jasne . Część, którą zacytowałeś dotyczy Jeśli tłumacz języka programowania jest wydany na licencji GPL, czy to oznacza, że ​​programy napisane w celu jego interpretacji muszą być objęte licencjami zgodnymi z GPL? ! Stąd do tłumacza [licencjonowanego na GPL] . Odpowiednią częścią są 2 ostatnie akapity: [...] Innym podobnym i bardzo częstym przypadkiem jest zapewnienie bibliotekom tłumacza, który sam jest interpretowany. Na przykład Perl jest wyposażony w wiele modułów Perla [...]
Chris Wesseling
1
«Interpretowany program jest dla tłumacza tylko danymi; licencja wolnego oprogramowania, taka jak GPL, oparta na prawie autorskim, nie może ograniczać danych, na których używasz tłumacza. Możesz uruchomić go na dowolnych danych (zinterpretowanym programie), w dowolny sposób i nie ma żadnych wymagań dotyczących licencjonowania tych danych nikomu. »Chodzi o uruchamianie programów na dowolnej licencji, nawet interpretera GPL, prawda? Co nie obejmuje tematu używania wtyczki innej niż libre w programie GPL w języku interpretowanym.
tuxayo
4

Uwaga: jest to pytanie prawne. Programmers.SE nie jest forum prawnym, jest forum programowania. Chociaż ludzie tutaj wiedzą sporo o programowaniu, nie wiedzą nic o prawie. Jeśli chcesz zadać pytanie prawne, zadaj je na forum prawnym, na którym są ludzie, którzy faktycznie wiedzą coś na ten temat.


GPL nie mówi nic o łączeniu statycznym lub dynamicznym. To nawet nie mówią nic o łączenie w ogóle . Każdy prawnik lub sędzia, z którym rozmawiałem, mówi, że kwestia statycznych i dynamicznych połączeń jest całkowicie nieistotna.

Prawo autorskie dotyczy kreatywności. Łączenie statyczne vs. dynamiczne to techniczny szczegół implementacji. Niezależnie od tego, czy coś jest statycznie lub dynamicznie powiązane, nie jest aktem twórczym, nie może zmienić statusu praw autorskich utworu.

W swoim pytaniu mówisz o „tłumaczonych językach”. Ale ten termin nie ma sensu: nie ma czegoś takiego jak interpretowany język. Język to abstrakcyjny zestaw reguł i ograniczeń matematycznych. Język nie jest interpretowany ani kompilowany. Po prostu jest język . Termin „język interpretowany” jest nie tylko błędny , ale także nie sensualny . Gdyby angielski był językiem pisanym, byłby to błąd pisowni.

Interpretacja i kompilacja to cechy tłumacza lub kompilatora (duh!), A nie język. Każdy język można zaimplementować za pomocą interpretera, a każdy język można zaimplementować za pomocą kompilatora. Większość języków ma oba. Większość nowoczesnych implementacji językowych łączy nawet oba w jednym silniku wykonawczym.

Implementacja Rubyus Ruby, na przykład, zawiera statyczny kompilator z wyprzedzeniem, który kompiluje kod Ruby do kodu bajtowego Rubinius, interpreter, który interpretuje kod bajtowy Rubinius, oraz dynamiczny kompilator just-in-time, który kompiluje kod bajtowy Rubinius do LLVM IR, które z kolei infrastruktura LLVM kompiluje do natywnego kodu maszynowego. Implementacja Ruby MacRuby wcale nie zawiera interpretera, kompiluje kod Ruby bezpośrednio do LLVM IR, a następnie do natywnego kodu maszynowego.

Z drugiej strony istnieją interpretery dla C lub C ++.

Wszystko to są tylko szczegóły techniczne. Jest to całkowicie nieistotne dla praw autorskich.

Po prostu nie ma sensu, że to, czy ktoś narusza czyjeś prawa autorskie, zależy od tego, czy osoba trzecia zdecyduje się uruchomić program z tłumaczem ustnym lub najpierw go skompilować.

Pytanie brzmi, czy praca pochodzi z innej pracy. Można go dynamicznie łączyć i nadal uzyskiwać, i można go łączyć statycznie i w ogóle nie uzyskiwać.

Jörg W Mittag
źródło
Co z interpretowanymi językami „kodu pośredniego”? Jedną z zasad GPL jest to, że każdy powinien mieć możliwość dostosowania programu do dowolnej rozsądnej maszyny, która ma te same narzędzia językowe, co oryginał. Jeśli ktoś wyda kod źródłowy dla interpretera kodu pośredniego, wraz z garścią kodu formy pośredniej, który może uruchomić, jakie byłyby zasady udostępniania informacji związanych z tym obiektem blob kodu pośredniego? W przeciwieństwie do skompilowanych plików wykonywalnych specyficznych dla maszyny, obiekt blob z kodem pośrednim byłby w pełni przenośny.
supercat
Przepraszam; Chciałem zapytać na stackoverflow.com, i zasugerowało, żebym zapytał tutaj, kiedy użyłem tagu „gpl”! Czy tego rodzaju dyskusja jest tutaj również zabroniona? exec („prawnik killall -9”); : D
ekolis
I tak, zgadzam się, że nie ma sensu, aby szczegóły dotyczące wdrożenia nie miały wpływu na status prawny ponownego wykorzystania; Pomyślałem, że istnieje takie rozróżnienie i poprosiłem o wyjaśnienia!
ekolis
2
@ ekolis: samo w sobie nie jest zbanowane. Tyle, że to nie jest dobry pomysł, aby zadać pytania prawne ludzi, którzy nie wiem nic na temat zagadnień prawnych wiedzą (jak programistów, na przykład), gdy są ludzie, którzy nie wiedzą o kwestiach prawnych (aka prawników) można prosić zamiast. Nie mam nic przeciwko prawnikom, wręcz przeciwnie. Ale nie prosiłbym nikogo o radę algorytmiczną i nie prosiłbym programisty o radę prawną.
Jörg W Mittag
IANAL: Może to być szczegół techniczny, ale nadal robi dużą różnicę, ponieważ zmienia to, co jest dystrybuowane w sposób istotny z prawnego punktu widzenia. Dzięki łączeniu statycznemu budujesz połączone dzieło, które zgodnie z zasadami GPL nie może być rozpowszechniane poza GPL. W przypadku dynamicznego linkowania możesz to również zrobić, np. Jeśli spakujesz biblioteki z oprogramowaniem w pliku ZIP. Ale dzięki dynamicznemu łączeniu możesz dystrybuować go bez bibliotek, a to w 100% twoja praca, nawet jeśli nie działa sama. I nadal możesz oczywiście oferować biblioteki na licencji GPL.
flarn2006
0

Nie mam pojęcia, ile w tym prawdy, IANAL itp .; ale w mojej interpretacji ważne jest to, czy biblioteka, do której prowadzi łącze, jest w jakiejś formie zawarta w „binarnym” (gdzie „binarny”, w przypadku dynamicznych języków programowania, jest tylko kodem źródłowym w postaci, w jakiej jest rozpowszechniany; jest to co robię z definicji FSF „binarnej” w tym kontekście).

Jeśli więc odwołujesz się do bibliotek ze swojego kodu bez włączania ich do swojej dystrybucji, uważam to za ekwiwalent „dynamicznego łączenia”, podczas gdy jeśli połączysz biblioteki z produktem lub skopiujesz i wkleisz części biblioteki do własnego kodu, obowiązywałby scenariusz „łączenia statycznego”. Jest to przynajmniej zgodne z duchem GPL: możesz swobodnie używać (uruchamiać, sprawdzać, odwoływać się) oprogramowania GPL bez ograniczeń, ale jak tylko zaczniesz z niego czerpać (łącząc lub kopiując jego części do swojego własny produkt do dystrybucji), wirus staje się wirusowy, a twoje oprogramowanie musi być również objęte licencją GPL.

tdammers
źródło