Free licenci, ale kterou?
Ani nevím, proč mě to popadlo, ale rozhodl jsem se důkladně projít licenční podmínky jednotlivých knihoven a komponent, které používám v YouTube Downloaderu, a ověřit, že všechno splňuji a YTD je zcela nenapadnutelný. Výsledek? Jsem zděšen, co některé známé a často používané licence vlastně umožňují a zakazují. Musím říci, že mi z toho jde hlava kolem, a příčinou není jen nestravitelný právnický jazyk těchto licencí.
Poznámka: Nejsem právník. Nekladu si ambice, rozebrat dostupné licence do posledního slova. Jde mi čistě jen o to, upozornit na některá vysloveně absurdní ustanovení, která jsou ve známých licencích obsažena, a která podle mě pro každého, kdo má v hlavě mozek, tvoří nepřekonatelnou překážku pro jejich používání. Pokud by se našel někdo s právnickým vzděláním, kdo by mě chtěl opravit a měl by to podložené solidní argumentací, budu jen rád – potřebuji nějakou použitelnou licenci. Ale kde ji sebrat?
GNU General Public License (GPL)
GNU GPL je dost možná nejrozšířenější licence pro „svobodný software“. Až dosud jsem s ní neměl problém, což bylo ovšem do značné míry dané tím, že jsem si ji nikdy nepřečetl a jen předpokládal, že je rozumná. Navíc jsem na ni většinou narazil v rolích, kde nijak zvlášť omezující není – jako koncový uživatel nebo jako vývojář programů, které nikdy nebudou šířeny. V souvislosti s YouTube Downloaderem jsem si ji ale přečetl a začínám chápat, proč ji někteří programátoři nemají rádi.
Jednou ze stěžejních vlastností GPL je ta, která je poprvé zmíněna už v nultém bodě licence a později ještě explicitně zopakována v bodu 2b (v GPL verze 2; v GPL verze 3 jsou to body 0, 5c): Zjednodušeně řečeno, pokud některý program používá část podléhající GPL, musí být celý program uvolněn jako GPL. Za to se už v minulosti řada lidí do GPL dost otřela, „proslavil“ se tak např. šéf Microsoftu Steve Balmer, který GPL přirovnal k rakovině.
Politiku a konkurenční boj stranou: Chápu, proč toto ustanovení v GPL je – brání to vývojářům, aby využili práci open-source komunity pro svůj prospěch, aniž by jí něco vrátili. Jenže to má poměrně zásadní dopad: Požadavek, „když program obsahuje GPL kód, musí být celý publikován pod GPL,“ bohužel znamená, že pokud program obsahuje GPL komponenty, nesmí obsahovat žádné jiné než GPL komponenty. Proč? Protože tyto ne-GPL komponenty by také musely být zveřejněny pod GPL, a na to obvykle vývojář nemá právo (licence ne-GPL komponent by musela „přelicencování“ umožnit). Požadavek GPL komponent (celý program jako GPL) tudíž obvykle nelze skloubit s požadavkem ne-GPL komponent a obě skupiny komponent se tak nemohou nacházet ve stejném programu.
Pokud si říkáte, „fajn, stačí používat jen GPL komponenty,“ dovolte, abych vás trochu zastavil v rozletu: vzájemně kompatibilní nejsou ani jednotlivé verze GPL; v jednom programu nemůžete kombinovat dokonce ani GPLv2 kód s GPLv3 kódem, pokud vám vývojář GPLv2 komponenty nedá právo přelicencovat ji na GPLv3 (např. tím, že vydá komponentu pod licencí GPLv2 „nebo novější“). Viz oficiální GPL FAQ (sledujte tabulku „I want to use a library under“ a zkuste najít kombinaci, ve které bude současně „OK“ pro „GPLv2 only“ i „GPLv3“).
YouTube Downloader naneštěstí spadá právě do té skupiny, která používá „GPLv2 only“ (RTMPDUMP) i „GPLv3“ (MSDL). Naštěstí (to jsem neplánoval, měl jsem víc štěstí než rozumu) tvoří GPLv2 i GPLv3 komponenty úplně samostatné celky, které se dokonce nacházejí v samostatných binárních souborech, takže se s trochou dobré vůle vejdou do kolonky „borderline cases“ v sekci Používání GPL pluginů v ne-GPL programu; a kdyby to nestačilo, tak holt oba pluginy odstraním úplně a zájemci si je budou muset stáhnout samostatně (vlk se nažere, koza zůstane celá a uživatel okrouhá, jak ironické).
Mozilla Public License (MPL)
Druhá licence, na kterou jsem se podíval, je Mozilla Public License, kterou YouTube Downloader používá v komponentě TPerlRegEx (podpora pro regulární výrazy). Z hlediska vývojáře je v mnoha ohledech podstatně rozumnější než GPL, mimo jiné se nechová jako virus a nepožaduje, aby program využívající MPL komponentu byl celý vypuštěn pod MPL (tzn. ani nebrání tomu, aby program kombinoval komponenty vydané pod více licencemi).
Má ale jinou lahůdku: Podle bodu 6.2 u MPL automaticky platí obdoba „or newer“ z GPL – tzn., komponentu vypuštěnou pod MPL mohu podle své libovůle používat buď pod verzí MPL, pod kterou byla vypuštěna, nebo pod libovolnou novější. Ten, kdo má pod kontrolou tvorbu MPL, tak dostává od vývojáře bianco šek – není žádné omezení proti tomu, aby zítra vyšla Mozilla Public Licence verze 2, která umožní např. vyžadovat po originálním autorovi úhradu za to, že používám jeho program.
Pravda, je tu jisté omezení: Podle bodu 6.1 může nové verze MPL vydávat pouze „Netscape Communications Corporation“, tzn. ten bianco šek dávám jen jedné firmě (to mě fakt uklidňuje). „Drobný“ problém vidím v tom, že subjekt oprávněný měnit MPL je identifikován právě jen výše uvedeným jménem – co se stane, když si někde v Banánistánu založím úplně novou firmu „Netscape Communications Corporation“?
Pro YouTube Downloader z toho naštěstí neplyne nic zásadního. TPerlRegEx mohu používat jen nadále, jen bych musel být idiot, kdybych program uvolnil pod tou stejnou licencí.
Na další licence se podívám později, pro dnešek už mám právničtiny plné zuby.
Ta poslední věta říká, že získat oprávnění k užití díla mohu i jinak než prostřednictvím GPL – třeba tak, že mi dílo autor poskytne pod BSD. Smysl tohoto bodu mi ale zůstává utajen – IMHO buď získám dílo pod jinou licencí než GPL, a pak se mě GPL netýká vůbec včetně tohoto bodu, nebo získám dílo podle GPL a pak budu muset dodržet všechno, co po mě GPL chce, včetně toho, že celé dílo i každou jeho komponentu budu muset vypustit pod GPL.
GPL v3 v češtině:
c) Celé dílo musíte licencovat touto Licencí pro každého, kdo si kopii opatří anebo s ní jinak přijde do styku. Licence se, spolu s jakýmikoli dalšími podmínkami podle odstavce 7, proto vztahuje na dílo jako celek a na všechny jeho části, bez ohledu na to, jak je dílo a jeho části balené. Tato Licence nedává povolení k licencování děl jiným způsobem, ale pokud jste toto povolení získali jinak, tato Licence takové povolení neruší.
Tj. poslední větu chápu tak, že pokud část díla je pod jinou licencí (např. pod BSD) tak GPL to neruší. Každopádně GPL je mor. Ale některé knihovny jsou pod několika licencemi např. GPL, MPL a BSD a programátor si může vybrat.
„In order to use the GPL-covered plug-ins, the main program must be released under the GPL or a GPL-compatible free software license, and that the terms of the GPL must be followed when the main program is distributed for use with these plug-ins.“
[http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins]
Jak já jako autor programu můžu ohlídat, aby tam někdo nezkooušel nastrkat GPL pluginy?
Před časem jsem psal článek na podobné téma (a kdo říká, že takový nikdy nenapsal, tak ho píše dodneška)! Dovolím si odkaz, a doporučuju projít i diskusi:
http://www.misantrop.info/proc-nepouzivam-gpl
http://www.misantrop.info/jeste-jednou-k-licencim
Na BSD se chci podívat co nejdřív, stejně jako na Apache License. Dnes už na to nemám sílu.
Spravedlivý trest za to, že používáš věci, co jsi nečetl 😉
Tohle je důvod, proč je u mě už delší dobu standard 3-clause BSD. Je to jednoduché, přehledné a stejně je mi představa, že bych vynucoval GPL (resp. AGPL, u webovek je GPL virus naprd) dost…kdo by se s tim sral.