> Často se vedou spory o situaci u dynamického linkování, ale podle FSF je situace naprosto stejná: pokud distribuujete moduly určené pro použití s konkrétním svobodným software u uživatele, vytvořili jste kombinované dílo a jako celek opět musí být zveřejněno pod GNU GPL – tedy i váš modul.
Jak je to v případě, kdy program používá GPL knihovnu, ale nedistribuuje jí, má jí pouze jako závislost, která se instaluje přes package manager?
Například když napišu python script pod MIT, který ale závisí na knihovně zveřejněné pod GPL. To najednou musím kód přelicencovat na GPL, i když knihovna samotná není součástí distribuce (=není vložená balíčku) mého projektu, je jen specifikovaná v requirements.txt?
Pokud je ta knihovna pod GPL, pak i všechny programy, které ji použijí, musí být pod GPL. Bez ohledu na to, jak jsou linkované. Občas se to vysvětluje v duchu "pro kompilaci potřebujete znát definici knihovny, takže vytváříte odvozené dílo od definice knihovny, která je nedílnou součástí knihovny a tudíž také pod GPL".
Tahle vlastnost GPL se obchází dvěma způsoby:
1. Autoři knihovny sami uznají, že je to kravina, a místo GPL použijí LGPL. Ta, zjednodušeně řečeno, definici knihovny prohlašuje za samostatnou část, se kterou si můžete dělat co chcete. Dokud nebudete linkovat staticky, tak na vás žádné požadavky nemá.
2. Mezi váš program a knihovnu vložíte další program. Ten bude používat knihovnu a volat váš hlavní program. Bude muset být uvolněn pod GPL, ale vy v něm nemáte prakticky nic, co by bylo tajné. Ale je to dost blbá drbačka s callbacky, protože tenhle GPL program musí volat ten váš ne-GLP, nikoliv naopak, jak by to bylo samozřejmé. Váš hlavní program pak bude samostatně funkční celek bez jakékoliv vazby na knihovnu nebo váš spojovací program, o jejichž existenci a definici nebude mít ponětí. Proto nebude odvozeným dílem. Ale píše se to dost blbě a přidaná hodnota je nulová.
Situace je docela růžová, většina důležitých knihoven je pod LGPL. Na GPL knihovnu narazíte jen zřídka a většinou je to jen chyba autora, kterou na požádání opraví.
Sice nepotřebujete .h, ale tu knihovnu znát musíte. Minimálně názvy funkcí a význam parametrů. A to je ta definice, kterou dle FSF licence GPL chrání. Zda je to .h soubor nebo například introspekce na tom nic nemění. Poohlédněte se po prohlášeních FSF, respektive pana Stallmana, na toto téma. Nebo koukněte na nějaký dokument o tom, co řeší LGPL.
Uniká. Popisuje to Karel ve svém příspěvku v bodě dva. Ta mezivrstva je sice odvozená od původního díla, ale od ní pak už není odvozený ten binární kód. Ona totiž naopak volá ten kód, ne tak, jak by to bylo logické. Čili pak je to:
jádro ← vrstva → binárka
Takže binárka je samostatný kus software rozhraním, se kterým „náhodou“ komunikuje jaderný modul napsaný pod GNU GPL. Tím se přetne ta nutnost relicencovat odvozené dílo, protože to odvozené dílo není.
to by mi fakt zajimalo, jak to v tom bode 2 funguje. Autor sice pise o tom, ze 'obrati' ten 'smer' volani, ale to je v pripadech ktere si dovedu predstavit zcela nerealne. Autor to popisuje jako 'drblacku', ale ja to povazuji za 'prakticky' nemozne.
Bylo by to mozno vysvetlit na nejakem prikladu. Mam hlavni program, ktery komunikuje s uzivatelem a podle potreby vola funkce nejake databazove knihovny. a ziskava tak data, ktera pak uzivateli zobrazi. Necht se ta funkce v tom hlavnim programu jmenuje
char *data(long rec_number);
ktera pro nejaky rec_number dodava ta data. Jak vypada ta 'meziknihovna'. Podle ceho se ta meziknohovna dovi, jake rec_number mam prave na mysli?
Nechapu ale hlavne, proc by to bylo treba delat. My to resime s meziknihovnou, ktera je pod GPL a pres shared memory komunikuje s tim NOT-GPL hlavnim programem a sama je slinkovana s tou GPL databazovou knihovnou. To je naprosto v souladu GPL - i kdyz - a to uz je pravnicke svinstvo ze strany FSF, ze kdyz se to distribuuje vsechno spolecne , tak FSF hrozi, ze to dá stejne k soudu. Vychodiskem v tom pripade je, ze je treba distribuci resit pres ruzne nosice nebo z ruznych webovych stranek.
Vypadalo by to uplne jednoduse ...
Mas ten mezikus, a ten se appky zepta "chces data?" Apka mu odpovi "jo chci ..." + naky parametry. Mezikus to veme, a zepta se databaze a odpoved vrati appce.
Ale jak sem rek, je to ptakovina, protoze takhle odvozeny SW nefunguje a nikdy nefungoval. Odvozeny SW neznamena, ze volas nejaky API. Odvozeny SW znamena, ze si integroval do toho SW cizi kod.
Pokud vaše meziknihovna komunikuje s tím NOT-GPL programem, pak je to v pořádku. Pokud váš NOT-GPL program komunikuje s vaší meziknihovnou, pak GPL porušujete. Toto pravidlo mi vadí, nesouhlasím s tím, ale pan Stallman na toto téma opakovaně vydával prohlášení, kde si stojí za tím, že už jen vědět, jaké má knihovna funkce a význam parametrů, znamená vytvářet odvozené dílo. Proto také máme LGPL.
Viz například třetí odstavec zde: http://www.gnu.org/licenses/why-not-lgpl.html
Co se příkladu týká, tak bohužel už C z rukávu nesypu, tak alespoň náznak pseoudokódu. Proprietární část sama definuje funkci, jakou chce volat. O existenci GPL knihoven neví, samo definuje, jak ta funkce má vypadat. A nabízí funkci, kterou může kdokoliv (kdo zná její definici) zavolat a nastavit callback. Pokud pak potřebuje tu funkci z GPL knihovny zavolat, tak se podívá, zda už někdo ten callback nastavil. Pokud ano, tak ho zavolá. Pokud ne, tak spadne.
GPL knihovna:
char *data(long rec_number);
Proprietární software:
definuj datový typ data_callback jako function (char * rec_number, char **data) return boolean;
data_callback data_callback_function ;
export boolean set_data_callback(data_callback x)
{
data_callback_function = x;
}
char *my_data()
{
char * data;
if ( data_callback_function != null )
{
data_callback_function(to_char(id), &data);
return( data );
}
throw "No callback setup yet";
}
GPL Interface:
boolean my_data_callback(char * rec_number, char **data)
{
char * i_data = gpl.data( to_long(rec_number) );
copy_text(data, i_data);
return(true);
}
init
{
proprietary.set_data_callback( &my_data_callback );
}
> pan Stallman na toto téma opakovaně vydával prohlášení, kde si stojí za tím, že už jen vědět, jaké má knihovna funkce a význam parametrů, znamená vytvářet odvozené dílo
Pan Stallman si může stát za čím chce, ale není to nic víc než názor jednoho člověka. Autoritativně to může rozhodnout jenom soud, a to ještě jenom v nějaké jurisdikci a pro konkrétní případ. (Tím neříkám, že nemá pravdu, jenom prostě není definitivní autorita v té věci)
Je to názor člověka, který tu licenci napsal. Pokud soud rozhodne jinak, tak pan Stallman, respektive FSF, udělá to, co už v minulosti udělali: prostě vydá GPL verze 4.
Osobně mě docela děsí, že někdo zcela ignoruje licenci i jejího autora a odvolávají se na soud. Když se vám ty podmínky, které vám autor licence uložil, nelíbí, tak se tomu SW vyhněte obloukem. Osobně považuji obcházení licence za nečestné. Její text není zcela jednoznačný, ale její autor k ní vydal poměrně rozsáhlá vysvětlení a mraky komentářů. Máte veškeré dostupné informace k tomu, abyste věděl, co tou licencí chtěl autor říct. Tak ho respektujte a nechtějte po soudech, aby ho nachytaly na nějakou chybu v textu.
> Je to názor člověka, který tu licenci napsal [...] Když se vám ty podmínky, které vám autor licence uložil, nelíbí
To je ale úplně zcestný směr uvažování. JÁ vytvořím nějaký soft a JÁ uděluju případně dalším lidem práva s tím softem nějak nakládat. Pokud se mi zdá, že to, co jim chci udělit, pěkně popisuje GPL, tak ji můžu použít. A pokud mám pocit, že někdo MŮJ soft použil v rozporu s tím, jaká práva jsem mu chtěl dát, tak se budu soudit JÁ s NÍM a co si o textu licence myslí pan Stallman je celkem jedno. Maximálně se může třeba tvrdit, že na významu té licence existuje obecná shoda a že ta druhá strana předpokládala, že jsem tou licencí myslel to, co jí myslí jiní lidi.
Ale v žádným případě neklade Stallman ani nikdo jiný na nikoho žádné podmínky. Stallman jenom napsal text. Podmínky ukládá autor softu. Je to stejné, jako bych na něco použil nějaký obecně dostupný vzor smlouvy - výklad autora toho vzoru je v případě smlouvy irelevantní. Jediné, co rozhoduje, je výklad soudu.
Do liceci si kdo chce muze psat co chce, je mu to hovno platny, kdyz neco specifikuje zakon, tak vzdy plati ten, a ne blabol v licenci. To je mimo jiny duvod, proc se M$ naprosto zasadne nesoudi kvuli EULA. Protoze by se jim mohlo stat, ze soud to prohlasi za neplatne zcela jiste z casti, nebo jako celek.
Modla? Proč modla? Je to autor té licence, on ji napsal. To mu dává dost velkou autoritu bez ohledu na to, kolik má uctívačů a kolik odpůrců. Osobně nechápu, proč je GPL tak populární. A z reakcí pod tímto článkem mám pocit, že u řady lidí hlavně proto, že vůbec netuší, co se v ní píše.
hi, diky za obsahlou odpoved.
Z tohio prikladu je jasne, co se temi callbacky primarne docili - jmena funkci a ani NIC dalsiho neni s puvodnim dilem spojeno. To je OK a je to i pekna programatorska finta, jak to udelat. Priznam se, ze ja bych na to sel asi tak, ze bych si vymyslel vlastni jmena funkci a i parametry bych totalne zprehazel, aby bylo jasne, ze to neni odvozene. (do 10 radku - tedy 10 funkcnich definic je kryto citaci z dila!).
Ted ale k tomu , co porad nechapu. Jsou ty 3 komponenty slinkovany do jednoho celku? To by samozrejme neslo, protoze pak by se delo vse v jednom adresnem prostoru a pak se jedna jednoznacne o odvozene dilo - at uz vola jakakoliv komponenta kteroukoliv jinou.
Jestlize vychazim z toho, ze ty GLP komponenty (databazova GPL knihovna a GPL meziknihovna) jsou slinkovany spolu a ten proprieterni dil je vedle, tak take spolu musi nejak komunikovat.
K tomu , co jste napsal, ze ta komunikace pres shared memory je porusenim GPL - tak to neni pravda. Neznam nejake jine fundovane zdroje nez nemecke a proto pro ty, kteri by se o to zajimali - jedna se o disertaci Fabiana Schäfera z roku 2010 s nazvem -'Der virale Effekt' (viralni efekt). V teto disertaci je velmi obsahle vysvetleno, kdy je mozno povazovat komunikace 2 komponent za odvozene dilo a co je potreba udelat , aby se o odvozene dilo nejednalo. (v principu jde o to, aby ta meziknihovna byla vytvorena trochu obecneji , minimalne musi existovat dokumentace k te funkci interface).
"Pokud je ta knihovna pod GPL, pak i všechny programy, které ji použijí, musí být pod GPL. "
To zní jako slušný nesmysl. Pokud program nechci distribuovat i s knihovnou, může mi to být ukradené. Když si ho ode mně někdo stáhne a zkompiluje vůči té knihovně, nebude nic porušeno (pokud ho s ní nebude distribuovat dále).