KAPITOLA 1 Pracujeme s Linuxem Jeden z největších kamenů úrazu při vytváření softwaru pro Linux je pochopení toho, co Linux je, a co není. Linux pro různé lidi znamená různé věci. Z technického pohledu je Linux jako takový jádro operačního systému, které bylo vytvořeno Linusem Torvaldsem, nicméně většina lidí si pod termínem Linux vybaví robustní operační systém. Za několik málo let Linux povstal z temnot a stal se široce akceptovaným u všech skupin uživatelů. Linux se v dnešní době vyrovná ostatním operačním systémům dostupným na trhu. Často se používá nejenom v největších superpočítačích, ale současně ve spoustě nejmenších přístrojů, u kterých byste nikdy nepředpokládali, že mohou být založeny na Linuxu. Teď ve svém rozmachu – díky velkému jménu v moderních technologiích – Linux není vlastněn žádnou velkou společností, která by tahala za provázky. Linux je úspěšný díky mnoha tisícům vývojářů po celém světě, kteří se neustále snaží udělat Linux lepším. Tito lidé se (stejně jako vy) zajímají o vytváření velmi kvalitního softwaru, který zvyšuje zkušenosti ostatních v linuxové komunitě. Ať už pro vás osobně Linux znamená cokoliv, tuto knihu čtete pravděpodobně z toho důvodu, že se chcete naučit více o tom, jak se stát profesionálním linuxovým programátorem. Protože jste si zvolili tuto dráhu, brzy nepochybně zjistíte, že bude velmi užitečné, když pochopíte různé věci kolem Linuxu, například to, jakým stylem se Linux vyvíjí nebo v čem je odlišná práce v Linuxu od práce s jinými platformami, které jsou dnes dostupné na trhu. Pokud sebe považujete za experta v Linuxu, bude stačit, když tuto kapitolu pouze proletíte očima. Pokud teprve pracujete na tom, abyste se jím stali, tato kapitola vám rozhodně poskytne několik užitečných informací do začátku. V této kapitole se dozvíte více informací o tom, co Linux vlastně je a jakým způsobem spolupracují jednotlivé části linuxové distribuce z hlediska profesionálního programátora. Naučíte se více o vývojovém procesu, který se skrývá za Free, Libre a Open Source Software (FLOSS), který se používá v linuxových systémech. Dále objevíte přínos online komunit, které posilují revoluci v oblasti otevřeného kódu. A na závěr kapitoly si popíšeme několik rozdílů mezi Linuxem a jinými operačními systémy, se kterými jste se pravděpodobně v minulosti setkali. Takže – jdeme na to!
20
Kapitola 1 – Pracujeme s Linuxem
Stručná historie Linuxu Linux má velice rozmanitou a zajímavou historii, která se začala psát mnohem dřív, než si pravděpodobně myslíte. Historie Linuxu zahrnuje více než 30 let a začíná u prvních unixových systémů ze 70. let. Tento fakt není podstatný jenom pro nezdolné nadšence. Pro vás je důležité znát alespoň všeobecné informace z unikátní historie, která vedla k vytvoření moderních linuxových systémů, se kterými dnes pracujete. Pochopení historie Linuxu vás nejenom lépe připraví na zvládnutí různých výstředností, které odlišují Linux od jiných alternativ na trhu, ale také pomůže udělat vývoj Linuxu mnohem zajímavějším. První práce na Linuxu jako takovém začaly v létě 1991, ale dlouho předtím, než se objevil Linux, existoval projekt GNU. Tento projekt byl zaměřen na svobodný software a byl inspirován operačními systémy unixového typu. Původním cílem projektu bylo vyvinout operační systém se svobodnou licencí, který by neobsahoval žádný kód z původního UNIXu. Musíme říci, že bez tohoto projektu by Linux asi nikdy nevznikl, a kdyby neexistoval Linux, v této knize byste nenalezli žádné informace o projektu GNU. Oba projekty totiž těží jeden z druhého, jak sami zjistíte v této knize.
Projekt GNU V roce 1983 Richard Stallman (aka RMS) pracoval v laboratoři MIT zabývající se umělou inteligencí. V této době bylo velké množství aplikací k dispozici ve formě zdrojového kódu, aby uživatelé mohli v případě potřeby upravit kód aplikace pro svůj systém. V této době se ovšem současně začínal prosazovat velmi zajímavý trend – stále větší a větší množství výrobců softwaru totiž začínalo distribuovat pouze binární verze svých aplikací. A toto nakonec vedlo k tomu, že zdrojový kód aplikací se velmi rychle stal "obchodním tajemstvím" společností, které tímto způsobem chtěly ochránit svou práci před konkurencí. Počátečním cílem projektu GNU bylo vytvořit svobodný operační systém podobný UNIXu, který by obsahoval všechny nástroje a programy ve formě zdrojového kódu. Vytvoření většiny těchto nástrojů, programů (včetně kompilátoru GCC a textového editoru GNU Emacs) a dokumentace k nim trvalo více než deset let. Mnoho z těchto nástrojů získalo vynikající pověst díky své vysoké kvalitě a bohatým možnostem – jmenujme například kompilátor GCC nebo GNU debugger. Ačkoliv projekt GNU zaznamenal velký úspěch, v průběhu 80. let mu stále chyběl jeden velmi důležitý prvek. Tímto prvkem bylo vlastní jádro operačního systému, což znamenalo, že uživatelé museli instalovat nástroje a programy z projektu GNU na různé komerční operační systémy jako byl proprietární UNIX. Ačkoliv uživatele, kteří používali GNU nástroje a programy na svých proprietárních systémech, tato skutečnost pravděpodobně moc netrápila, projekt GNU jako celek nemohl být kompletní bez vlastního jádra. Intenzivní diskuse o různých alternativách (jako je GNU HURD) trvaly celé roky, než konečně přišel na svět Linux. Linux ovšem nikdy nevytvořil tu část operačního systému GNU, kterou si Richard Stallman představoval. Ve skutečnosti to bylo tak, že projekt GNU ještě po mnoho let pokračoval v prosazování mikrojádra GNU HURD přes linuxové jádro v konceptuálním systému GNU, a to i přes skuteč-
Linux PROFESIONÁLNĚ – programování aplikací
21
nost, že Linux se stal ukázkovým "dítětem" pro novou generaci uživatelů a vývojářů (a to se ani nezmiňujeme o jeho mnohem větší popularitě). I přes tyto skutečnosti můžete i dnes často vidět termín GNU/Linux, který je použit pro označení kompletního linuxového systému, který používá velké množství nástrojů a aplikací pocházejících právě z projektu GNU.
Jádro Linuxu Jádro Linuxu vzniklo podstatně později než samotný GNU projekt – o více než dekádu po tom, co Richard Stallman přišel se svým počátečním vyhlášením. V této době se ostatní alternativní systémy stále nacházely ve vývoji, přičemž obsahovaly nejenom mikrojádro HURD, ale také výukové mikrojádro Minix, které bylo vytvořeno Andrewem Tanenbaumem. A z mnoha různých důvodů nebyl žádný z těchto alternativních systémů považován za natolik připravený, aby mohl být všeobecně používán koncovými uživateli. Tedy až do doby, než přišel Linux. Vše začalo tak, že mladý finský student, který pracoval na univerzitě v Helsinkách, začal být frustrován mnoha věcmi, jež považoval v Minixu1 za nesprávně fungující. Začal tedy pracovat na svém vlastním systému, který byl speciálně navržen pro jeho vlastní mikropočítač AT-386. V této době se jednalo o špičkový kus hardwaru. Tímto studentem byl Linus Torvalds a právě on vedl projekt, který později vedl ke vzniku velkého množství linuxových společností. 1
Některé z těchto problémů přetrvávaly po mnoho let, což dokazují různé diskuse v prvních minixových a linuxových diskusních skupinách. Protože Linux o několik let později potvrdil svou dominanci na trhu, další vývoj Minixu (a jeho různých nástupců) byl založen pouze na akademickém zájmu několika lidí, kteří přemýšleli nad budoucími návrhy operačních systémů.
Linus pak v létě roku 1991, při příležitosti vypuštění první verze Linuxu, poslal následující oznámení do diskusní skupiny comp.os.minic: Datum: 25Aug 91 20:57:07 GMT Organizace: Univerzita Helsinky Zdravím všechny, co používají Minix – vytvářím (zdarma) operační systém (pouze koníček, nic velkého a profesionálního jako GNU) pro AT klony 386 (486). Pracuji na tom od dubna a je to prakticky hotovo. Chtěl bych získal nějakou zpětnou vazbu ohledně toho, co máte a nemáte rádi na Minixu, protože můj OS je mu v některých věcech velmi podobný (z praktických důvodů například používám stejný návrh souborového systému). Aktuálně jsem naportoval bash (1.08) a gcc (1.40) a vypadá to, že to funguje dobře. To naznačuje, že za několik měsíců práce jsem vytvořil něco použitelného a chtěl bych vědět, které schopnosti požaduje většina lidí. Jakékoliv návrhy jsou sice vítány, nicméně neslibuji, že je nakone implementuji.
22
Kapitola 1 – Pracujeme s Linuxem
I přes Linusovu prvotní skromnost se zájem o toto linuxové jádro velmi rychle zvyšoval – a to po celém světě. To samozřejmě vedlo nejenom k vypuštění několika nových verzí, ale také k nárůstu komunity uživatelů. Tito uživatelé, kteří všichni bez výjimky patřili mezi zkušené vývojáře (protože i samotná instalace Linuxu vyžadovala velké znalosti), se dobrovolně zapojili do vyřešení různých technických výzev a implementace mnoha nových nápadů. S prvotním vývojem Linuxu je tak spojeno velké množství vývojářů, jejichž jména si dnes už nikdo nepamatuje. Tito lidé si užívali skutečnost, že mohou pracovat na moderním a svobodném systému podobném UNIXu, který netrpí komplexností návrhu alternativních systémů. Linuxoví vývojáři se při vývoji linuxového jádra a programování nových funkcí spoléhali na velké množství již existujících nástrojů GNU. Samozřejmě netrvalo dlouho a zájem o Linux vzrostl natolik, že uživatelé Minixu začali houfně přecházet na Linux, což vedlo k velmi bouřlivým diskusím mezi tvůrcem Minixu Andrewem Tanenbaumem a Linusem Torvaldsem. Tanenbaum tvrdil, že design Linuxu je podstatně nižší kvality než design Minixu. Z filozofického hlediska to sice může pravda, nicméně totéž může být řečeno také o ostatních moderních operačních systémech. Pokud vás více zajímá historie Linuxu a ostatních operačních systémů založených na UNIXu, doporučujeme k přečtění knihu A Quarter Century of UNIX, kterou napsal Peter H. Salus (Addison-Wesley, 1994).
Linuxové distribuce S rostoucí popularitou linuxového jádra přišel i zájem o vytvoření Linuxu, který by byl dostupný i lidem, kteří nemají potřebné znalosti v oblasti programování. Na vytvoření použitelného linuxového systému potřebujete více než jenom jádro. Skutečnost je taková, že libovolný linuxový systém, který je určen pro koncové uživatele, je dnes použitelný pouze díky mnoha tisícům existujících programů, jež zajišťují různé věci – od startu systému až po funkčnost grafického pracovního prostředí (jakým je například GNOME). Když byl Linux poprvé představen, neexistovalo pro něj velké množství softwaru. Abych byl přesný – Linus v té době pro něj nabízel pouze jednu jedinou aplikaci: GNU Bourne Again Shell (zkráceně bash, což v doslovném překladu znamená "znovunarozený příkazový řádek"). Lidé, kteří někdy nabootovali Linux nebo UNIX do omezeného jednouživatelského módu, kde běží jenom bash, ví moc dobře, o co se jedná. Linus pomocí příkazové řádky provedl mnoho počátečních testů Linuxu, jenže ta samozřejmě na Linuxu nefungovala hned od začátku. Aplikace bash musela být prvně naportována z nějakého již existujícího systému (jako je Minix) a poté případně upravena, aby mohla bez problémů fungovat na novém operačním systému. Když stále více a více lidí začalo používat a vyvíjet software pro Linux, pochopitelně se zvyšovalo množství dostupného softwaru pro ty, kteří měli trpělivost jej nainstalovat. Jak ovšem postupoval čas dopředu, bylo čím dál tím více zjevnější, že kompilace každé nové instalace Linuxu z ničeho je neuvěřitelně komplikovaná (a také nepodporovatelná a neaktualizovatelná) noční můra, která bránila nadšenému objevování toho, co Linux může nabídnout. Řešení této velmi problematické situace přišlo v podobě linuxových distribucí, což jsou v podstatě předem vytvořené kolekce růz-
Linux PROFESIONÁLNĚ – programování aplikací
23
ných nástrojů, aplikací a linuxového jádra, které mohou být rozšiřovány prostřednictvím diskety (později prostřednictvím CD a internetu) širokému okruhu zájemců. Prvotní distribuce Linuxu tak byly jednoduše vymoženostmi pro lidi, kteří se chtěli vyhnout zkompilování celého operačního systému z ničeho, a kteří se nechtěli zabývat hledáním a instalací nového softwaru. Než byly vynalezeny první správci balíčků (package managers) RPM v Red Hatu a dpkg v Debianu, obyčejní uživatelé v podstatě nebyli schopni Linux nainstalovat, pokud neměli znalosti na úrovni experta. Více informací o správcích balíčků se dozvíte později v této knize – konkrétně v části, kde se budeme věnovat kompilaci vaší vlastní linuxové distribuce. Moderní linuxové distribuce mají spoustu podob a velikostí, přičemž jsou určeny různým skupinám uživatelů. V současnosti tak existují nejenom distribuce pro koncové uživatele Linuxu, ale také robustní distribuce určené pro velké společnosti nebo distribuce pro různá kapesní zařízení, jako jsou PDA a chytré telefony (smartphone). I když tyto distribuce využívají odlišné balíčky, mají obvykle několik společných rysů, na které se můžete spolehnout. Například většina distribucí se snaží dosáhnout určité úrovně kompatibility s LBS (Linux Standard Base), což je v podstatě standard sloužící pro zajištění kompatibility jednotlivých linuxových prostředí.
Svobodný software a open source Richard Stallman odstartoval projekt GNU a založil neziskovou organizaci Free Software Foundation pro jeho zastřešení. Pracoval také na první verzi General Public License (GPL, všeobecná veřejná licence), pod kterou je licencováno velké procento softwaru běžícího na Linuxu. GPL je velmi zajímavý dokument, protože jeho cílem není omezovat použití licencovaného softwaru, ale chránit právo uživatelů a vývojářů na přístup ke zdrojovým kódům2. 2
V době, kdy byla psána tato kniha, podstupuje licence GPL velké změny. Nová verze licence bude pravděpodobně patřit mezi nejvíce kontroverzní licence pro svobodný software. Obsahuje totiž nejenom poznámky k licencování patentů a dalších technologií, ale také se snaží postavit mimo zákon DRM (digital right management, správa digitálních práv), což je souhrnný název pro technické postupy, jejichž účelem je kontrolovat nebo omezovat využívání obsahu digitálních médií.
GPL dovoluje dělat změny v jádru Linuxu a v ostatním svobodném softwaru vytvořeném pod GPL, a to za předpokladu, že provedené změny zpřístupníte ostatním, aby je mohli použít (nebo je začlenit do příští verze software). Např. licence GPL vám dovoluje opravit chybu ve velké aplikaci typu Open Office, nebo přidat podporu nějakého nového audio formátu do multimediálního přehrávače v desktopovém systému GNOME. GPL vám jako vývojářům nabízí obrovskou flexibilitu ohledně modifikace Linuxu pro libovolný účel, přičemž zveřejníte všechny změny, aby i ostatní mohli těžit z vašich úprav. Tohle je smysl GPL, která se snaží udržet vývojářský proces otevřený. Naneštěstí pro Richarda Stallmana angličtina není vybavena přesným ekvivalentem francouzského slova libre ("svobodný"), protože anglické slovo "free" je chápáno nejenom jako "svobodný", ale také jako "zdarma". To vede k tomu, že mnoho lidí si plete koncept svobodného softwaru (free soft-
24
Kapitola 1 – Pracujeme s Linuxem
ware) se softwarem, který je zdarma. V praxi je to sice tak, že drtivá většina svobodného softwaru je k dispozici zdarma, nicméně existují i organizace, které vydělávají peníze na poskytování technické podpory a dalších služeb k softwaru licencovanému pod GPL, který rovněž poskytují. Na snížení chaosu spojeného s termínem "free software" byl vytvořen pojem "open source" (doslova "otevřený zdroj"), který se stal velmi populárním v devadesátých letech. Na rozdíl od svobodného softwaru se termín "open source" výslovně nezaměřuje pouze na software licencovaný pod GPL. Místo toho se odkazuje na všeobecnou touhu po softwaru, který poskytuje své zdrojové kódy (takže může být vylepšován a opravován ostatními), i když samotný zdrojový kód se nachází pod mnohem přísnější licencí než je GPL. Z tohoto důvodu existuje velké množství softwaru, který splňuje definici termínu "open source", a jenž současně nepatří mezi svobodný software. Je velmi důležité, abyste pochopili požadavky, které GPL klade na práci, kterou můžete vykonat změnou existujícího softwaru licencovaného pod GPL. I když po vás není vyžadováno, abyste GPL licenci použili pro své programy, musíte respektovat práva ostatních, kteří tak učinili. Existuje velké množství situací, kdy je GPL licence porušena – obvykle firmami, které ani netuší, že své změny jádra Linuxu by měly zveřejnit, aby se na ně mohli podívat i ostatní. Protože určitě nechcete patřit do této skupiny, ujistěte se, že vy i vaši kolegové znáte licenci GPL a jsou vám zřejmá práva a povinnosti z ní vyplývající.
Začátek vývoje První krok, který jako vývojář Linuxu uděláte, je ten, že se vybavíte vším, co je potřeba na zvládnutí úloh, jež leží před vámi. To znamená, že budete potřebovat vhodný vývojářský systém, na kterém budete provádět kompilace a testování vašich vlastních linuxových programů. Ze začátku vám k této činnosti dobře poslouží jakákoliv pracovní stanice. Pokud ale plánujete pracovat na větším množství softwaru, pravděpodobně se neobejdete bez pořádně výkonné mašiny, která dokáže znatelně snížit dobu kompilace, takže je dobré naplánovat její pořízení. Chtěli bychom zdůraznit, že autoři této knihy vám nechtějí nařizovat, kterou distribuci Linuxu si máte stáhnout, nainstalovat a používat. Existuje velké množství dobrých linuxových distribucí, takže je vlastně jenom na vás, kterou si nakonec zvolíte. Rozhodně ale dává smysl se podívat na nejznámější distribuce (alespoň ze začátku), abyste měli přístup do velmi aktivních komunit vývojářů, kteří vám mohou ochotně poradit s řešením vašich prvních chyb, jež nepochybně přijdou. Na webu www.distrowatch.com můžete najít informace o nejnovějších trendech v moderních linuxových distribucích. Tento web také poskytuje ke každé distribuci odkazy na užitečné informační zdroje. Pokud nevíte, jaká distribuce Linuxu je pro vás nejvhodnější, podívejte se na webové stránky http://www.zegeniestudios.net/ldc, kde naleznete docela hezký test.
Linux PROFESIONÁLNĚ – programování aplikací
25
Výběr linuxové distribuce V době, kdy je psána tato kniha, existuje na světě kolem 300 linuxových distribucí, přičemž tohle číslo se zvyšuje každým dnem, takže v okamžiku, kdy čtete tuto knihu, můžete považovat tento údaj za zastaralý. Počet dostupných distribucí je velký hlavně díky domu, že skoro všechen software v průměrné distribuci Linuxu se nachází pod licencí GNU GPL, takže v podstatě kdokoliv může vzít existující nástroje a programy a udělat z nich balíček pro svou vlastní distribuci. Tím se sice podporuje iniciativa a experimentování, nicméně to může současně vést k nezvládnutelné noční můře pro ty, co se rozhodli vytvořit softwarové balíčky pro všech 300 distribucí. Naštěstí pro vás, jako softwarového vývojáře, většina uživatelů Linuxu, které budete chtít podporovat, používá pouze několik distribucí, obvykle těch nejznámějších. A ti uživatelé, kteří tyto distribuce nepoužívají, s velkou pravděpodobností používají distribuce, jež vychází z těchto populárních distribucí. Je potřeba si uvědomit, že nové distribuce obvykle vznikají na základě speciálních požadavků určité skupiny uživatelů, přičemž těmto uživatelům je zcela jasné, že podpora jejich speciální distribuce nikdy nebude na takové úrovni, jakou mají k dispozici uživatelé distribuce, kterou používají statisíce lidí. A zde je seznam deseti nejpopulárnějších distribucí v době psaní této knihy:
Debian GNU/Linux.
Fedora (předtím známá jako Fedora Core).
Gentoo Linux.
Mandriva Linux.
Red Hat Enterprise Linux (RHEL).
Slackware Linux.
OpenSuSE.
SuSE Linux Enterprise Server (SLES).
Ubuntu.
Linuxové distribuce od Red Hatu Společnost Red Hat kdysi vytvořila linuxovou distribuci známou pod jménem Red Hat Linux (RHL). Tento název distribuce byl používán až do verze 0.9, kdy došlo k přejmenování této distribuce na Red Hat Enterprise Linux (RHEL). Přibližně ve stejném čase se distribuce Fedora od stejného výrobce stala komunitní distribucí pro všechny, kdo preferují kompletní open source verzi bez komerční podpory. Tato distribuce je velice populární mezi desktopovými uživateli a nadšenci, přičemž je široce používána nejenom vývojáři svobodného softwaru, ale také komerčními dodavateli, kteří potřebují ověřit funkčnost svého softwaru před tím, než ho přidají do verze Enterprise. Pro více informací o společnosti Red Hat se podívejte na web www.redhat.com. Projekt Fedora má svůj vlastní web na adrese www.fedoraproject.org.