You are on page 1of 38

Zagadnienia zwizane z wykorzystaniem komponentw na licencji GNU GPL w rozwizaniach o zamknitych rdach

Adrian Olszewski

Cztery wolnoci pozytywne wg FSF


Wolno do: I. uruchamiania programu w dowolnym celu II.analizowania dziaania programu i dostosowywania go do swoich potrzeb III. rozpowszechniania niezmodyfikowanej kopii programu IV. udoskonalania programu i publikacji ulepsze

Wnioski z czterech wolnoci

Uytkownik programu GPL ma do niego pene prawa

Uytkownik ma prawo da rde (bez opat*) Uytkownik moe sobie dostosowa program Uytkownik moe odsprzeda/rozda nasz program, take ze swoimi poprawkami

Nie mona mu adnego z tych praw odebra

Nie mona zada, by nie dystrybuowa programu Nie mona zada, by nie przekazywa rde

Licencja GPL nie powstaa po to, by chroni wasze INTERESY, lecz by chroni PRAWA uytkownika waszego oprogramowania.

GPL 2 + oficjalne FAQ


Aplikacja korzystajca z kodu GPL staje si GPL gdy:

Linkuje (statycznie/dynamicznie) do kodu GPL Wymienia z nim complex data* bazuje na kodzie GPL (derivative, combination) jest wspdystrybuowana* z kodem GPL zaley od kodu GPL (nie uruchomi si bez niego)

Wnioski z GPL + of. FAQ


Aplikacja nie staje si GPL, gdy jej relacje z kodem GPL s nastpujce

uruchamia kod GPL jako proces (exec) komunikuje si z nim at arm's length wykorzystuje kod GPL jako warto dodan nie jest zalena od kodu GPL (uses zamiast derivative, combination) nie jest wspdystrybuowana* z kodem GPL

Wnioski z GPL + of. FAQ

It's never been clear why shell'ing out commands is any different than linking to a shared library when you consider the general activities, but they are viewed differently from the GPL perspective, as far as I'm aware of the relevant sections

Dalsze wnioski

Licencja GPL2 nie dotyczy kodu, ktry nie jest dystrybuowany (to convey) Nie zabrania si sprzedawania aplikacji GPL

Trzeba tylko zapewni darmowy* dostp do kodu

Nie zabrania si oferowania patnych usug wdroeniowych i serwisowych Twrca aplikacji GPL moe zezwoli na zamknicie kodu w pewnych przypadkach lub doda inne licencje

GPL linking exception

GCC GNU Classpath GNU Guile (interpreter j. Scheme), GNAT (interpreter j. Ada)

When you use GCC to compile a program, GCC may combine portions of certain GCC header files and runtime libraries with the compiled program. The purpose of this Exception is to allow compilation of non-GPL (including proprietary) programs to use, in this way, the header files and runtime libraries covered by this Exception As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice [...]

Dalsze wnioski

Produkt aplikacji GPL nie jest GPL

Jedna z furtek dla GPL2 - Software As A Service

Skrypty interpretera na licencji GPL nie s GPL Skrypty jw. mog sta si GPL, jeli spowoduj zaadowanie do przestrzeni adresowej interpretera kodu na licencji GPL (biblioteki)

Dalsze wnioski
The interpreted program, to the interpreter, is just data; a free software license like the GPL, based on copyright law, cannot limit what data you use the interpreter on. You can run it on any data (interpreted program), any way you like, and there are no requirements about licensing that data to anyone.

However, when the interpreter is extended to provide bindings to other facilities (often, but not necessarily, libraries), the interpreted program is effectively linked to the facilities it uses through these bindings. So if these facilities are released under the GPL, the interpreted program that uses them must be released in a GPL-compatible way.

Dalsze wnioski
By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL
co pociga za sob warto dodan

Unika dystrybucji kodu GPL

Jeszcze a' propos rde


1. Nie dystrybuujemy aplikacji wszystkim, a tylko klientowi. Stanowi on jedynego odbiorc rde. 2.Jeli klient zapaci nam grube pienidze za napisanie aplikacji zawierajcej know-how firmy, to raczej nie bdzie zainteresowany przekazywaniem swych tajemnic caemu wiatu (w tym - konkurencji), w dodatku za darmo. Tajemnica handlowa to cakiem skuteczna NDA :-)

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL Sprawi, by aplikacja nie staa si derivative Unika dystrybucji kodu GPL

Komunikacja at arm's length


1. W przypadku binariw: exec komunikator (sockety, DDE, WS (WCF), DCOM, DB, FS)

Long live the web services loophole

2. W przypadku bibliotek: wrapper + komunikator


(wrapper + jego strona komunikatora GPL)

Komunikacja at arm's length (exe)


Moemy zmodyfikowa aplikacj GPL by korzystaa z naszej DLLki

Komunikator execuje aplikacj GPL

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL Sprawi, by aplikacja nie staa si derivative Unika dystrybucji kodu GPL

Uproszczenie struktur danych


1. Brak definicji complex data.
C:\skrypty\skrypt1.r
CONNECT a=local s=srv d=db1 u=ala p=ZAQ!2wsx FETCH TrialData { y, x1, x2, x3} LOGIT MULT y~x1+x2+x3 PLOT DIAG STORE result_[date]_[time].csv

<analysis> <datasource> <host>local</host> <server>srv</server> ........................................... </datasource> <analysis> <type family=multinomial>GLZ</type> <variables> <var type=dep>y</var> <var type=indep o=1>x1</v </analysis>

Class UnitOfAnalysis{ DataDescr { Double[ ][ ] data AnalysisDescr { String name ResultDescr { 110111011010101010110101 01000100101010101010101 010100010100 100100

ID 1 2 3 4 5 6 7

Y A A C C B C B

X1 3.2 2.5 6.5 4.5 5.3 8.5 3.9

X2 2.1 1.1 4.3 3.1 7.6 5.2 8.2

X3 44.2 32.1 23.4 23.9 65.3 22.5 39.4

Uproszczenie struktur danych


Niech aplikacja sama pobiera dane z repozytorium i tam te oddaje wyniki. Jest to kolejny element separacji.

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL Sprawi, by aplikacja nie staa si derivative Unika dystrybucji kodu GPL

Uniezalenienie aplikacji od GPL


ZUPA, czyli aplikacja musi si: 1. zbudowa 2. uruchomi 3. poprawnie dziaa bez obecnoci kodu GPL. 4. umoliwi uycie alternatywnych komponentw

Rozwizanie: interfejsy + adaptery

Uniezalenienie aplikacji od GPL


Interfejsy pozwalaj: 1. Odseparowa aplikacj GPL od aplikacji o zamknitych rdach 2. Uy alternatywnej aplikacji, np. komercyjnej pod warunkiem zgodnoci interfejsw. W przeciwnym razie konieczny jest adapter dedykowany, bd oparty o mechanizm wczytywania konfiguracji

Uniezalenienie aplikacji od GPL


Dziki interfejsowi mona zastosowa zalepki

(mockowanie). Zalepka stanowi komponent, ktry oferuje bardzo ograniczon namiastk funkcjonalnoci potrzebnego komponentu GPL.

Aplikacja bdzie z nim dziaa, ale gdy system wykryje zainstalowany komponent GPL (lub inny waciwy, np. komercyjny), bezbolenie si na niego przeczy.

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL Sprawi, by aplikacja nie staa si derivative Unika dystrybucji kodu GPL

Zapewni warto dodan


Aplikacja moe atwo sta si pochodn kodu GPL nawet wwczas, gdy jawnie do niego nie linkuje, gdy uruchamia si niezalenie od niego i nie jest z nim dystrybuowana. Kluczem jest brak wartoci dodanej

Uniezalenienie aplikacji od GPL


Przykad pozytywny: Program pocztowy umoliwiajcy filtrowanie spamu. Do obliczenia klasyfikatora (bayesowski, SVM, NN) wykorzystywany jest pakiet statystyczny GNU R. Przykad negatywny: GNU R + GUI = graficzny program statystyczny Adriana O. Przykad trudny: Revolution rodowisko obliczeniowe oparte o GNU R, lecz zawarta w nim jest znaczna warto dodana.

Poskadajmy to razem
Jeli chcemy zamkn rda aplikacji, musimy:

Zapewni komunikacj at arm's length Uproci struktur wymienianych danych Uniezaleni aplikacj od kodu GPL Sprawi, by aplikacja nie staa si derivative Unika dystrybucji kodu GPL

Unika dystrybucji kodu GPL


Licencja GPL2 stosuje si jedynie do aplikacji przekazywanych (to convey) do odbiorcw

Nie stosuje si do aplikacji: 1. W modelu SAAS 2. Nie dystrybuowanych

Unika dystrybucji kodu GPL


Jak pozby si problemu dystrybucji kodu GPL? 1. Przerzuci instalacj na uytkownika

Zaoferowa mu usug wdroeniow Przygotowa automatyczny web-instalator

2. Dostarcza alternatywn bibliotek albo mock 3. Pozwala na prac z alternatywnymi komponentami 4. Oferowa usug serwerow SAAS

Unika dystrybucji kodu GPL

I agree completely. You simply cannot redistribute MySQL yourself. Many companies solve this by doing the install for their clients, so they charge for the service (act) of downloading and installing MySQL instead of the mysql itself.

Przykady
1. Statistica, SPSS, RapidMiner oferuj connector do GNU R. Pakiety te, jak rwnie GNU R, mog pracowa samodzielnie. Razem wietnie si uzupeniaj. GNU R jest darmowy, Statistica i SPSS mog kosztowa nawet > 80kpln/stanowisko 2. Pipeline Pilot R Collection 3.5k$/rok za nadbudwk R 3. REVOlution - $1000 / rok

It shouldn't suprise you. There are plenty of similar examples, such as CSIRO's gene expression image analysis viewer, Spotfire allows for a similar interaction, and BioConductor is "repackaged" for S-PLUS without much returned to the developers (by license design). [...] Think, "Red Hat Enterprise Edition" vs. Fedora. The latter has been usefully helped by people who have bought the former. someone's money to do these things. It takes

Tiwoizacja
Wykorzystywanie kodu copyleft w urzdzeniach, ktre nie umoliwiaj uruchomienia zmodyfikowanej wersji tego codu. Firma TiVo w produkowanych DVRach wykorzystywaa kod GPL, ktry podpisywaa cyfrowo. Przed takimi praktykami chroni licencja GPL 3.

Affero GPL

Wymusza udostpnienie rde take wwczas, gdy nie dochodzi do dystrybucji aplikacji, np. gdy dziaa na serwerze (SAAS, webserwis) FSF zaleca stosowanie tej wanie licencji zamiast GPL.

Inne licencje

LGPL X11 (MIT) (Massachusetts Institute of Technology License) Microsoft Public Licence MPL- Mozilla Public Licence BSD- Berkeley Software Distribution License Apache Licence Public domain freeware z adnotacj "for commercial use" lub bez adnotacji "for noncommercial use"

Inne licencje

LGPL X11 (MIT) (Massachusetts Institute of Technology License) Microsoft Public Licence MPL- Mozilla Public Licence BSD- Berkeley Software Distribution License Apache Licence Public domain freeware z adnotacj "for commercial use" lub bez adnotacji "for noncommercial use"

You might also like