Paweł Z.

Paweł Z. IT Manager

Temat: Łączenie licencji GPL2 z BSD

Witam,

Myślę, że nikt się nie obrazi jeśli zamiast pisać jeszcze raz, podam po prostu link do tematu, w którym uważam, że nie zostało jasno opisane czy można i w jaki sposób łączyć te dwie licencje by produkt końcowy nie był na GPL.

http://forum.php.pl/Licencjonowanie_oprogramowania_t21...

Chodzi o to, że do CMS-a chcę dołączyć forum phpBB. Do paczki wsadzić go nie mogę z racji, że GPL2 jest wirusowe i szukam rozwiązania alternatywnego i prawnie dozwolonego. Proszę o opinię.

Temat: Łączenie licencji GPL2 z BSD

Jako, że zarabiam na pisaniu zamkniętego (pod klucz) softu, który korzysta z rozwiązań GPLowych, swego czasu "przeorałem" temat. Wiele przemyśleń zawarłem w tym temacie (grupa Programiści .NET).

Postaram się streścić te kilkanaście postów w wątku. Niestety, prawnicy, których tam cytowałem, różnili się znacznie w swoich opiniach, zastrzegając, że interpretacji i tak dokona sąd :) Tu nigdy nie będziesz "w 100% pewien wygranej". Można jednak podać kilka zasadniczych punktów:

1. komunikacja z modułem GPL musi odbywać się w specyficzny sposób - "at arm's length" (tak to ujęto w FAQ). Onacza to, że:
a) wolno Ci forkować/exekować aplikację na licencji GPL2, podając jej parametry i odczytując jej "wyjście"
b) wolno Ci komunikować się z tą aplikacją za pomocą różnych "mediów", jak: webserwis (Long live the web services loophole), pliki wymiany, potoki, OLE COM, DDE, TCP itp. Oznacza to, że możesz sobie np. zbudować "komunikator", który rozdzieli obie aplikacje - wtedy jedna jego "strona" musi być na GPL (bo będzie "mocno sprzężona" z aplikacją) i jej źródła musisz udostępnić na życzenie
b) nie wolno Ci "linkować" - ani statycznie, ani dynamicznie do bibliotek. To właśnie powoduje "przeniesienie" GPLa na Twoją aplikację.

Tu uwaga na licencję ewentualnych skryptów! Co prawda skrypty, chociaż wykonywane w przestrzeni adresowej aplikacji nie są zwykle objęte GPLem, ale jeśli tylko będą do tej samej przestrzeni ładować dodatkowo komponenty GPLowe (np. sterownik do bazy danych), to masz dynamiczne linkowanie - i po ptokach :)

2. wymiana informacji musi być "prosta" - żadnych "complex data structures". Co to znaczy "complex"? Nie zdefiniowano :) Raczej powinny "przejść":
a) komendy (w rodzaju "SEND XXXX, COPY AAA, BBB, READ YYYY")
b) nazwy skryptów zawierających polecenia do wykonania
c) pliki z wynikami (XML, HTML, CSV). CSV ma relatywnie najprostszą strukturę, na XMLe trzeba uważać (na ich złożoność)
d) wartości liczbowe/tekstowe zwracane przez w/w komunikator.
e) zapisy/odczyty do/z bazy danych

Binarne, złożone formaty i duże ilości (???) danych są już dyskusyjne.

3. Twoja aplikacja powinna się "budować" i uruchamiać bez modułu na licencji GPL.
Możesz to osiągnąć za pomocą interfejsów i "mocków" aplikacji GPLowej.

Innymi słowy - chodzi o to, że Twoja aplikacja nie może być uzależniona od aplikacji GPLowej. Musisz dać userowi wybór korzystania z Twojej lub innej aplikacji.
A przynajmniej Twoja aplikacja musi się samodzielnie uruchomić i "robić coś sensownego" ("nie tylko wyświetlić okienko "zainstaluj phpBB" :) )

3a. Niektórzy prawnicy wskazują na to, że Twoja aplikacja (zamknięta) nie powinna być jedynie "ozdobnikiem", "skromną nadbudówką" modułu GPL, tylko samodzielnym produktem, który zaledwie "rozszerza oferowane możliwości o to, co oferuje moduł GPL". Tutaj jest problem tzw. "derivative work". U Ciebie to IMHO nie występuje.

4. Nie możesz dystrybuować (to convey) modułu GPL razem z Twoją aplikacją (o ile chcesz zamknąć jej źródła). Możesz jednak:
a) pozostawić kwestię instalacji użytkownikowi (niech sam zainstaluje MySQL, phpBB)
b) zrobić to za niego. W tym przypadku wolno Ci policzyć sobie za to jako za usługę wdrożeniową (licencja GPL nie zabrania zarabiania na programach GPL!)

4a. Jeśli nie ma dystrybucji softu, bo znajduje się na serwerze (jako usługa - SAAS), to nie masz problemu, bo GPL2 tego nie dotyczy. Są na to jednak inne licencje, np. "Affero" :)

Na koniec chciałbym przypomnieć, że WOLNO CI zarabiać na programach GPL - nikt nigdy tego nie zabraniał i nie zabrania. Nie wolno jedynie ograniczać userowi dostępu do źródeł.
Oczywiście oznacza to, że z chwilą, gdy je otrzymał, może wystawić je na swojej stronie za free :) I nie wolno Ci wówczas wymusić na nim w żaden sposób "poufności źródeł". To jest jego własność ("wolność do dowolnego rozporządzania").

Podsumowując - wydaje mi się, że u Ciebie nie będzie większego problemu, bo CMS raczej na pewno będzie pracował samodzielnie, a forum będzie jedynie dodatkiem. Zależy tylko, jak je połączysz... Dystrybucję lepiej porzuć, albo daj na swojej stronie link do ściągnięcia. Alternatywnie możesz też napisać własny prosty instalator (taki "web installer"), który zautomatyzuje cały proces pobierania i instalacji softu GPL, sprowadzając go do klikania "Next, next, next". Wtedy user bardzo tego nie odczuje. Wydaje mi się, że to jest właśnie rozwiązanie dla Ciebie.

Oczywiście żaden prawnik nie da Ci 100% pewności, albo ograniczy się do "do not do it" (przerabiałem już to). W razie czego - sąd przyjrzy się Twoim "intencjom". Zawsze też możesz napisać do autora GPLa i zapytać o licencję komercyjną, ale w przypadku softu OpenSource często jest to wiele komponentów na różnych licencjach. No i nie liczyłbym na to... - jak ktoś w tamtym wątku wspomniał - "GPL powstało by chronić kod, nie wasze interesy" :)

Są komercyjne rozwiązania oparte bądź związane z GPL, np.:
1. Pakiet statystyczny Statistica oraz SPSS współpracują z GNU R. R może pracować sam. Statistica/SPSS mogą pracować same. R jest GPL, zaś Statistica kosztuje kilka ładnych kpln/stanowisko.
2. Inne przykłady: http://r.789695.n4.nabble.com/R-and-Commercial-applica...

EDIT: Ostatnia sprawa - jeśli byś kiedyś pisał soft "pod klucz", a w dodatku były w nim zawarte jakieś "tajemnice klienta", to nie musisz się zbytnio martwić o otwarte źródła, gdyż:
a) klient raczej nie odda za free konkurencji tego, za co Ci słono zapłacił :)
b) ... i nie ujawni jej swoich tajemnic
c) nikt Ci nie zabrania użyć tych źródeł w innych aplikacjach
d) możesz dowolnie skomplikować proces instalacji tak, że nawet gdy ktoś ma źródła, to będzie wolał kupić usługę wdrożenia.

To wszystko dotyczy GPL2. GPL3, AFAIR, ma kilka ograniczeń. Zawsze zwracaj uwagę na wersję licencji.Adrian Olszewski edytował(a) ten post dnia 15.01.13 o godzinie 03:12
Paweł Z.

Paweł Z. IT Manager

Temat: Łączenie licencji GPL2 z BSD

Dziękuję za informację. Na pewno się przydadzą :)

W punkcie pierwszym napisałeś: jedna jego [komunikatora] "strona" musi być na GPL (bo będzie "mocno sprzężona" z aplikacją) i jej źródła musisz udostępnić na życzenie".

Mógłbyś rozwinąć tę myśl? Nie bardzo wiem jak w praktyce miałoby ty wyglądać by komunikator miał "dwie strony na różnych licencjach, z czego jedna jest wirusowa - GPL".

Temat: Łączenie licencji GPL2 z BSD

Paweł Zegardło:
Mógłbyś rozwinąć tę myśl? Nie bardzo wiem jak w praktyce miałoby ty wyglądać by komunikator miał "dwie strony na różnych licencjach, z czego jedna jest wirusowa - GPL".

Poszedłem za bardzo na skróty :) "Komunikator" to taka abstrakcja na określenie sposobu połączenia obu aplikacji w modelu klient-serwer albo point-to-point.

Tak czy siak - "komunikator" ma dwa punkty końcowe, "endpointy" nadawczo-odbiorcze (dla komunikacji 2 kierunkowej), zwał jak zwał. Jedną stronę "obsługuje" Twoja apka, drugą - apka
GPLowa. Innymi słowy - Twoja apka to np. klient, a apka GPLowa - serwer.

Wiele teraz zależy od tego, jak zaprojektujesz takie moduły nadawczo-odbiorcze:

- jako EXEki: rozwiązanie elastyczne ("loosely coupled") i wygodne. Nie ma problemu z linkowaniem. Czasem o wiele wygodniejsze, niż linkowanie do DLLki, bo zamiast grzebać w kodzie appki, można ją po prostu uruchamiać z parametrami. To tak, jak z klasycznym "forkowaniem", tylko działa na odległość - np. uruchamianie przez sieć, transmisja przez webservice.

Obrazek


- jako DLLki: rozwiązanie jeszcze elastyczne, ale już mniej wygodne, bo raz, że następuje linkowanie, dwa, że trzeba grzebać w kodzie appki GPLowej. Po Twojej stronie nie ma to znaczenia, bo masz aplikację na licencji Nie-GPL. Po stronie GPLowej apki ma to znaczenie, bo będziesz musiał udostępnić źródła tamtego "endpointa" komunikatora. Albo i całego - to zwykle żaden problem, bo raczej nie ma tam "tajnych algorytmów.

Obrazek


- wbudowanie mechanizmów komunikacyjnych w obie aplikacje - nieelastyczne, problemy licencyjne jak wyżej.

Obrazek


- rozwiązanie mieszane, np. po Twojej stronie kod wbudowany albo DLL, po stronie GPL - EXEk.

Obrazek
Adrian Olszewski edytował(a) ten post dnia 15.01.13 o godzinie 16:26

konto usunięte

Temat: Łączenie licencji GPL2 z BSD

@Adrian:
Patrząc na te diagramy przeraziłem się trochę, potem przypomniałem sobie że jest
coś takiego jak LGPL...

@Paweł:
Co do GPL 2.0 to jest kilka FAQ na ten temat, oficjalne tutaj:
http://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html

Ogólnie to unikałbym stosowania GPL - jeśli to możliwe.
Szukaj przynajmniej rozwiązań LGPL, najlepiej jednak MIT, BSD.

Jeśli musisz skorzystać z GPL, to trzeba zwracać uwagę czy dany pakiet nie udostępnia licencji na zasadzie "GPL z wyjątkami". Przykładem jest wxWidgets. Dzięki takiemu wyjątkowi można uniknąć "komunikatorów".

Przykład wyjaśnień GPL w kontekście web:
http://www.sencha.com/legal/open-source-faq

Temat: Łączenie licencji GPL2 z BSD

Piotr L.:
@Adrian:
Patrząc na te diagramy przeraziłem się trochę, potem przypomniałem sobie że jest
coś takiego jak LGPL...

Tak, LGPL jest OK, natomiast tutaj wyraźnie chodziło o rozwiązanie GPL. Przy okazji wspomnę tylko, że diagramy też nie wskazują uniwersalnego rozwiązania problemu, ponieważ forma komunikacji to tylko jeden z klocków w tej układance... GPL można naruszyć na wielu w/w płaszczyznach.

Przy okazji - korzystałem m.in. właśnie z tego oficjalnego FAQ, ataże wielu różnych dyskusji w sieci (dużo godzin poszukiwań i studiowania przypadków). Tak naprawdę nawet to FAQ nie da 100% pewności, że wszystko jest OK. Ryzyko w cenie produktu...
Ogólnie to unikałbym stosowania GPL - jeśli to możliwe.
Szukaj przynajmniej rozwiązań LGPL, najlepiej jednak MIT, BSD.

Masz rację. Ale czasem i tu można się przejechać. Np. rozwiązanie jest na licencji "bezproblemowej" (piszę tak, bo jest ich całe mnóstwo), ale w trakcie działania ładuje jakiś moduł/bibliotekę/sterownik/cokolwiek na licencji GPL (ów łańcuszek, w który wystąpi gdzieś GPL może być bardzo długi) - i po herbacie.

Np. mam tak przy pakiecie GNU R. Biblioteka R.DLL jest na licencji LGPL, aleeeee... część zupełnie podstawowych (i sporo specjalistycznych) pakietów, które wykorzystuję, jest na licencji GPL. I tyłek zbity. To się propaguje wstecznie na kolejne poziomy aplikacji. Przykładowo: jest taka fajna biblioteka do komunikacji z R z poziomu .NET (R.NET na codepleksie). Ona linkuje do R.DLL, co jest jej wielka zaletą, gdyż unika się narzutów związanych z pośrednimi warstwami. Niestety jednak, R.DLL może linkować do bibliotek GPLowych. GPL się wstecznie przepropaguje aż na moją appkę. Dlatego musiałem dodać warstwę pośrednią - dodatkowy komunikator (i zatoczyłem "wydajnościowe" kółeczko). Potem przerzuciłem się na interfejs oparty o TCP. Wymiennie także "forkuję" rscript.exe. A w niektórych rozwiązaniach, gdzie zależy mi na szybkości - po prostu otwieram źródła - i tak raczej nie wyjdą poza specjalistycznego klienta. Poza tym to tylko szkielet aplikacji - całe know-how zamyka się w skryptach :] Niestety, nawet one mogą się "uGPLowić"...

Kiedyś, jak interes będzie się dobrze kręcił, wykupię serwer dedykowany i pójdę w model SAAS...
Jeśli musisz skorzystać z GPL, to trzeba zwracać uwagę czy dany pakiet nie udostępnia licencji na zasadzie "GPL z wyjątkami". Przykładem jest wxWidgets. Dzięki takiemu wyjątkowi można uniknąć "komunikatorów".

O to to :) Dobry przykład. Dzięki temu mogę stosować wxWidgetsy pod .NETem :)
Paweł Z.

Paweł Z. IT Manager

Temat: Łączenie licencji GPL2 z BSD

Czy w przypadku gdy użytkownik mam na serwerze zainstalowaną aplikację na licencji aGPL3, a ściągnie do niej moduł, który jest na GPL2, to może go użyć?Ten post został edytowany przez Autora dnia 03.06.13 o godzinie 19:45

Następna dyskusja:

Skrypt na licencji w umowie...




Wyślij zaproszenie do