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ě. Ovladače jsou součástí kernelu 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.
Vyvíjí | Linus Torvalds (tvůrce), Linux Foundation a další |
---|---|
Rodina OS | Unix-like |
Druh | Svobodný software |
První zveřejnění | 17. září 1991 |
Aktuální verze | 6.12-rc6 / 4. listopadu 2024 |
Podporované platformy | multiplatformní |
Typ jádra | modulární monolitické jádro |
Programovací jazyk | C (C11 od 5.18),[1] Rust (od 6.1),[2] Assembler |
Licence | GNU GPLv2 |
Stav | Aktivní |
Oficiální web | www.kernel.org |
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. Torvalds je dodnes nejvyšší neformální a respektovanou autoritou jeho vývoje. 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).
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. 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 a upravené zdrojové kódy obratem zveřejňovat (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 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 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. 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ý.
Časová osa
- duben 1991 – tehdy 21letý Linus Torvalds začíná pracovat na jednoduchých funkcích operačního systému
- 0.0.1 – září 1991 (10 239 řádek kódu)
- 0.11 – prosinec 1991 – první verze, pod kterou lze zkompilovat Linux 0.11
- 0.95 – březen 1992 – první verze schopná spuštění X Window System
- 1.0.0 – 14. března 1994 (176 250 řádek kódu)
- 1.2.0 – 7. března 1995 (310 950 řádek kódu)
- 2.0.0 – 9. června 1996 (777 956 řádek kódu)
- 2.2.0 – 25. ledna 1999 (1 800 847 řádek kódu)
- 2.4.0 – 4. ledna 2001 (3 377 902 řádek kódu)
- 2.6.0 – 17. prosince 2003 (5 929 913 řádek kódu)
- 2.6.16.11 – 24. dubna 2006 (6 981 110 řádek kódu)
- 2.6.21 – 25. dubna 2007 (7 522 286 řádek kódu)
- 2.6.25 – 16. dubna 2008 (9 232 484 řádek kódu)
- 2.6.32 – 3. prosince 2009 (12 606 910 řádek kódu[11])
- 3.10 – 30. června 2013 (17 000 000+ řádek kódu[12])
- 4.2 – 1. července 2015 (20 000 000+ řádek kódu)[13]
- 4.3 – 14. listopadu 2015 (20 600 000+ řádek kódu)[14]
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ů.
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, a tak zkracuje dobu odezvy, 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.
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.
Platformně závislé úseky vyžadovaly komunikaci s hardwarem na nižší úrovni, a proto v podstromu architektur lehce narazíme na kód napsaný základním strojovým jazykem – assemblerem.
Přenositelnost
Linux momentálně[zdroj?] dokáže běžet na následujících počítačových platformách:
- ARM
- Acorn: Archimedes, A5000 a série RiscPC
- StrongARM, Intel XScale apod.
- Hewlett Packard iPAQ
- Nintendo DS (projekt DS Linux)
- Apple iPod (IPodLinux projekt iPodLinux)
- Atmel AVR32
- Axis Communications CRIS
- Fujitsu FR-V
- Hewlett Packard Alpha
- Hewlett Packard PA-RISC
- Hitachi: SuperH (SEGA Dreamcast), H8/300
- IBM S/390 (31bitové)
- IBM zSeries a System z9 mainframe (64bitové)
- Intel 80386 a vyšší (i386): IBM PC a kompatibilní s procesory:
- 80386, 80486, a variantami od AMD, Cyrix, Texas Instruments a IBM
- celá série Pentium
- AMD 5x86, K5, K6, Athlon (všechny 32bitové verze), Duron
- AMD64: AMD 64bitové procesory (dříve známá jako x86-64)
- Cyrix 5x86, 6x86 (M1), 6x86MX a série MediaGX (National/AMD Geode)
- VIA Technologies VIA C3 a novější
- podpora pro procesory Intel 8086, 8088, 80186, 80188 a 80286 je ve vývoji (viz projekt ELKS a ELKS on GitHub)
- Microsoft Xbox (procesor Pentium III) (viz Xbox Linux)
- SGI Visual Workstation (procesor Pentium II/III s čipsetem SGI)
- Intel IA-64
- MIPS
- Silicon Graphics, Inc.
- Cobalt Qube, Cobalt Raq
- Sony PlayStation 2 (viz PS2 Linux)
- DECstation
- Tilera[19]
- některé další
- Motorola 68020 a vyšší:
- novější Amigy: A1200, A2500, A3000, A4000
- Apple Macintosh II, LC, Quadra, Centris a raná série Performa
- stanice Sun Microsystems série 3 (experimentální, používá Sun-3 MMU)
- stroje nezaložené na Sun 68020 vyžadují PMMU Motorola 68851
- NEC v850e
- Renesas M32R
- PowerPC a IBM POWER:
- většina novějších počítačů Apple (všechny Power Macintoshe používající PCI, omezená podpora pro starší NuBus Power Mac)
- klony PCI Power Mac pod značkami Power Computing, UMAX a Motorola
- Amigas upgradované „Power-UP“ kartou (jako Blizzard nebo CyberStorm)
- systémy IBM RS/6000, iSeries a pSeries
- deskyPegasos I a II
- některé embedded PowerPC platformy
- SPARC a UltraSparc: Sun série 4, pracovní stanice a servery SPARCstation/SPARCserver, Ultra, Blade a Fire, stejně jako klony od výrobce Tatung a další
Kompletní seznam portů naleznete na Linux Ports Archivováno 12. 2. 2006 na Wayback Machine..
Licencování
Jádro samotné je poskytováno pod licencí GPL verze 2. Některé části mohou být pod licencí GPL v2 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, GPL v2, 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
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.