I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error. Be thankful you are not my student. You would not get a high grade for such a design :-)
-- Andrew Tanenbaum to Linus Torvalds
Na rozdíl od Microsoft Windows a jemu podobných, operační systém Linux není jednolitý, magický, celek. Je tvořen z mnoha částí, kde se každá stará o určitou část chodu systému. Každá tato část je podrobně zdokumentována tak, aby každou z nich mohl vyvíjet oddělený tým. Je podstatné se v této architektuře orientovat, protože pokud něco nefunguje a vy víte, kdo je za to zodpovědný, je váš úkol mnohem snazší.
Jádro Linuxu zodpovídá za:
Proto je nutné, aby jádro procesy na hardware nepustilo a všechny přístupy dělalo za ně. Jednou z nejgeniálnějších myšlenek Unixu je, že veškerý tento přístup sjednotil pod práci se soubory. Hardwarová zařízení (třeba floppy disk) jsou pak pouze speciální soubory. Zápisem do takového soubory pak píšete na disketu. To umožňuje, aby i programy, které nejsou určeny pro práci se zařízením s ním pracovaly a ušetří se tak čas programátorovi, který se nemusí učit nové API.
Pokud hardware umí nějaké triky, které se špatně schovávají pod práci se souborem, může podporovat IOCTL, kterým se například nastavuje formát diskety, nebo samplovací frekvence při výstupu na disk.
O jednotlivé zařízení se starají ovladače, které v původním Unixu byly napevno zakompilované do jádra. To je poněkud nepříjemné, protože při změně hardwaru musíte překompilovávat jádro. Linux dnes podporuje dynamické zavádění těchto ovladačů pomocí modulů.
Linux má v poslední době velice dobrou podporu nejrůznějších periferií a mnoho hardwarových firem již distribuuje jejich vývoj. Přesto je ale dobré konzultovat seznam podporovaného hardware, než si něco nového koupíte.
Mezi základní operace pro práci s procesy, které jádro umí je rozdělení procesu na dva běžící zároveň (fork) a vyměnění kódu běžícího procesu (exec) - daný proces se ukončí a je nahrazen novým programem.
Na rozdíl od klasického Unixu, Linux podporuje i multithreading.
Standardně se paměť procesu skládá z jeho kódu (který program nemůže měnit), neomezeně rostoucího zásobníku a z druhé strany adresního prostoru rostoucí haldy.
Navíc jádro vytváří virtuální paměť a odkládá části na disk, pokud to je třeba.
Jádro Linuxu obsahuje velmi kvalitní správu paměti. Mezi jeho přednosti patří:
Unix zavádí pojem uživatele a skupiny, které se v jádře udávají jako čísla. Každý proces má svého uživatele a skupinu. Prostředky pak mají své vlastníky a skupiny mají nastavena přístupová práva zvlášť pro svého majitele, svoji skupinu a ostatní. U souborů jsou vždy tři základní parametry - přístup ke čtení, zápisu a spuštění.
Navíc Unix předpokládá existenci správce - speciálního uživatele "root", s identifikačním číslem 0. Tento uživatel může dělat vše, bez přihlédnutí k přístupovým právům. Navíc jádro zprostředkovává několik služeb pouze pro něj - například jako jediný má právo rebootovat systém.
Někdy však někdy chce správce (nebo i jiný uživatel) "propůjčit" uživateli nějaká práva. Například mu chce dovolit rebootovat systém, existuje ještě jedna berlička jménem "sbit". Má-li soubor s programem tento bit nastaven, program má povoleno na sebe převezmout přístupová práva vlastníka souboru. Tak například program "reboot" spuštěn normálním uživatelem na sebe může vzít práva superuživatele a restartovat systém.
Toto je poněkud nebezpečný trik, protože v případě, že program označený sbitem obsahuje chybu, a uživatel jej může donutit k tomu, aby udělal co potřebuje, vznikne bezpečnostní díra v systému. Je tedy třeba si na takové programy dát zvláštní pozor.
Díky tomu některé pozdější systémy existenci takto všemocných uživatelů ruší a zavádějí flexibilnější systém uživatelských práv. Linux zatím nic takového standardně neumí, i když se na tom pracuje. Tyto přístupy však mají jiná úskalí.
Na rozdíl od Unixu, Linux obsahuje abstrakci mezi vlastním ovladačem filesystému a systémovým voláním. Umožňuje tak vyjma svého vlastního filesystému (ext2) i pracovat s jinými filesystémy: adfs, affs, coda, efs, msdos, vfat, hfs, hpfs, isofs minix, ncpfs, nfs, ntfs, qnx4, sysv, ufs, romfs, smbfs. A tak se domluví s většinou ostatních operačních systémů.
Na rozdíl o Windows v Unixu neexistují pojmenované disky (a:, c: apod.). Všechny disky jsou "naroubovány" do podadresářů hlavního filesystému. Roubování a odroubovávání filesystému se provádí voláním mount a umount.
Linux podporuje mnoho speciálních triků, jako je firewall, nebo Masquerading, který dokáže připojit celou síť k internetu pomocí jedné IP adresy. Proto je Linux jeden z nejlepších operačních systémů pro síťové servery.
Vyjma TCP/IP Linux podporuje i některé další protokoly například appletalk, nebo ipx. Proto poslouží třeba i jako "Novellový" server.
Pro práci v síti Linux používá API BSD soketů, které je dnes nejrozšířenější.
Sytém při startu dělá několik důležitých věci:
Konfigurační soubory Linuxu najdete v adresáři /etc. Na rozdíl od Windows jsou to normální textové soubory a tak je můžete opravovat textovým editorem. To dodává velkou kontrolu na systémem a konfiguraci značně zjednodušuje. Pokud máte v oblibě user friendly okénka, existuje několik nástrojů, které soubory změní za Vás.
Pokud toužíte po grafice a user friendly vymoženostech, můžete ale číst dál.
Základem X je grafický server, který je navržen tak, aby komunikoval s aplikací pomocí síťových soketů. To umožňuje, aby aplikace běžela na jednom počítači, ale zobrazovala se na druhém. Původně autoři zamýšleli, že aplikace poběží na sálovém počítači a Xserver bude speciální hardware. To se sice dnes moc nepoužívá, přesto ale není od věci mít možnost spustit program přes síť. Navíc do dává možnost, aby se k počítači připojilo více klávesnic a monitorů a pracovalo na něm tak více uživatelů.
Server obsahuje pouze nejzákladnější primitiva pro práci s grafikou (i když v průběhu let se díky snaze stále odpovídat moderním vymoženostem značně zkomplikoval). Vzhled aplikace už není jeho starost. Dokonce se nestará ani o dekorace oken, které ma na starosti zvláštní aplikace jménem WindowManager. O vzhled tlačítek a menu se zase stará speciální knihovna, kterou obsahuje aplikace.
Dále X systém obsahuje knihovnu Xlib, která se stará na aplikační straně o síťovou komunikaci, několik základních utilit a dnes zcela zastaralý window-manager twm a GUI toolkit Athena (který ale na svoji dobu obsahoval revoluční objektově orientovanou technologii a umožňoval vytvářet dialogy bez pevně zadrátovaných souřadnic, tak aby se přizpůsobovaly velikosti písma a délce textů)
Flexibilní návrh X je sice moc pěkný, ale vedl k problémům. Vzniklo totiž mnoho Window managerů a mnoho GUI toolkitů a tak každá aplikace vypadala dost jinak a aplikace spolu moc nespolupracovaly. To se podařilo řešit až v poslední době, kdy díky projektům GNOME a KDE, se prosadily jako defakto standard prosadily dvě knihovny (GTK a QT) a používá se jen několik málo Window managerů, jejichž schopnosti jsou téměř identické.
Proto doufám, že tento odvěký problém X se brzy stane minulostí. Další nevýhodou je poměrně velká složitost (a tím i náročnost na paměť), která vznikla snahou přizpůsobit se všem grafickým vymoženostem za 30 let. Jeho komplikovanost ale není větší, než u Windows či MacOS.
O společnou část kódu X se stará organizace Open Group (dříve X consorcium), která své kódy zpřístupňuje dalším firmám, které dodělávají podporu pro danou platformu. Free softwarovou implementace X vyvíjí organizace XFree86.
Tyto projekty byly poměrně důležitým mezníkem ve vývoji Linuxu, protože v podstatě odstartovaly seriózní snahy udělat Linux vhodný pro "normální uživatele". Za poslední rok vznikl grafický program GIMP, který odpovídá známému Photoshopu a rozjelo se několik projektů o vytvoření kancelářského balíku pro Linux. Uvidíme, jak budou úspěšné.