Unikaj naruszenia GPL, usuwając bibliotekę z procesu


21

Załóżmy, że istnieje biblioteka licencjonowana na licencji GPL. Chcę go użyć to zamknięty projekt źródłowy. Robię następujące:

  1. Utwórz małą aplikację otoki wokół biblioteki GPL, która nasłuchuje na gnieździe, analizuje wiadomości i wywołuje bibliotekę GPL. Następnie zwraca wyniki.
  2. Opublikuj źródła (zgodne z GPL)
  3. Utwórz klienta dla tego opakowania w mojej głównej aplikacji i nie udostępniaj źródeł.

Wiem, że to powoduje ogromne obciążenie w porównaniu do łączenia statycznego / dynamicznego, ale jestem zainteresowany teoretycznie.


6
Opakowanie, które napiszesz, będzie objęte licencją GPL. W związku z tym program korzystający z opakowania nadal podlegałby warunkom licencji GPL do łączenia itp.
TZHX

4
dlaczego nie najpierw skontaktować się z autorem i sprawdzić, czy możesz go licencjonować na licencji LGPL lub podobnej.
jk.

8
@TZHX Wierzę, że ma na myśli, że opakowanie byłoby osobną aplikacją, która działa jak serwer - jego zastrzeżony kod znajduje się w kliencie
jk.

także kto będzie dystrybuował aplikację zamkniętego źródła? a która wersja GPL jest licencją
jk.

2
@jwenting pytanie wyraźnie mówi, że kończy się proces
jk.

Odpowiedzi:


32

Zgodnie z prawem powiedziałbym, że byłoby OK (ale nie jestem prawnikiem - skonsultuj się z prawnikiem w celu uzyskania porady prawnej).

Moralnie jest to dość naganne. Jeśli nie podoba ci się GPL, wówczas „właściwym” rozwiązaniem nie jest korzystanie z biblioteki GPL.

Edycja : Aby wyjaśnić, niezależnie od sytuacji prawnej GPL w odniesieniu do tego, czy dozwolone jest dynamiczne łączenie, LGPL zostało stworzone specjalnie w celu umożliwienia dynamicznego łączenia w przypadku bibliotek. Wydaje mi się więc jasne, że wybierając GPL zamiast LGPL, autor biblioteki wyraźnie to zrobił, aby zabronić dynamicznego łączenia. Moim zdaniem naganne jest użycie środków technicznych w celu obejścia ograniczeń prawnych, które wyrażają wyraźną intencję autora dla jego kodu.

Dla przypomnienia, osobiście nie jestem fanem GPL (wolę bardziej liberalną licencję, taką jak MIT lub BSD). Jednak jestem wielkim fanem szanowania pracy innych programistów, a jeśli nie chcą, abyś łączył ich bibliotekę z oprogramowaniem o zamkniętym źródle, jest to przywilejem.


12
Nie sądzę, żeby był tu problem moralny - GPL wydaje się wyraźnie zezwalać na jego przypadek użycia
jk.

3
@vartec tutaj jest cytatem z oficjalnego FAQ GPL: „Łączenie statyczne lub dynamiczne z innymi modułami stanowi wspólną pracę opartą na. W ten sposób warunki Powszechnej Licencji Publicznej GNU obejmują całą kombinację”. Jeśli Stallman ma inną wizję tego, czym jest Open Source, nie oznacza to, że go nienawidzi. Jest jednym z głównych ideologów tego ruchu.
Andrey

8
@vartec: Mam wrażenie, że nie rozumiesz, że kiedy używasz KOGOŚ INNEGO W SWOJEJ aplikacji, jesteś zobowiązany do przestrzegania warunków, które ON użył na swój JEGO kod. Nie podoba ci się Nie używaj cudzego kodu GPL. Tak proste.
John R. Strohm,

3
Oto moja sugestia: czerp z tego kodu GPL, od którego wydajesz się tak bardzo zależny, i zobacz, jak zakończy się sprawa sądowa. GPL3 został stworzony, aby zatkać takie legalne dziury w GPL2, więc może ci się uda. Wątpię, aby ludzie przeprowadzali parady na twoją cześć, ponieważ uniknąłeś legalnego manewru, a jeśli będziesz wystarczająco skuteczny, ludzie będą licencjonować swój kod, używając więcej warunków użytkowania, aby cię na złość. W końcu może to poprawić świat, unikając takich wątków.
Godeke

3
I ZDECYDOWANIE nie zgadzają się z twierdzeniem, że jest to moralnie naganne. Moralnie naganne jest mówienie ludziom, że nie mają prawa robić rzeczy, na które pozwala im GPL. Gdy umieszczam pracę na licencji GPL, robię to, ponieważ chcę, aby obowiązywały zasady GPL. Mówienie ludziom, że nie powinni korzystać z praw przyznanych im przez GPL, jest naganne. Jest to coś, na co pozwala GPL. Ci, którzy umieszczają prace na licencji GPL, robią to, ponieważ chcą na to pozwolić.
David Schwartz

6

IANAL, ale uważam, że wszystko w porządku, odpowiednia sekcja GPL3 znajduje się na końcu sekcji 5:

Kompilacja utworu objętego utworem z innymi osobnymi i niezależnymi utworami, które ze swej natury nie są rozszerzeniem utworu objętego utworem i które nie są z nim łączone w celu utworzenia większego programu w lub na woluminie magazynu lub dystrybucji nośnik, nazywany jest „agregatem”, jeśli kompilacja i wynikające z niej prawa autorskie nie są wykorzystywane do ograniczania dostępu lub praw użytkowników użytkowników kompilacji poza tym, na co pozwalają poszczególne dzieła. Włączenie utworu objętego zakresem do agregatu nie powoduje, że niniejsza Licencja będzie miała zastosowanie do innych części agregatu.

Prawdopodobnie będzie to zależeć od tego, co dokładnie zrobi „klient”, odpowiedź mouviciel jest prawdopodobnie dobrą wskazówką, jak to zrobić bezpiecznie

Jeśli uważasz, że Twoja aplikacja jest rozszerzeniem biblioteki, a nie czymś zagregowanym, prawdopodobnie masz rację (powinieneś być w dobrym miejscu, aby to wiedzieć). W takim przypadku najlepiej jest skontaktować się z autorem i spróbować uzyskać inna licencja

to wydaje się do tyłu moje stanowisko, że jest to wyraźnie dozwolone przez GPL, zakładając wykonane prawidłowo.


Przeczytałem to, ale problem polega na tym, że tekst GPL jest napisany w języku prawnym , a nie w opracowaniu . Sztuczka z otoki polega na tworzeniu aplikacji komercyjnej „agregującej”, a nie „pochodnej”. Ale myślę, że należy do „rozszerzeń natury objętego dzieła”.
Andrey

cóż, aby uzyskać pomoc w języku prawniczym, potrzebujesz prawnika. Jeśli uważasz, że Twoja aplikacja jest rozszerzeniem biblioteki, a nie czymś zagregowanym, prawdopodobnie masz rację (powinieneś być w dobrym miejscu, aby to wiedzieć). W takim przypadku najlepiej jest skontaktować się z autorem i spróbować uzyskać inna licencja
jk.

1
@Andrey: Jeśli „natura” twojego programu jest bezpośrednio związana z kodem GPL, powyższy rozdział nie miałby zastosowania. Z twojego pytania tak to wygląda. Przeciwnym przykładem może być program do analizy włamań do sieci, który akurat korzysta z readline GNU poprzez proponowany przez ciebie mechanizm. (Readline to ciekawy przypadek testowy, ponieważ istnieje licencja na licencję BSD).
Fred Nurk

Klauzula „agregująca” ma na celu wyjaśnienie, że bycie na tej samej dystrybucji CD-Rom lub Linux nie tworzy pochodnej.
Sean McMillan

6

Zobacz , jak chciałbym włączyć oprogramowanie objęte GPL do mojego zastrzeżonego systemu. Mogę to zrobić?

Pytanie brzmi: czy Twoja aplikacja do pakowania jest używana samodzielnie? Jeśli utworzyłeś wersję programu w wierszu poleceń, którą było GPL, możesz wydać GUI na innej licencji. Na przykład możesz stworzyć IDE dla gcc, które było zamkniętym źródłem lub wizualne narzędzie do porównywania oparte na diff.

Jednakże, jeśli twoja zamknięta biblioteka nie ma innego zastosowania niż używanie przez twój program, a program nie byłby użyteczny bez tej biblioteki, to jest to praca pochodna i musiałaby zostać wydana na licencji GPL.


Rozumiem, że możesz licencjonować opakowanie w ramach MIT i nadal być w porządku.
Toster

2
Colin, absolutnie nie. Opakowanie jest jednoznacznie połączone z biblioteką GPL w pojedynczy plik binarny. Aby użyć kodu GPL w jednym pliku binarnym, musisz uzyskać własny kod GPL, aby zachować zgodność z licencją.
Beton Głuptak

5

IMO, zgodnie z prawem jest OK. (IANAL) Aby poprawić moralną stronę problemu, nie nazywaj go „opakowaniem FooBar, które sprawia, że ​​FooBar jest legalnie dostępny dla MyClosedApp”, nazwij to serwerem. Zrób z tego miły, mały program typu open source, który „pozwala robić FooBar przez sieć”. Umieść go na SourceForge lub poświęć mu stronę internetową ze stroną projektu, instrukcjami i innymi rzeczami. Następnie pozwól „MyClosedApp” po prostu użyć „serwera FooBar”.


2

O ile rozumiem, możesz pozostawić swoje oprogramowanie zamknięte, o ile jest ono w stanie wykonywać swoją pracę bez biblioteki GPL. Zobacz bibliotekę GPL jako wtyczkę, której brak nie czyni oprogramowania bezużytecznym.


1
to zdecydowanie źle. użycie go jako wtyczki (inaczej dynamicznego linkowania) sprawia, że ​​wynikowa aplikacja jest „pochodna” i jest przedmiotem licencji GPL.
Andrey

Nie jestem pewien, czy wtyczka jest zawsze synonimem dynamicznie połączonego. I z pewnością w tym przypadku OP nie proponuje dynamicznego łączenia czegokolwiek, więc myślę, że porady mouviciel są zgodne
jk.

@jk cóż, jeśli utworzysz tylko jedną wtyczkę opartą na licencji GPL, to pachnie jak naruszenie.
Andrey

4
AGPL nie zabroniłoby tego, gdyby gniazdo nie było w sieci. Jest dość specyficzny. Ponadto nie jest to test przydatności, ale tego, jak blisko są GPL i oprogramowanie prawnie zastrzeżone. Łączenie statyczne jest zdecydowanie zbyt bliskie, gniazda (z wyjątkiem konkretnej sprawy AGPL) są zdecydowanie OK, łączenie dynamiczne może, ale nie musi być (słyszałem uzasadniające argumenty z każdej strony i nie ma jeszcze orzecznictwa amerykańskiego).
David Thornley,

1
@Andrey: więc mówisz teraz, że dopóki oprogramowanie z zamkniętym źródłem, takie jak Photoshop, jest w stanie działać bez komponentu GPL, można je rozpowszechniać bez tworzenia GPL. To właśnie mówi ta odpowiedź.
Doc Brown

1
  1. spróbuj znaleźć alternatywę Open Source, jeśli nie ma, wybierz wersję GPL;
  2. sprawdź, czy jest to GPLv3 z klauzulą ​​Affero, jeśli tak, to nic nie można zrobić;
  3. jeśli jest to GPLv2, możesz robić dokładnie tak, jak sugerujesz;

Istnieje również nieco kontrowersyjna opcja. W większości ustawodawców dynamiczne łączenie powinno ograniczać się do „pracy pochodnej”. Logika tego polega na tym, że podczas dynamicznego łączenia po prostu dołączasz pliki nagłówkowe do swojego programu. W wielu aktach prawnych pliki nagłówkowe są uważane za definicję API i wyraźnie wyłączone z prawa autorskiego. Z drugiej strony, dzięki dynamicznemu łączeniu, rzeczywiste łączenie z biblioteką GPL odbywa się w systemie użytkownika końcowego. Ale jak powiedziałem, jest z tym wiele kontrowersji, Stallman zdecydowanie się na to nie zgadza.


Jaka jest różnica między GPL v2 i v3, która uniemożliwia mój hack? To, co robię, nie łączy dynamicznie, odsprzęgam je tak bardzo, jak to możliwe.
Andrey

Jednym z celów GPLv3 było zapobieganie tej metodzie „obchodzenia”.
vartec

4
Po pierwsze, warianty GPL są oficjalnymi licencjami Open Source zatwierdzonymi przez OSI (podobnie jak licencja BSD bez klauzuli reklamowej jest licencją wolnego oprogramowania zatwierdzoną przez Stallman). Po drugie, żadna wersja GPL (w tym Affero) nie ogranicza możliwości komunikacji GPL i zastrzeżonego oprogramowania za pomocą standardowych metod komunikacji między procesami, takich jak gniazda.
David Thornley,

IMO GPLv3 zezwalające na przykład na klauzulę DRM narusza punkt 6. definicji Open Source opensource.org/docs/osd
vartec

1
@vartec: DRM nie jest „Field of Endeavour”. Zobacz „Na przykład nie może to ograniczać możliwości używania programu w [przedsięwzięciu komercyjnym] lub wykorzystywania go do badań genetycznych”. OSI najwyraźniej uważa, że ​​GPL3 jest Open Source i spełnia wszystkie punkty swojej definicji, ponieważ ją zaakceptował.
Thomas Edleson

0

Czy legalne byłoby, gdyby Adam Brown napisał program, który korzystał z biblioteki GPL i działał jako „serwer”, gdyby wydał cały kod źródłowy do wszystkiego, co z nim związane, ale jedyny kod klienta, który wydał, był dość słaby, ponieważ to wszystko napisał po stronie klienta? Nie widzę żadnych podstaw, by sądzić, że nie.

Gdyby Charles Dover znalazł „serwer” Adama Browna i postanowił napisać program o zamkniętym źródle, aby się z nim komunikować, czy GPL w jakikolwiek sposób ograniczyłby jego działania? Nie widzę tego, ponieważ jego jedynym zastosowaniem oprogramowania GPL były pliki binarne, które otrzymał od Adama Browna. Gdyby rozpowszechniał pliki binarne Adama, musiałby również zamieścić link do źródła, ale nic innego w GPL nie wpłynęłoby na żaden kod Charlesa.

Jeśli chodzi o jedną osobę, która pisze serwer na licencji GPL, a następnie korzysta z serwera do własnych celów zamkniętego źródła, nie sądzę, że powinien istnieć problem prawny, gdyby pisząc serwer dołożył starań, aby to zrobić przydatne dla innych, którzy mogą chcieć używać dostarczonego kodu GPL w ten sam sposób. W szczególności publicznie opublikowana dokumentacja interfejsu powinna być wystarczająca, aby umożliwić kompetentnemu programistowi napisanie kodu dla serwera, który zostałby zaakceptowany przez program kliencki tak jak oryginał, i napisanie programów klienckich, które wykorzystywałyby serwer w taki sam sposób jak aplikacja autora.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.