Hlavní navigace

Proč není ZFS kompatibilní s Linuxem a nikdy nebude?

Petr Krčmář 12. 4. 2016

Organizace Free Software Foundation stojící za licencemi GNU se vyjádřila ke kompatibilitě CDDL. Obě licence jsou bohužel neslučitelné, takže není možné s Linuxem distribuovat ZFS.

Po deseti letech se opět na světlo dostává otázka kompatibility licencí CDDL a GNU GPL. Důvodem je souborový systém ZFS, který původně vznikl pro Solaris a jeho kód je sice otevřený, ale vydaný pod jinou licencí než linuxové jádro. Proto se do distribucí ještě donedávna nepřidával, což se ale začíná postupně měnit.

Čtěte: ZFS nebo Btrfs: stabilita vs. podpora v distribucích

Debian se před časem rozhodl přidat do distribuce alespoň zdrojový balíček, který si uživatel může triviálně zkompilovat a nasadit. Přestože se tvůrci bojí licenční nekompatibility, chtějí alespoň takto uživatelům usnadnit cestu. Ubuntu proti tomu chce souborový systém distribuovat v binární podobě, protože podle právníků společnosti Canonical nepředstavuje CDDL žádný problém a licenčně je vše v pořádku. Všichni to ale tak jednoznačně nevidí a Software Freedom Conservancy pokládá takové spojení kódů za porušení GNU GPL.

Zájem o ZFS ale mezi uživateli bezesporu je, což ukazují například čísla z Debian Popularity Contest – podle něj má podpůrnou knihovnu spl-linux nainstalovanou 0,53 % uživatelů. Přesnost čísel z této statistiky je sice velice sporná, ale pokud ji vezmeme jen jako obecný ukazatel zájmu či nezájmu, pak se ukazuje, že své uživatele ZFS v Linuxu má.

Právě proto se opět na přetřes dostala otázka kompatibility CDDL a GNU GPL. Pokud by totiž bylo možné začlenit kód do jádra nebo alespoň distribuovat v balíčcích jednotlivých distribucí, zjednodušil by se tím přístup k ZFS.

K problému se vyjádřila organizace Free Software Foundation (FSF), která stojí za vznikem licencí z rodiny GNU a je považována za autoritativní zdroj v jejich vykládání. Abychom pochopili celý problém, musíme si nejprve nastínit, jak je vlastně kompatibilita licencí posuzována.

Různá přísnost licencí

Podle FSF zásadní otázka konkrétní licence u software zní, za jakých podmínek je možné jej rozšířit novým modulem pod jinou licencí. Velmi volné licence jako X11 nebo Apache 2.0 umožňují přidat ke kódu libovolný uzavřený binární modul, čímž se z původně svobodného kódu stává kód nesvobodný, respektive jako celek šířený pod jinou licencí.

Copyleftové (chcete-li virální) licence jako GNU GPL ale požadují, aby takto rozšířený kód byl opět šířen pod stejnou licencí. Jinými slovy takto není možné kód uzavřít, ale vždy je nutné jej modifikovat a dále distribuovat pod svobodnou licencí. Napsal jsem copyleftovou licenci pro GNU, aby měli všichni uživatelé všech budoucích verzí stejná práva, jaká jsem se jim rozhodl dát, vysvětluje ve zprávě Richard Stallman.

Pokud už zůstaneme u GNU GPL, pak je právě tato vlastnost pro náš případ se ZFS klíčová: nestačí, aby odvozené (rozšířené) dílo bylo zveřejněno pod nějakou svobodnou licencí. Musí být distribuováno vždy s naprosto stejnou původní licencí – GNU GPL. Cílem je, aby budoucí uživatelé měli stále stejná práva a aby další modifikátor nedostal možnost dílo v budoucnu uzavřít.

Tato pravidla platí pro veškerý kód, který do toho původního přidáváte, bez ohledu na to, kdo je jeho autorem. Pokud by tomu tak nebylo, měl by kdokoliv v ruce jednoduchou omluvu pro ignorování pravidel licence a pouhým přidáním cizího kódu by omezil uživatele na jeho právech.

Toto vše samozřejmě neplatí v případě, že si kód modifikujete soukromě bez dalšího šíření. Taková modifikace je možná a licence s ní výslovně počítá. Ustanovení o zachování licence vstupuje v platnost až v případě dalšího šíření výsledného modifikovaného kódu. Ten musí být vždy opětovně distribuován pod stejnou licencí – GNU GPL.

Zdrojový versus binární kód

V licenci GNU GPL 2 se píše:

…a „work based on the Program“ means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.

Toto ustanovení se netýká jen modifikace stávajícího kódu, ale jakýkoliv přidaný materiál musí být opět distribuován pod stejnou licencí. Pokud kód neumožňuje takové licencování, není možné jej kombinovat s kódem jednou vydaným pod GNU GPL a společně je distribuovat.

V případě binární podoby software je jedinou možností spojení opět licencování celého díla pod GNU GPL – binárního i zdrojového kódu. Jedině tak je možné legálně (bez porušení licence původního díla) rozšířit zdrojový kód o binární modul. To je základní princip licence GNU GPL a dalších copyleftových sourozenců.

Licence nejprve vyjmenovává pravidla pro distribuci zdrojových kódů a pak dodává, že je také možné jako doplněk šířit pod stejnou licencí i binární variantu. GNU GPL tedy dovoluje šíření binární podoby modifikovaného svobodného software, pokud je dodáván také kompletní zdrojový kód – včetně všech modulů.

Linkování licenci nezachrání

Jedním ze způsobů kombinování software je takzvané linkování, kdy jeden program může použít rutiny z jiného. Vývojáři obvykle mluví o „statickém“ nebo „dynamickém“ linkování. V případě statického je veškerý kód přímo zkombinován do jednoho binárního souboru. Dynamické linkování umožňuje zachovat oba soubory oddělené a propojit je až při použití na uživatelově počítači.

V případě statického linkování je situace jasná – kód je propojen a včetně všech modulů se z něj stává jeden program. Pokud je alespoň část původního zdrojového kódu šířena pod GNU GPL, musí být výsledek šířen pod stejnou licencí.

Č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.

Jinými slovy: statické či dynamické linkování nehraje žádnou roli v posuzování vztahu k licenci GNU GPL. FSF byla během let mnohokrát oslovena řadou různých právníků a my jim dáváme vždy stejnou odpověď. Není překvapením, že by často chtěli jinou interpretaci, která by vyhovovala jejich klientům, ale jimi dodané argumenty jsou slabé a jsou v rozporu s názorem většiny odborníků, píše se ve zprávě.

O licenci rozhoduje autor

Autor kódu je ten, kdo vybírá jeho licenci. Je na něm, zda někomu umožní libovolné další použití nebo výjimky. Vydání pod GNU GPL tedy vůbec nebrání tomu, aby byl kód zároveň původním autorem licencován třeba také pod MPL. Obě licence pak zůstávají zcela v platnosti. Tvůrci Linuxu se rozhodli jej vytvořit pod GNU GPL 2 a mají právo to kdykoliv změnit, nikdo to ale nemůže udělat za ně.

Stejně tak autoři ZFS mohou kdykoliv rozhodnout o zveřejnění pod licencí GNU GPL 2 a tím umožnit souborový systém legálně začlenit do linuxového jádra nebo je alespoň distribuovat společně. Bylo by to ideální řešení a my vyzýváme držitele práv na ZFS, aby tak učinili, uvádí zpráva.

Když je licence příliš přísná

Někdy se stává, že se licence dostane do konfliktu se zájmy uživatelů. Například v roce 1991 byla C knihovna v SunOS distribuována mimo operační systém a instalovala se společně s kompilátorem. Tím pádem se na ni nevztahovala výjimka na systémové knihovny uvedená v GNU GPL verze 1 – ovšem přesně pro takové knihovny byla tato výjimka určena.

Proto později vznikla druhá verze licence GNU GPL, která rozšiřovala výjimku z virálnosti také na knihovny dodávané s kompilátorem. S vydáním nové licence se situace narovnala všude tam, kde byl kód zveřejněn „pod licencí GNU GPL verze 1 či pozdější“.

Podobně v roce 2006 vznikla licence GNU GPL 3, která řešila problém „stahování“ software pomocí BitTorrentu. V takové situaci totiž stahování automaticky znamená redistribuci, protože si části kódů uživatele vyměňují mezi sebou. Redistribuce binárních souborů tak porušovala GNU GPL 2 a třetí verze tedy explicitně tento problém vyřešila a aplikovala se opět na veškerý software vydaný pod GNU GPL určité verze „či pozdější“.

Podle Stallmana zatím není důvod vydávat další verzi GNU GPL, ale situace ve světě se mění a pokud dojde k nějakému dalšímu problému, možná bude třeba vydat verzi 4 nebo 3.1 a pak se tento problém vyřeší i za všechny autory, kteří ke své licenci přidali „či novější“.

Ztráta práv ve verzi 2 a 3

Pokud někdo distribuuje dílo vydané pod licencí GNU GPL, kterou porušuje, ztrácí právo distribuce tohoto díla. Mezi verzemi GNU GPL 2 a 3 se ale konkrétní mechanismus změnil.

V původní verzi 2 z roku 1991 ztratil porušovatel práva automaticky, okamžitě a nezvratně licenci k redistribuci. Bez výjimek. Aby získal své právo zpět, musel požádat držitele práv o obnovení licence. Před pětadvaceti lety nebylo běžné, že by za autorstvím svobodného software stála větší skupina vývojářů. Dnes je běžné, že velké projekty vytváří stovky nebo tisíce lidí a získat od nich jednotlivě souhlas je nemožné.

GNU GPL 3 před deseti lety upravila i způsob, jakým je možné obnovit právo distribuce. Jakmile porušovatel ukončí své závadné jednání, jeho právo je okamžitě obnoveno. Držitel práv má 60 dnů na své námitky a pokud je dodatečně uspokojen, může opět udělit trvalou licenci. Linuxové jádro ovšem stále zůstává pod licencí GNU GPL 2, takže se na něj vztahuje původní přísný mechanismus.

Licence ZFS není kompatibilní s Linuxem

FSF ve své zprávě jasně říká, že licence ZFS (CDDL) není a nemůže být kompatibilní s licencí linuxového jádra (GNU GPL 2). Co znamená kompatibilní vysvětluje FSF na svém webu:

Abychom mohli zkombinovat dva programy (nebo jejich podstatné části) do nějakého většího celku, potřebujeme povolení použít takto oba programy. Jestli to licence těchto dvou programů dovolují, pak jsou kompatibilní. Když neexistuje žádný způsob, jak zároveň naplnit požadavky obou licencí, potom jsou vzájemně nekompatibilní.

Tento problém nevzniká v případě software vydaného čistě pod GNU GPL. Vydavatelé binárních souborů (typicky tvůrci distribucí) je vydávají pod správnou licencí a dodávají k ním kompletní zdrojové kódy. V případě kombinace dvou různých kódů vydaných pod dvěma různými licencemi musí ale obě licence takovou distribuci umožňovat.

Typicky problém nastává v případě proprietárního software – společná distribuce není možná, neboť proprietární licence neumožňuje přelicencování na GNU GPL a má zároveň (řádově) striktnější pravidla pro zacházení s dílem. Obě licence jsou poté logicky zcela nekompatibilní.

Podobné je to ale i u jiných licencí, které zaručují jen dostupnost zdrojového kódu, ale například neumožňují jeho modifikaci, sestavení nebo další šíření. Taková licence je opět striktnější než GNU GPL a proto je s ní nekompatibilní – nedává uživateli stejná práva a nemůže být se svobodným kódem kombinována.

Dostáváme se k licenci CDDL, pod kterou je vydán souborový systém ZFS. Ta také obsahuje řadu omezení neslučitelných s pravidly stanovenými v GNU GPL. Například se v ní píše:

[§]3.1 … Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. …

[§] 3.4 … You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License

CDDL je „slabá copyleftová licence“, umožňuje tedy vytvářet binární podobu programů, která je vydána pod jinou licencí než původní zdrojový kód. Je tak zajištěna možnost spojení tohoto kódu s přísněji licencovanými díly, což ale GNU GPL výslovně zakazuje. Zároveň, jak je patrno z ukázky, kód vydaný pod CDDL musí být vždy distribuován pod touto licencí.

Právě tím vzniká nekompatibilita: není možné uspokojit uživatele přiřknutím všech práv GNU GPL (včetně dodržení licence na binární podobu) a zároveň nezměnit licenci CDDL. Výsledný kód tedy nemůže být distribuován, protože by porušoval obě licence. Toto je hlavní (ale nikoliv jediný) licenční problém, který znemožňuje distribuci binární podoby ZFS společně s Linuxem.

Výsledným zkombinováním obou kódů totiž podle licence GNU GPL musí vzniknout opět kód distribuovaný pod GNU GPL. To není možné zajistit, protože Oracle vydal ZFS pod licencí CDDL a jen on to může změnit. Podle zprávy Software Freedom Conservancy navíc Sun v době vydání ZFS tuto licenci zvolil zcela záměrně a o nekompatibilitě věděl. Chtěl totiž zabránit tomu, aby se kód z Linuxu dostal do Solarisu a zároveň, aby nebylo možné jednoduše přebírat technologie ze Solarisu do Linuxu – což se právě u ZFS povedlo.

Celá situace ukazuje na absurdnost a dlouhověkost podobných licenčních blokací – projekt OpenSolaris skončil a jeho zdrojový kód stále není možné jednoduše využít ve zbytku svobodného software vydaného pod GNU GPL. Oracle už teď nemá praktický důvod držet se staré licence, bylo by pro něj snadné licenci dodatečně upravit nebo kód vydat zároveň pod GNU GPL. Jak píše Richard Stallman, bylo by to ideální řešení.

Našli jste v článku chybu?

12. 4. 2016 14:41

daemon (neregistrovaný)

A proto je potřeba ZFS používat ve FreeBSD... ;-) Tam žádný politický problém není.

12. 4. 2016 12:45

> projekt OpenSolaris skončil a jeho zdrojový kód stále není možné jednoduše využít ve zbytku svobodného software

Tohle mi přijde jako trochu zavádějící formulace - někdo by mohl nabýt dojmu, že ten kód je nějaký "abandonware". Tak to není, jednak existují komunitní pokračovatelé OpenSolarisu a navíc kód pořád žije v komerčním Solarisu.

Btw, výzva vydat ZFS pod GPL je dost absurdní - ZFS je killer feature a Sun (natož teď Oracle) neměl a nemá motivací jím pomáhat konkurenci, aby si kanibali…

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...