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

12. 4. 2016
Doba čtení: 10 minut

Sdílet

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.

ict ve školství 24

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

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.