Licence podle GNU a BSD

4. 1. 2000
Doba čtení: 7 minut

Sdílet

GNU Public Licence (GPL) je často (zejména mezi zastánci Linuxu) považována za nejlepší a nejvolnější licenci, které se ostatní nevyrovnají. Mezi námi, lidmi ze světa BSD, se jí naproti tomu občas říká "GPL virus" a "GPL mor", software šířený pod touto licencí jako "software nakažený GPL" a preferujeme software používající BSD-like licenci.

V čem je problém GPL, v čem je lepší BSD-like licence? Jaké jsou implikace použití té či oné, ať už z pohledu nezávislého vývojáře či komerční firmy? To se pokouší diskutovat následující článek.

Historické souvislosti

Cíl BSD byl poskytnout vysoce kvalitní operační systém, který není svazován omezujícími licenčními podmínkami (v oné době poloviny sedmdesátých let hlavně AT&T, kontrolujícího Unix) a s kterým je možno si volně hrát, systém, který má pomoci na svět novým technologiím (virtuální paměť, TCP/IP) i sloužit jako základ dalšímu vývoji. Licence, pod kterou byl operační systém BSD šířen, v krátkosti povoluje dělat se zdrojovým kódem cokoli (včetně použití v closed-source projektu). Jediné, co vyžaduje, je to, aby při vychvalování těch vlastností výsledného produktu, které souvisí s přejatým kódem, bylo explicitně řečeno, že kód je založen na práci originálního autora. Licence obsahuje tyto čtyři body:

  1. redistribuce ve formě zdrojového kódu musí zachovat informaci o autorských právech, seznam podmínek používání a poznámku o tom, že autor není zodpovědný za případné problémy vzniklé používáním jeho produktu
  2. redistribuce v binární podobě musí uvést informaci o autorských právech, podmínky používání a onu poznámku v dokumentaci a/nebo v jiných materiálech přiložených k distribuci
  3. všechny reklamní materiály hovořící o vlastnostech nebo použití tohoto software musí obsahovat následující sdělení:

    Tento produkt obsahuje software vyvinutý na Kalifornské univerzitě v Berkeley a jejími přispěvateli.

  4. ani jméno Kalifornské univerzity ani jméno přispěvatelů nesmí být použito ke schvalování či prosazování produktů založených na tomto software bez specifického, předem daného písemného povolení

Anglické znění plné BSD licence viz hlavičkový soubor <netinet/udp.h> z distribuci NetBSD.
BSD-like licence je pak licence v základě stejná jako ta výše uvedená, jen se na místě univerzity v Berkeley objeví jméno jiného autora či organizace – třeba NetBSD, FreeBSD, BSDi nebo OpenBSD.

GPL naproti tomu vychází z myšlenky Richarda Stallmana o softwarovém komunismu, tj. všechny programy by měly být dostupné včetně zdrojových kódů, zdarma nebo maximálně za cenu distribučních nákladů. Svoboda uživatele software pod GPL je explicitně zaručena povinností poskytovatele dát volně komukoli k dispozici zdrojový kód produktu, je explicitně zaručeno právo modifikovat a redistribuovat daný software kterékoli třetí straně, pokud splní podmínky uvedené v GPL. Podívat se na přesné znění GPL je možné například na českých stránkách GNU, kde je k dispozici i originál v angličtině.

Proč „mor“?

Jednoduše proto, že GPL kód dále infikuje licencí GPL kód, s kterým se dostane do styku. Bod 2 licence GPL řeší podmínky, za kterých je možno modifikovat program pod GPL nebo použít jeho část v jiném software. Sekce b) říká:

b) Jakoukoli práci, kterou publikujete nebo předáváte, která celá nebo i částečně obsahuje nebo je odvozena z Programu (pozn.: rozumí se programu pokrytého touto, tj. GPL, licencí) nebo jakékoli jeho části, musíte licencovat zdarma všem třetím stranám v podmínkách této licence.

Tento bod ve zkratce znamená:

Jakmile použijete část GPL kódu ve své práci, celá výsledná práce MUSÍ být dána k dispozici zdarma a pod GPL.

Na konci sekce 2 je ještě dovysvětlení, ve kterém se mimo jiné říká (plné znění viz výše uvedený odkaz):

Pokud šíříte určitou část programu samostatně (a ona část nebyla odvozena z programu pod GPL), v tom případě nemusí být ona samostatná část šířena pod GPL; jakmile je ale ona část šířena společně se zbytkem programu, který používá GPL kód, celek musí být šířen v rámci podmínek GPL, která přebíjí jiné použité licence a tedy každá jednotlivá část je šířena pod GPL, ať už daný kód napsal kdokoli.

Existuje LGPL (Library-GPL) – ta ve zkratce znamená, že pokud je GPL kód v samostatné sdílené knihovně, aplikace může tuto knihovnu používat, aniž by musela být pod GPL. LGPL samotná ovšem problém neřeší – někdy by se hodilo použít jen část kódu v poněkud modifikované podobě a originální knihovna nemůže být použita. Ani knihovnu pod LGPL přitom nelze přibalit k distribuci produktu, aniž by se nakazil i zbytek aplikace licencí GPL. LGPL vede také k zajímavé anomálii, kdy program nelze slinkovat s danou knihovnou staticky – takto zkompilovaný program by fyzicky obsahoval GPL kód a tedy by musel být šířen pod GPL. Toto je problém například na operačním systému Linux nebo Hurd – kdyby komerční program byl slinkován staticky, obsahoval by přinejmenším část GNU libc a musel by tedy být šířen pod GPL. Možnost distribuovat komerční aplikaci staticky slinkovanou a vyhnout se tak chaosu sdílených knihoven tedy pro tyto systémy neexistuje.

Stránka GNU diskutuje (bohužel v angličtině), proč nepoužívat LGPL, proč by se i pro knihovny měla používat klasická GPL. Stojí za přečtení. Velmi dobře je vidět šílenost lidí stojících za hnutím GNU. Onen text bohužel neodpovídá na otázku:

Čím se má živit nezávislý softwarový vývojář – opravdu chceme, aby se donekonečna všechno reimplementovalo jen proto, že za výsledek své nemalé práce chce člověk dostat zaplaceno?

Další zajímavá anomálie kódu pod GPL je, že GPL nákaza může do programu přijít i přes hlavičkový soubor – pokud je hlavičkový soubor pod GPL a definuje například struktury nebo konstanty, zkompilovaný program obsahuje části GPL kódu a tedy musí být šířen pod GPL. Tohle je problém systémů založených na GNU software (např. Linux nebo Hurd), kde vývojáři mohou dát snadno i důležitý systémový hlavičkový soubor pod GPL a zapomenout, že systém má být použitelný i pro komerční software …

Kód pod GPL == mrtvý kód

Software šířený se zdrojovým kódem má základní výhodu v tom, že v případě potřeby je možné program upravit tak, aby lépe vyhovoval individuálním potřebám uživatele či uživatelů; je také možné opravit případné chyby hned, bez nutnosti čekat na akci původního autora. Z hlediska nezávislého programátora má takový software další výhodu – lze se poučit z kódu a recyklovat jeho části v nových programech; podívat se na konkrétní implementaci použitých algoritmů a vyhnout se nové implementaci (a novým chybám) prostě tím, že se použije léty ověřený kód z jiného programu.

GPL se zaměřilo na pouhou přístupnost zdrojového kódu s minimálním ohledem na možnost jeho dalšího využití. Kód, který je pod GPL, je jednou provždy ztracen pro programátora, který se chce svou prací živit (tj. vydělávat na ní peníze) a ne si psaním jen krátit dlouhou chvíli – podle podmínek GPL není možné si za práci používající GPL kód, účtovat víc než náklady na dopravu k příjemci (tj. např. cenu za CD médium apod.). Ještě jednou zdůrazňuji významný fakt:

Komerční programátor tedy nesmí použít žádný kód pod GPL, pokud chce za výsledek své práce dostat zaplaceno.

Licence GPL také často zabrání použití daného software při nekomerčním, univerzitním vývoji – výsledky takového vývoje jsou totiž obvykle k dispozici volně a GPL je v tomto případě příliš omezující. GPL jednou provždy zamezuje použití výsledků takového výzkumu v (komerční) praxi.

Kdy použít GPL

Jednoduše tehdy, když chcete, aby jakákoli odvozená práce byla dostupná ve zdrojovém kódu a zdarma a/nebo si chcete udělat oko u zákazníků použitím pseudo-volné licence a přitom nedat konkurenci šanci využít vaší práce ve svých produktech (to je například případ „uvolnění“ zdrojového kódu k XFS firmou SGI) či zabránit použití vašeho kódu v systémech, které dbají na opravdovou, reálnou svobodu nakládání se zdrojovým kódem (tj. *BSD). Také tehdy, pokud na programu nejste schopni vydělávat a chcete zabránit schopnějším, aby váš kód použili pro komerční produkt.

Kdy použít BSD-like licenci

Tehdy, když chcete poskytnout software pro volné užití každému a je pro vás důležité, aby z vašeho kódu mělo užitek maximální množství lidí, ať už přímo nebo nepřímo přes jiné projekty, založené na vašem kódu. Pokud pro vás není důležitá ani ona „reklama“ zajištěná bodem 3) BSD-like licence, je tento bod možné vynechat. Ve skutečnosti právě tohle mnoho lidí ze světa *BSD dělá, protože s větším počtem přispěvatelů se ono „dávání kreditu“ každému jednotlivě poměrně obtížně zvládá. Dokonce i autoři BSD asi před půl rokem vydali oficiální prohlášení, že bod 3) originální BSD licence pozbývá platnosti a není povinný pro zdrojový kód odvozený z originálního BSD.

Takže která je lepší?

bitcoin_skoleni

Názor ať si udělá každý sám. Záleží na tom, jestli píšete software jen pro někoho nebo z jeho existence mají profitovat všichni. Záleží na tom, jestli se chcete ocitnout ve světě, kde sice všechen software bude volně k dispozici včetně zdrojového kódu, ale kde nebude možné tento kód použít pro vývoj software, kterým se člověk chce živit. Licence GPL vede ke zbytečné duplikaci úsilí a opakované implementaci stejného nebo podobného kódu (tedy přesně k tomu, čemu se prý snaží zabránit!) místo toho, aby jako BSD licence dovolila vývojáři soustředit se na to nové, v čem se jeho program či aplikace od dosud napsaného liší. Práce (ať jakkoli významná), kterou člověk vloží do programu nebo operačního systému šířeného pod GPL, je pro něj osobně navždy ztracena. Pokud bude chtít to samé použít pro komerční aplikaci, musí to napsat znovu a jinak.

Podtrženo sečteno, chce-li člověk o svém software s čistým svědomím prohlásit, že je šířen volně, nemůže jej dávat k dispozici pod svazující a omezující licencí GPL, ale použít některou méně restriktivní – například licenci podobnou té v BSD.

Autor článku