Licencjonowanie i dystrybucja wtyczek

0

Hej,

chodzi oczywiście o wtyczki do oprogramowania, a nie o elektryczne ;)
Jak pewnie niektórzy tutaj wiedzą, piszę program do automatycznego doboru indeksów w różnych systemach baz danych. Program podzieliłem na 2 części: jądro, realizujące całą logikę, oraz wtyczki, obsługujące specyficzne rzeczy związane z konkretnym RDBMSem. Grubo ponad 90% kodu jest wspólnego, co powoduje, że wtyczki są małe, proste i powinno szybko się je pisać.

No i teraz zacząłem się zastanawiać, na jakich zasadach taki program rozprowadzać, ponieważ powoli zbliżam się do czegoś, co można by nazwać wersją beta (choć długo to idzie, a to choćby ze względu na fakt, że system obsługuje praktycznie cały podzbiór DML SQLa 92i musiał przejść testy na benchmarku TPC-H). Kwestia jest taka, że chciałbym na programie trochę zarobić, ale z drugiej strony nie chciałbym za bardzo hamować jego rozwoju przez całkowite zamknięcie źródeł. Stąd pomysł, żeby wtyczki i ich specyfikacja była otwarta, a jądro zamknięte. I tu się niestety zaczynają schody z licencjami.

Najchętniej wtyczki wypuściłbym na BSD albo MIT. Wtyczki chyba nie mogą pójść na GPLu, bo GPL nie zezwala na dystrybucję kodu zamkniętego razem z GPLowym. Ale z drugiej strony np. wtyczka do MySQLa będzie musiała pójść na GPLu, bo sterownik JDBC do niego jest na GPLu i cały mój program byłby potraktowany jako "derived work", co jest oczywiście bzdurą, bo ten driver to co najwyżej opcjonalny dodatek. Właściwie to głównie ten MySQL bruździ.

Czy jest naruszeniem licencji GPL:

  1. Dystrybucja zamkniętego kodu i wtyczek GPL osobno, jako 2 produkty? Użytkownik musi sobie wtedy ściągnąć oba i zainstalować na kompie.
  2. Dystrybucja zamkniętego kodu i zawarcie w nim automatycznego instalatora wtyczek, który pobiera je ze strony?
  3. Dystrybucja kodu GPL razem z kodem BSD?
0

O ile wiem GPL zezwala na dystrybucję kodu wolnego i niewolnego razem o ile kod wolny nie jest wymagany do działania części niewolnej (albo chyba nawet jest zastrzeżenie, że musi być nawet jego częścią). Biblioteki mogą być na innej licencji niż aplikacja zatem.

you must make sure that the free and non-free programs communicate at arms length, that they are not combined in a way that would make them effectively a single program.

http://www.gnu.org/licenses/gpl-faq.html#GPLInProprietarySystem

[dodane: znalazłem ładne pytanie w FAQ]

Czy mogę wydać niewolny program, zaprojektowany tak, żeby ładował wtyczkę wydaną na GPL?
To zależy od sposobu, w jaki program wywołuje wtyczki. Jeśli korzysta w tym celu z 'fork' i 'exec', wówczas wtyczki są odrębnymi programami, a więc licencja wtyczki nie stawia żadnych wymagań co do głównego programu.

Jeżeli program dołącza wtyczki dynamicznie, wykonują one wzajemne wywołania funkcyjne i mają wspólne struktury danych, to uważamy, że tworzą one jeden program, który musi być traktowany jako rozszerzenie zarówno programu głównego, jak i wtyczek. Program główny, żeby mógł korzystać z wtyczek objętych GPL, musi zostać wydany na GPL lub na licencji wolnego oprogramowania zgodnej z GPL, a przy rozprowadzaniu programu do użytku z tymi wtyczkami muszą być przestrzegane warunki GPL.

Jeśli program dynamicznie dołącza wtyczki, ale komunikacja pomiędzy nimi ogranicza się do wywoływania funkcji `main' wtyczki z jakimiś opcjami i oczekiwania na powrót sterowania, to jest to przypadek graniczny.

http://www.gnu.org/licenses/gpl-faq.pl.html#NFUseGPLPlugins

0

Hmm, no dobra. Przeczytałem cale to FAQ, ale nie ma tam jednej istotnej rzeczy:
czy jeśli mój program będzie zaprojektowany do ładowania różnych wtyczek, w tym również wtyczek na GPL, ale wtyczki GPL nie będą dołączone RAZEM z programem, tylko do pobrania osobno na stronie, to program musi być na GPL, czy nie? Wydaje mi się, że nie musi, bo to już jest w gestii użytkownika, czy sobie do tego programu ściągnie wtyczkę na GPLu czy nie. W końcu twórca programu nie musi wręcz wiedzieć o istnieniu wszystkich dostępnych wtyczek. Poza tym program działa też sam, bez wtyczek - tj. nie są one absolutnie niezbędne, choć rozszerzają funkcjonalność.
No i teraz, czy dodanie do takie programu ułatwiacza ściągania wtyczek (np. "wybierz, jakie wtyczki chcesz zainstalować: i tu lista wtyczek"), żeby nie szukać wtyczek po całym necie, to już złamanie GPL czy nie? Z tego FAQ to nie wynika :/

Jeśli program dynamicznie dołącza wtyczki, ale komunikacja pomiędzy nimi ogranicza się do wywoływania funkcji `main' wtyczki z jakimiś opcjami i oczekiwania na powrót sterowania, to jest to przypadek graniczny.

A jeśli odbiera jeszcze jakieś dane? :>

// Dopisane:
Hmmm, w zasadzie skoro może być przez sockety i fork/exec, to będą mieli. W sumie da się zrobić. Driver JDBC jest mi potrzebny tylko do wyciągnięcia schematu bazy danych i statystyk optymalizatora.

0

No i teraz, czy dodanie do takie programu ułatwiacza ściągania wtyczek (np. "wybierz, jakie wtyczki chcesz zainstalować: i tu lista wtyczek"), żeby nie szukać wtyczek po całym necie, to już złamanie GPL czy nie? Z tego FAQ to nie wynika :/

W tym FAQ jest pytanie czy instalator (niewolny) instalujący programy na GPL (wolne) jest zgodny z licencją - jest. Więc ułatwiacz może istnieć bez problemu, co najwyżej daj w ułatwiaczu opcję "pobierz kod źródłowy tej wtyczki, bo ona jest na GPL".

0

Dzięki. Nie zauważyłem tego pytania. O to mi chodziło.

0

A LGPL nie byłoby odpowiednie?

0

Nie ma znaczenia. Swój kod wtyczek mogę udostępnić na LGPL, choć wolę na BSD lub MIT, bo są najmniej restrykcyjne i idealnie tu pasują. W sumie zależy mi na tym, aby inni tworzyli wtyczki i portowali program na inne RDBMSy (niż te, które ja przygotuję) - silnik jest w miarę uniwersalny. Jedyne czego silnik potrzebuje to informacji o możliwościach bazy, zestawu współczynników charakteryzujących szybkość poszczególnych składowych (np. wyszukiwanie w indeksie, sortowanie, full table scan itp.) oraz metadanych - zestaw tabel/kolumn + rozkłady danych w tabelach. Część tych informacji importuje się z plików konf., część poprzez JDBC, ale sposób ich odczytu dla każdego RDBMSa jest inny, stąd wtyczki.

Problem jest z wtyczką do MySQLa, bo sterowniki JDBC są na GPLu (nie na LGPLu) i kod wtyczki automatycznie musiałby być DODATKOWO licencjonowany na GPLu. I jeśli uznać, że wtyczka + silnik to JEDEN program, wtedy w myśl GPL silnik też musi być udostępniony na GPL. A jak silnik na GPL, to raczej nie zarobię na tym (inne możliwości zarobku typu udzielanie wsparcia itd przy tym programie raczej odpadają), bo pierwszy kto to kupi będzie mógł innym rozdać za darmo / puścić w sieci itp. Stąd chyba najlepszy pomysł, że rozprowadzam silnik i wtyczki zupełnie osobno. Do takiej wtyczki można nawet prosty interfejs CLI dorobić i staje się osobnym programem np. do eksportu statystyk optymalizatora do pliku. A skoro 2 osobne programy, to jeden może być na GPL, a drugi na nie-GPL.

Swoją drogą jeśli macie lepsze pomysły na sprzedaż takiego programu, to bardzo chętnie posłucham. Idealnie byłoby znaleźć taki sposób, aby projekty FLOSS mogły sobie z tego korzystać bez opłat, ale firmy musiały zapłacić. Rozwój tego programu niestety kosztuje czas - na razie mam na niego finansowanie, ale chiałbym, żeby się kiedyś zwróciło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1