2009-03-26 22 views
5

Zaczynam budować komercyjną aplikację korzystającą z biblioteki o otwartym kodzie źródłowym. Przeglądałem różne dokumenty i wpisy, ale wciąż mam kłopoty. Z tego co rozumiem, muszę "odizolować" część open source. Jednym ze sposobów na to jest zapewnienie klasy, która komunikuje się z otwartym kodem źródłowym za pomocą linków "waniliowych".Czy mogę udostępnić bibliotekę open source połączoną z produktem o zamkniętym kodzie źródłowym na zasadach GPL?

Proponowane rozwiązanie polega na zmodyfikowaniu oprogramowania open-source (narzędzia wiersza poleceń), aby nadać mu pewien rodzaj interfejsu API. Następnie opracuj program pakujący lub proxy, który używa interfejsu API do komunikacji z programem o otwartym kodzie źródłowym. Zwolnij zmodyfikowane źródło i opakowanie jako otwarte źródło, ale zamknij pozostałe źródła. Zauważ, że utwór typu open-source byłby dostarczany wraz z kodem i wykonywany jako statycznie lub dynamicznie połączona biblioteka.

Czy to działa na licencji GPL?

+4

mam głosu, aby zamknąć to pytanie jako off-topic, bo ** chodzi o licencjonowanie lub zagadnień prawnych **, nie programowania lub rozwoju oprogramowania. [Zobacz tutaj] (http://meta.stackoverflow.com/a/274964/1402846), aby uzyskać szczegółowe informacje, oraz [pomoc/temat], aby uzyskać więcej informacji. –

+1

Myślę, że warto, ponieważ programiści muszą odpowiadać na pytania GPL, a to z pewnością wpływa na sposób tworzenia programów. Na przykład. Kiedy zadałem powyższe pytanie, informacje zwrotne pomogły mi odłączyć się od połączonego rozwiązania, a zamiast tego skorzystałem z paradygmatu komunikacji opartego na gniazdach. –

Odpowiedz

5

Nie, jeśli jest to GPL i łączysz się z nim, Twój kod również staje się GPL. Jeśli jest to LGPL, sprawy wyglądają inaczej (możesz budować komercyjne aplikacje połączone z licencjonowanymi bibliotekami LGPL), ale wydaje się, że tak nie jest.

+0

Obawiałem się tego (: –

+0

"Nie" jest poprawne, ale reszta jest błędna Możesz umieścić dowolną licencję na swoim własnym kodzie .Jeżeli jednak chcesz, aby wynik został odwrócony komuś innemu, musi być licencją GPL-compatabile –

+0

Czy proponuję inaczej? A co masz na myśli mówiąc "zgodna z GPL"? Przykład takiej licencji, proszę? –

0

Zanim zacznę, powinienem powiedzieć, że nie jestem prawnikiem, a to nie powinno być uważane za poradę prawną. Jeśli potrzebujesz porady prawnej, powinieneś zatrudnić prawnika.

Dopóki łączysz swój program z oprogramowaniem GPL, twoje oprogramowanie jest uważane za dzieło pochodne oprogramowania GPL.

Jeśli chcesz korzystać z części oprogramowania GPL, powinieneś udostępnić swoje oprogramowanie na licencji GPL lub zgodnej z GPL. W przeciwnym razie powinieneś znaleźć inny program, który zrobi to, czego potrzebujesz, lub sam go napisać. Celem licencji GPL jest to, że cena licencji polega na tym, że udostępniasz swój kod źródłowy do prac pochodnych na podstawie licencji wolnego oprogramowania. Jeśli nie rozważysz używania własnego oprogramowania bez płacenia odpowiednich opłat licencyjnych, nie powinieneś używać GPL

Jedynym sposobem, w jaki można go wyizolować, byłoby posiadanie całkowicie oddzielnego pliku wykonywalnego, który komunikował się przez interfejs ogólnego przeznaczenia. (gniazdo, rura lub coś w tym rodzaju), dzięki czemu twoje oprogramowanie lub oprogramowanie GPL można było łatwo wymienić. Interfejs, na którym się komunikuje, musi mieć bardzo ogólny cel; nie może zależeć od szczegółów implementacji oprogramowania GPL, takich jak wewnętrzny układ danych czy coś w tym rodzaju. Zasadniczo, jeśli komunikuje się za pośrednictwem protokołu, który może być używany jako standard ogólnego przeznaczenia, twoje oprogramowanie może komunikować się z oprogramowaniem GPL bez bycia pochodną.

W każdym razie, o ile możliwe jest komunikowanie się z częścią oprogramowania objętego GPL z oprogramowania prawnie zastrzeżonego, nie powinieneś robić tego w taki sposób. Będziesz naruszać ducha GPL i będziesz musiał bardzo uważać, aby interfejs był na tyle uniwersalny, aby nie był uznawany za naruszający prawa. Zamiast tego powinieneś znaleźć oprogramowanie z inną licencją, która zrobi to, czego potrzebujesz, napisać je samodzielnie lub wydać oprogramowanie na licencji zgodnej z GPL.

edycja: Jest interesting article zamieszczane na Linux Weekly News na ten temat. Według analizy w artykule, nawet jeśli oddzielisz interfejs, za pomocą którego możesz komunikować się z oprogramowaniem GPL w wierszu poleceń, powinieneś to zrobić jako implementację w pomieszczeniu czystym z jedną grupą, która działa z kodem GPL, jedna grupa, która implementuje inne oprogramowanie, a wszystkie specyfikacje przechodzące między nimi są filtrowane przez prawników. Tak naprawdę, więcej kłopotów niż to jest warte.

+0

Nie jestem pewien, czy zgadzam się z tobą, że to narusza ducha GPL. Faktem jest, że FSF wyraźnie mówi w FAQ, że jeśli chcesz użyć kodu GPL z aplikacji spoza GPL, powinieneś to zrobić za pomocą wrappera linii poleceń lub podobnego. Oczywiście wolą, żebyś nie pisał zamkniętego źródła, ale ... –

2

Jeśli nie podłączysz się do niego, jesteś w dobrej formie.Zamiast więc tworzyć interfejs API dla tego narzędzia wiersza poleceń open-source, wystarczy napisać małe opakowanie, które wchodzi w interakcję z programem bezpośrednio w wierszu poleceń.

Ponieważ nie łączysz, a teraz po prostu wykonujesz kod binarny, twój kod nie będzie musiał zostać wydany na licencji GPL.

Możesz użyć fork, pipe, exec i friends, aby to zrobić! Jest to proste rozwiązanie i w zależności od sposobu aplikacji spodziewa się jego wkład w wierszu poleceń może działać bardzo dobrze (materiał oparty przekleństwa jest trudniejsze ... Potrzebuję jakiegoś terminala)

Edit:

Od komentarze brzmią, że nawet to nie jest poprawne i może nadal powodować problemy. Sugeruję skontaktowanie się z prawnikiem, aby upewnić się, że jesteś w dobrej formie, że będzie on w stanie zinterpretować GPL i poinformować Cię, co możesz i czego nie możesz zrobić z kodem GPL.

Uważam, że po prostu wykonanie programu na licencji GPL, a następnie przesłanie mu danych (w tym przypadku danych rurociągów) nie powinno spowodować, że program będzie również objęty licencją GPL.

GPL jest zbyt skomplikowana, jeśli użyję narzędzia wiersza poleceń, wykonując go i przesyłając do niego dane, mój program może nadal stać się GPL. To po prostu dziwne. Daj mi BSD, lub MIT o każdej porze dnia, o wiele prostszy do zrozumienia.

+0

To nie gwarantuje, że jesteś wolny. Jeśli potrzebujesz potokować wewnętrzne struktury danych do oddzielnej aplikacji i od niej, to posiadanie go w oddzielnym procesie nie oznacza, że ​​uniknąłeś tworzenia pracy pochodnej. –

+0

@Brian dziękuję za jasność tego. @jack, dostajesz złą radę przeze mnie lub przez moich przeciwników :). Proponuję spytać prawnika, FSF, a może SFLC. Prawdopodobnie nadal mają program, w którym 100 USD dostanie odpowiedź e-mail od rzeczywistego prawnika FSF. – JasonSmith

+0

To nie jest prawda, patrz np. historia clisp i readline. – ShreevatsaR

0

Z GPL myślę, że jedynym wyjściem jest zapakowanie go w coś podobnego do obiektu COM (który również musi być GPL lub kompatybilny) i połączenie z obiektem w czasie wykonywania. Ponieważ to powstrzymuje cię od (statycznego) łączenia z kodem GPL, nie będziesz miał okazji.

Ta sztuczka działa z kodem GPL v2, ale może nie działać z GPL v3.

+0

Dynamiczne łączenie wciąż łączy. Heurystyka, której używam, to "udostępnianie kontekstu wykonawczego" ... IANAL, YMMV, itp. Reklamy. nauseum – dmckee

+0

To nie jest ustalone pytanie: http://gnuwin32.sourceforge.net/license.html – mkb

+0

Prawda. Myślę, że próbowałem dostać coś innego z obiektem COM. Jest to jeden pełny krok od tego, co uważamy za "dynamiczne łączenie". To, co naprawdę robisz, to wywoływanie oddzielnego programu i komunikowanie się z nim. –

0

Nie wierz ludziom, którzy mówią o zdalnym wywołaniu procedury (COM) lub standardowym IO. Jeśli coś jest w ogóle, standardowa funkcja IO pochodzi ze starszych sytuacji, takich jak wyprowadzanie danych wyjściowych na grep i instalowanie ich w innych aplikacjach.

Zamiast tego zastanów się w ten sposób: Czy Twoja aplikacja pochodzi z komponentu GPL? Czy mógłbyś wyjaśnić rozsądnie inteligentnej świeckich, dlaczego twoja aplikacja nie jest pochodną biblioteki open source? Możesz wytłumaczyć okładki stdio i interfejsy COM, aż staniesz się niebieski, ale twój prawnik, sędzia, klient lub ktokolwiek go nie kupi. Zamiast tego musisz pokazać, że usunięcie biblioteki GPL nie zmieni znacząco działania twojej aplikacji. Jeśli nie możesz tego zrobić, cóż, przykro mi, ale jesteś na cienkim lodzie.

+0

GNU uważa, że ​​standardowe IO jest OK. Zobacz http://stackoverflow.com/questions/392395/a-gui-wrapper-around-a-gpl-cli-application-is-it-a-derivative/392452#392452 – dmckee

+0

Ten argument wydaje się naiwny. Na przykład aplikacje, które wywołują układy systemu operacyjnego Linux, nie są uważane za utwory pochodne, ale jeśli usuniesz system operacyjny, aplikacja nie będzie działać. –

+1

Och, przepraszam, zapomniałem, że sędziowie wiedzą wszystko o łączeniu statycznym i dynamicznym ze standardowym IO. Chodzi o prace pochodne. Aplikacja POSIX może syscall do jądra Linux wszystko, czego chce, i nadal nie pochodzi, ponieważ system operacyjny nie określa charakteru programu. – JasonSmith

0

Należy pamiętać, że istnieje tyle różnych interpretacji GPL, ile osób, po prostu.

Nie jestem prawnikiem, ale rozmawiałem z prawnikami na ten temat. To nie jest porada prawna.

Niektórzy prawnicy uważają, że dynamiczne łączenie z GPL jest w porządku i nie stanowi pracy pochodnej. Inni, tacy jak RMS i jego prawnicy uważają, że dynamiczne łączenie nie jest poprawne i stanowi pracę pochodną. Większość uważa, że ​​linkowanie statyczne jest pracą pochodną.

Istnieje wiele argumentów na ten temat i nie ma ostatecznego orzecznictwa, które określa, co jest i nie jest pochodną pracy w tym zakresie.

Patrz, na przykład This Article

Powiązane problemy