Linux (jádro)

Linux
Logo
VyvíjíLinus Torvalds (tvůrce), Linux Foundation a další
Rodina OSUnix-like
DruhSvobodný software
První zveřejnění17. září 1991
Aktuální verze6.12.6 / 19. prosince 2024
Podporované platformymultiplatformní
Typ jádramodulární monolitické jádro
Programovací jazykC (C11 od 5.18),[1]
Rust (od 6.1),[2]
Assembler
LicenceGNU GPLv2
StavAktivní
Oficiální webwww.kernel.org

Linuxové jádro (Linux kernel) je otevřené (open source) systémové jádro používané unix-like operačním systémem GNU/Linux. Je vydáváno pod licencí GPLv2 a kompatibilními spolu s výjimkou, která umožňuje jeho používání společně s komerčním softwarem.[3] Je na něm založena skupina operačních systému pro osobní počítače a servery (obvykle ve formě linuxových distribucí) a různé typy vestavěných zařízení jako routery, WPA, telefonní systémy, set-top boxy, chytré televizory a jiné. Operační systém Android pro tabletové počítače, chytré telefony a chytré hodinky využívá služby poskytované linuxovým jádrem a implementuje jeho funkce. Zatímco využití na stolních počítačích je nízké, operační systémy založené na Linuxu mají převahu téměř v každé jiné oblasti výpočetní techniky – od mobilních zařízení až po sálové počítače. Od listopadu 2017 běží na Linuxu všech 500 nejvýkonnějších superpočítačů na světě.[zdroj?] Ovladače jsou součástí jádra a tzv. "mainline" ovladače zařízení jsou velmi stabilní. U rozhraní mezi jádrem a moduly jádra (LKM), na rozdíl od mnoha jiných jader a operačních systémů, není zaručena neměnnost.

První verzi jádra naprogramoval Linus Torvalds v roce 1991 pro sebe na architektuře i386, od té doby se Linux rozšířil na obrovský počet jiných architektur.[ujasnit] Torvalds je dodnes nejvyšší neformální a respektovanou autoritou jeho vývoje.[zdroj?] Torvalds poskytl zdrojový kód veřejně jako svobodný software a díky tomu se následně k vývoji přidaly tisíce programátorů z celého světa.

Název Linux

Linus Torvalds chtěl svůj systém pojmenovat Freax, slovo vzniklé zkombinováním anglického slova freak (případně free) a písmene x jako odkazu na Unix, protože Linux se mu zdálo příliš sebestředné. Když později své soubory nahrál na FTP server (ftp.funet.fi), administrátor serveru Ari Lemmke adresář se soubory nazval Linux, jelikož se mu jméno Freax nelíbilo.[4]

Název Linux původně označoval jen samotné jádro, ale velmi brzy byl název komunitou zevšeobecněn a vztažen na celý systém, který se skládá z jádra operačního systému, knihoven, pomocných nástrojů a dalšího aplikačního software a je souhrnně označován jako linuxová distribuce. Toto označení je však kontroverzní a nepřesné, proto distribuce odvozené z Debianu používají název GNU/Linux, se kterým sám Linus nesouhlasí, protože GNU nástroje netvoří již dlouho významnou část distribuce (přestože právě GNU nástroje byly prvními, které byly v Linuxu použity).

Související informace naleznete také v článku GNU/Linux kontroverze.

Vývoj jádra

Jádro bylo původně napsáno pro procesory architektury i386, ale postupně bylo portováno na mnoho dalších platforem. Je skoro celé napsáno v jazyce C, využívá některá rozšíření překladače GCC a obsahuje úseky kódu v jazyce symbolických adres (nepřesně assembler) v syntaxi AT&T.

Do linuxového jádra přispívá téměř 12 000 vývojářů z 1 200 různých firem z celého světa. Od roku 2005 se počet vývojářů ztrojnásobil. 70–95 % vývojářů je za svoji práci placeno, čili neplatí mýtus, že je jádro vyvíjeno jen dobrovolníky. Největšími přispěvateli do jádra jsou společnosti Red Hat (11,2 % změn), Novell (8,9 % změn), IBM (8,3 % změn) a následují Oracle, MontaVista a Cisco. Do jádra se denně průměrně doplní 3 621 řádků kódu a nová verze vychází zhruba jednou za 2,7 měsíce.[5]

Historie

Linus Torvalds začal vyvíjet jádro Linuxu v roce 1991 jako svůj koníček. Byl tehdy studentem finské univerzity v Helsinkách v oboru informatiky (součástí studia jsou unixové operační systémy). Vlastnil počítač kompatibilní s IBM PC s procesorem i386. V této době však neexistoval pro IBM PC volně dostupný unixový operační systém a Linusovi se nechtělo za komerční platit (MINIX, XENIX, SCO Unix).[zdroj?] Tyto skutečnosti spolu s faktem, že byl výborný programátor, vedly k zahájení prací na tom, co bylo později označeno jako „Linux“.

Mezi důvody pro vznik právě unixového systému patřil fakt, že Unix je systém, který upřednostňuje jednoduchost.[zdroj?] Linus byl dále inspirován MINIXem od Andrewa Tanenbauma, který napsal svoji verzi unixového systému jako doprovodný projekt ke své výuce a knihám o operačních systémech. Na rozdíl od něj však Linus nevyužil svůj projekt komerčně, protože preferoval otevřený vývoj (viz open source software).

Vývoj Linuxu začal jako emulátor terminálu napsaný v jazyce symbolických adres architektury IA-32 (tj. i386 a novější) a v programovacím jazyce C, který mohl být po překladu do binární podoby nabootován z diskety, takže mohl běžet mimo původní operační systém. V emulátoru terminálu běžela dvě vlákna: jedno pro odesílání znaků na sériový port a druhé pro příjem. Když pak chtěl Linus číst nebo zapisovat data na disk, rozšířil tento terminál, který uměl přepínat úlohy, o ovladač souborového systému. Terminál se pak pomalu začal rozvíjet v jádro unixového operačního systému (kompatibilní se standardem POSIX).

První verze linuxového jádra (0.01) byla na Internetu zveřejněna 17. září 1991.[6][7] Linus Torvalds k němu do usenetové skupiny comp.os.minix napsal:

Pracuji na (svobodném) operačním systému (jako koníček, nebude to velké a profesionální jako gnu) pro klony 386(486) AT.
— Linus Torvalds

V jádře 0.01 byla zahrnuta dostatečná infrastruktura pro spuštění unixového shellu bash. Původně bylo pro nastavení, kompilaci a instalaci Linuxu potřeba použít funkční systém MINIX. Též pro jeho zavaděč musel být použit jiný operační systém, ale brzy vznikly nezávislé zavaděče, z nichž nejznámější bylo LILO.

K Linusově překvapení byl o jeho nedokonalý systém velký zájem a záhy začal dostávat e-mailem další podněty, opravy a zdrojové kódy. Linus jádro dále vyvíjel a zároveň začal příspěvky ostatních do svého jádra začleňovat. Upravené zdrojové kódy obratem zveřejňoval (další verze byla zveřejněna již v říjnu). Od té doby se na vývoji podílely tisíce vývojářů z celého světa. Model vývoje linuxového jádra a podobného softwaru byl později výstižně popsán v eseji Katedrála a tržiště (anglicky The Cathedral and the Bazaar) od Erica S. Raymonda.

Již velmi brzo předběhl Linux ve vývoji svůj vzor – MINIX.[zdroj?] Zejména v počátcích byl při vývoji využíván Projekt GNU, který se již delší dobu zabýval myšlenkou vývoje volně dostupného unixového systému, avšak vlastní jádro operačního systému neměl. Z projektu GNU hned od počátku Linux využil výše zmíněný GNU bash a další nástroje (základní unixové nástroje používané na příkazovém řádku, kompilátor GCC, později též GNU C Library a další). Sám Linux však nikdy nebyl součástí GNU, i když samotné jádro používá licenci GPLv2, která též pochází od GNU.

Linus je dodnes[kdy?] hlavou vývoje jádra, které je zveřejňováno na serveru kernel.org.[8] Sám vydává nové verze, přičemž některé starší verze jsou udržovány jinými lidmi. Kromě něj se na vývoji podílejí tisíce programátorů z celého světa.[9] Již delší dobu[kdy?] se dá říct, že vývoj jádra je z velké části placen firmami, jako jsou Red Hat, Intel, IBM a další.[10]

Popularita

Obrovský nárůst popularity operačního systému Android, který využívá linuxového jádra, dělá z Linuxu nejpoužívanější jádro pro mobilní zařízení, čímž konkuruje všem jádrům všech ostatních operačních systémů vůbec.[zdroj?] Existuje mnoho desktopových linuxových distribucí využívajících linuxové jádro, ale podíl distribucí Linuxu je v porovnání s ostatními operačními systémy malý.[zdroj?]

Časová osa

Architektura

Linuxové jádro je koncipováno jako jednolitá část kódu s podporou načítání externích modulů. Toho se využívá ke zvýšení stability, urychlení běhu jádra, zmenšení velikosti samotného jádra a zmenšení paměťových nároků.[zdroj?]

Linuxové jádro obsahuje podporu opravdového multitaskingu (umožňuje provozovat více úloh/aplikací zároveň), virtuální paměti, správy paměti (správa paměti řízená jádrem, nikoli aplikacemi), sdílených knihoven, modulů, sdílených copy-on-write spustitelných souborů a nezávislých síťových vrstev podporujících mimo jiné síťové protokoly IPv4 a IPv6.

V současné době je Linux modulárním monolitickým jádrem. Ovladače zařízení typicky běží v ring 0 s plným přístupem k hardwaru, avšak některé se nacházejí v uživatelském prostoru. Na rozdíl od standardních monolitických jader lze ovladače zařízení jednoduše konfigurovat jako moduly a za běhu je zavádět či odstraňovat. Rovněž na rozdíl od typických monolitických jader lze na moduly za určitých podmínek uplatňovat preemptivní multitasking. Tato vlastnost byla přidána za účelem lepšího řízení hardwarových přerušení a pro zlepšení podpory symetrického multiprocesingu. Preemptivnost navíc snižuje latenci (odezvu), což je důležité v real-time aplikacích a desktopových nasazeních.

Fakt, že Linux není mikrojádro, byl známým tématem flame waru mezi Linusem Torvaldsem a Andy Tanenbaumem v diskusní skupině comp.os.minix v roce 1992.[15][16]

Hardware je také začleněn do systému souborů. Rozhraní ovladačů zařízení k uživatelským aplikacím je zobrazeno prostřednictvím položky v adresářích /dev nebo /sys. Informace o procesech jsou také mapovány do souborového systému prostřednictvím adresáře /proc.

Různé vrstvy v Linuxu, ukazující oddělení uživatelského prostoru a prostoru jádra
Uživatelský

prostor

Uživatelské aplikace Například bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox atd.
Komponenty systému nízké úrovně: Systémoví démoni

systemd, runit, logind, networkd, PulseAudio

Okenní systém

X11, Wayland, SurfaceFlinger (Android)

Další knihovny:

GTK +, Qt, EFL, SDL, SFML, FLTK, GNUstep atd.

Grafika:

Mesa, AMD Catalyst, Vulkan...

C knihovna open (), exec (), sbrk (), socket (), fopen (), calloc (), ... (až 2000 podprogramů)

glibc chce být POSIX / SUS-kompatibilní, uClibc cíle integrované systémy, bionic psaný pro Android atd.

Prostor jádra Linux jádro stat, splice, dup, read, open, ioctl, write, mmap, close, exit, atd. (asi 380 systémových volání)

System Call Interface (SCI, cílem je být kompatibilní s POSIX / SUS)

podsystém Plánování procesu podsystém IPC podsystém

Správa paměti

podsystém

Virtuální soubory

podsystém sítě
Další komponenty: ALSA, DRI, evdev, LVM, mapovač zařízení, Plánovač sítí Linux, Netfilter

Moduly zabezpečení Linuxu: SELinux, TOMOYO, AppArmor, Smack

Hardware (CPU, hlavní paměť, zařízení pro ukládání dat atd.)

Programovací jazyk

Linuxové jádro je napsáno ve verzi programovacího jazyka C podporované v GCC (který zavedl řadu rozšíření a změn do standardu C) spolu s množstvím krátkých částí kódu napsaných v assembleru (v GCC v syntaxi AT&T) cílové architektury. Kvůli rozšířením C podporuje, GCC byl po dlouhou dobu jediným kompilátorem schopným správně sestavit linuxové jádro.

Kompatibilita kompilátoru

GCC je výchozí kompilátor pro zdrojové kódy linuxového jádra. V roce 2004 společnost Intel tvrdila, že modifikovala jádro tak, aby jej jejich kompilátor C mohl sestavit také. V roce 2009 byl zaznamenán další takový úspěch s modifikovanou verzí jádra 2.6.22.

Od roku 2010 probíhá úsilí o vybudování jádra linuxu s Clangem, alternativním překladačem pro jazyk C. K 12. dubnu 2014 oficiální jádro mohl skoro sestavit Clang. Projekt věnovaný tomuto úsilí je pojmenován LLVMLinux po infrastruktuře kompilátorů LLVM, na které je Clang vybudován. LLVMLinux se nesnaží rozvíjet linuxové jádro nebo LLVM, a proto je to meta-projekt složený z patchů, které jsou nakonec předkládány na upstream projekty. Díky tomu, že je jádro Linuxu kompilováno společností Clang, patří mezi další výhody i rychlejší kompilace ve srovnání s GCC, vývojáři jádra budou mít prospěch z rychlejšího pracovního postupu kvůli kratším časům kompilace.

Správa za běhu

Aktualizace bez rebootu mohou být dokonce aplikována na jádro pomocí živých patchovacích technologií, jako jsou Ksplice, kpatch a kGraft. Minimalistické základy pro patchování jádra byly sloučeny do hlavního řádku linuxového jádra ve verzi 4.0, která byla vydána 12. dubna 2015. Tyto základy, známé jako livepatch, založené primárně na funkčnosti jádra ftrace, tvoří společné jádro schopné podporovat live patching jak kGraft, tak i kpatch, tím, že poskytuje aplikační programovací rozhraní (API) pro moduly jádra, které obsahují horké patche a aplikační binární rozhraní (ABI) pro nástroje pro správu uživatelského prostoru. Obyčejné jádro obsažené v jádře Linuxu 4.0 však podporuje pouze architekturu x86 a neposkytuje žádné mechanismy zabezpečení.

Verze

Číslování verzí

Verze jádra jsou (až na níže uvedenou výjimku) značeny trojicí číslic oddělenými tečkami např. 2.0.10, 2.2.23, 2.4.31 a z poslední řady 2.6.1. První dvě čísla označují tzv. vývojovou řadu neboli větev (2.0.x, 2.5.x, 2.6.x). Řady se sudým druhým číslem jsou stabilní, ostatní jsou nestabilní. Nestabilní řady přecházejí ve stabilní, které se vyvíjí paralelně. Například řada 2.3 přešla v 2.4, řada 2.5 přešla v 2.6 (ale 2.4 se stále vyvíjí). Některé vlastnosti z novějších řad se přenášejí i do starších – tomu se říká backport.

Mezi každou změnou číslice za druhou tečkou ve verzi přichází na řadu kandidáti novější verze.

Vezmeme-li v úvahu jádro 2.6.16, následníkem je 2.6.17. Jeho finálnímu uvolnění předchází vystavení balíků v kandidátské verzi 2.6.17-rc1, -rc2 atd. většinou v týdenních intervalech. Až poté, co se vývoj dostatečně ustabilní (v posledních -rc je změn méně a většinou jsou to jenom opravy), uvolní se finální verze, ve zmíněném případě to bude 2.6.17.

V nedávné době doznalo číslování drobných změn. Řada 2.6 je nyní vydávána s dalším (čtvrtým) podčíslem. Po uvolnění finální verze (2.6.17) se začne vyvíjet 2.6.18-rc1, -rc2 atd. Pokud se během vývoje objeví opravy kritických nebo bezpečnostních chyb, jsou zařazeny do podverze poslední stabilní verze (2.6.17.1, 2.6.17.2 atd.). Vývojové -rc verze totiž obsahují nové neotestované vlastnosti, a proto většina uživatelů používá stabilní verze. Tyto opravné verze umožní uživateli mít stabilní jádro s posledními bezpečnostními bugfixy (opravami bugů).

Nemůžeme opomenout jádra vydávaná dalšími osobami. Přípona tvořená ze znaků jména, přezdívky či zkratky účelu je obvykle připojovaná na konec verze. Chceme-li použít real-time jádro, získáme aplikovatelný kód, který přidá do názvu -rt. Vývojáři často používají jádro Andrewa Mortona s příponou -mm. Svého času bylo populární i -ac Alana Coxe.

Údržba

Linus Torvalds dohlíží pouze na změny týkající se poslední verze jádra. Správu starších verzí s dlouhodobou podporou svěřil do rukou jiných programátorů:

Verze jádra[17] Správce Vydáno Podpora do
5.15 Greg Kroah-Hartman a Sasha Levin 2021-10-31 2023-10
5.10 Greg Kroah-Hartman a Sasha Levin 2020-12-13 2026-12
5.4 Greg Kroah-Hartman a Sasha Levin 2019-11-24 2025-12
4.19 Greg Kroah-Hartman a Sasha Levin 2018-10-22 2024-12
4.14 Greg Kroah-Hartman a Sasha Levin 2017-11-12 2024-01
4.9 Greg Kroah-Hartman a Sasha Levin 2016-12-11 2023-01

Programovací jazyky

V současné době (květen 2024) je z vyšších programovacích jazyků podporován jazyk C (konkrétně verze C11)[1] a od linuxového kernelu verze 6.1 i jazyk Rust.[2] Od verze 6.9 je v kernelu podporován Rust i pro procesorovou architekturu ARM.[18]

Existují také rozšíření umožňující programování součástí v jazyce C++. O této skutečnosti se mnohokrát diskutovalo, nicméně s výsledkem takovým, že nelze podporu C++ v nativním linuxovém jádře očekávat ani v budoucnu.[zdroj?]

Platformně závislé úseky vyžadovaly komunikaci s hardwarem na nižší úrovni, a proto se v podstromu architektur vyskytuje kód napsaný základním strojovým jazykem – assemblerem.

Přenositelnost

Linux momentálně[kdy?][zdroj?] dokáže běžet na následujících počítačových platformách:

Kompletní seznam portů se nachází na Linux Ports Archivováno 12. 2. 2006 na Wayback Machine..

Licencování

Jádro samotné je poskytováno pod licencí GPLv2. Některé části mohou být pod licencí GPLv2 a novější (označováno jen jako "GPL"), případně i pod dalšími svobodnými licencemi.

Moduly (ovladače) mohou být tvořeny pod záštitou jedné z hned několika licencí: GPL, GPLv2, GPL s dalšími právy, duální BSD/GPL, duální MPL/GPL a konečně proprietární. Moduly s proprietární licencí jsou ale problematické – nelze je šířit v jednom celku s jádrem, vývojáři jádra se k nim většinou staví odmítavě a v některých případech mohou být nelegální (záleží na způsobu implementace).[20]

Maskot

Maskotem Linuxu je tučňák jménem Tux vytvořený Larrym Ewingem v roce 1996. Existuje mnoho variant Tuxe, některé ve 3D. Maskotem je právě tučňák, protože Linus Torvalds podle svých slov „má rád tučňáky, toť vše.“ Jméno Tux prý znamená Torvaldsův UniX a už mu to zůstalo.[21]

Kernel panic

V prostředí Linuxu je „panic“ systémová chyba vyvolaná jádrem, která na rozdíl od chyb vyvolaných uživatelskými programy nevyhnutelně vede k zastavení práce počítače. Tento stav je možné vyvolat zavoláním funkce panic z hlavičkového souboru sys/system.h. Většinou je však vyvolán neošetřenou procesorovou výjimkou, jako například odkazováním se do neplatné části paměti. Tyto neošetřené výjimky jsou často důsledkem chyby v kódu jádra, případně ale také mohou indikovat hardwarové selhání, například paměti RAM nebo chyb v aritmetických funkcích procesoru.

Odkazy

Reference

  1. a b Kbuild: move to -std=gnu11
  2. a b Merge tag 'rust-v6.1-rc1' of https://github.com/Rust-for-Linux/linux
  3. – licence jádra Linuxu[nedostupný zdroj]
  4. MOODY, Glyn. Rebel Code: the inside story of Linux and the open source revolution. [s.l.]: Perseus Books Group, 2001. ISBN 9780738203331. (anglicky) 
  5. EISCHMANN, Jiří. Ze světa tučňáků a open source: Kdo tvoří Linux? [online]. Živě.cz, 2008-04-16 [cit. 2008-04-30]. Dostupné online. 
  6. Skupiny Google
  7. – první jádro Linuxu
  8. – server pro zveřejňování zdrojových kódů jádra Linuxu
  9. – How patches get into the mainline
  10. – 2.6.24 – some statistics
  11. What's new in Linux 2.6.32. www.h-online.com [online]. [cit. 2009-12-23]. Dostupné v archivu pořízeném dne 2013-12-19. 
  12. Who actually develops Linux? The answer might surprise you
  13. DSL.sk [online]. 2015-07-01 [cit. 2015-09-08]. Dostupné online. (slovenský) 
  14. LARABEL, Michael. Linux 4.4 Is Checking In At Over 20.8 Million Lines. Phoronix.com [online]. 2015-11-14 [cit. 2015-11-15]. Dostupné online. (anglicky) 
  15. – Linus vs Tanenbaum. www.dina.dk [online]. [cit. 2005-10-30]. Dostupné v archivu pořízeném dne 2012-10-03. 
  16. – Linus vs Tanenbaum[nedostupný zdroj]
  17. Active kernel releases
  18. FIKAR, Jan. Vyšlo jádro 6.9 s možností větších fontů v konzoli a Linus má nový arm64. Root.cz [online]. [cit. 2024-05-13]. Dostupné online. 
  19. Tilera Corporation. Archivovaná kopie [Internet]. www.tilera.com [cit. 2014-05-17]. Dostupné v archivu pořízeném dne 2013-08-17. (angličtina) 
  20. JELÍNEK, Lukáš. Jádro systému Linux – Kompletní průvodce programátora. [s.l.]: Computer Press, 2008. ISBN 9788025120842. 
  21. – tučňák Tux

Literatura

  • JELÍNEK, Lukáš. Jádro systému Linux, Kompletní průvodce programátora. [s.l.]: Computer Press, 2008. ISBN 978-80-251-2084-2. S. 688. 

Související články

GNU – GNU GPL (licence)

BSD – BSD licence

Externí odkazy

  1. PM, WN. KataOS by mohl pohánět zařízení internetu věcí s podporou ML. www.businessit.cz [online]. [cit. 2022-12-14]. Dostupné online. 
  2. Google oznámil vývoj operačního systému KataOS. www.abclinuxu.cz [online]. [cit. 2022-12-13]. Dostupné online. 
  3. Announcing KataOS and Sparrow [online]. [cit. 2022-12-13]. Dostupné online.