Linux (ydin)

Wikipediasta
Siirry navigaatioon Siirry hakuun
Tämä artikkeli käsittelee käyttöjärjestelmän ydintä. Artikkeli Linux käsittelee kokonaisia käyttöjärjestelmiä.
Linux
Kehittäjä Linus Torvalds ja tuhansia kehittäjiä
Kehityshistoria
Ensijulkaisu 0.0.1, 17. syyskuuta 1991[1]
Vakaa versio 6.12 ()[2]
Kehitystilanne Aktiivinen
Tiedot
Ohjelmistotyyppi Käyttöjärjestelmän ydin
Alusta Luettelo Linuxissa tuetuista tietokonearkkitehtuureista
Ohjelmointikielet C (C11-standardinmukaista versiosta 5.18 lähtien[3]), Assembly[4]
Lisenssi GPLv2[5]
Aiheesta muualla
Verkkosivusto
Versiohallinta
Linux-ydin on tuettu useilla alustoilla.

Linux on alun perin suomalaisen Linus Torvaldsin kehittämä käyttöjärjestelmäydin, joka on lisensoitu GPLv2-lisenssillä. Ydin eli kerneli (engl. kernel) on tietokoneen käyttöjärjestelmän alin osa (lähimpänä tietokonelaitteistoa), joka mahdollistaa kaikkien muiden tietokoneen ohjelmien toiminnan. Torvalds julkaisi ensimmäisen Linuxin version vuonna 1991.

Arkikielessä Linuxilla tarkoitetaan usein kokonaista käyttöjärjestelmää, jonka ytimenä Linux toimii, eli Linux-jakelua, joka sisältää ytimen lisäksi muun muassa erilaisia kirjastoja, järjestelmäohjelmia, käyttöliittymiä ja sovellusohjelmia valmiiksi paketoituna loppukäyttäjää varten.

Linus Torvalds aloitti Linuxin kehittämisen opiskellessaan Helsingin yliopistossa tietojenkäsittelytiedettä.[6] Torvalds osti ensimmäisen IBM PC:nsä vuonna 1991 hintojen laskettua riittävästi, mutta oli tyytymätön sen MS-DOS -käyttöjärjestelmään.[7][6] Torvaldsia itseään kiinnosti enemmän Unix, jota hän oli käyttänyt yliopiston tietokoneilla.[6] Vuonna 1990 Torvalds osallistui lyhyelle Unix-kurssille yliopistossa, johon oli juuri saatu MicroVAX Ultrix-käyttöjärjestelmällä.[7][8] Aiemmin Torvaldsilla oli ollut Commodore VIC-20 ja Sinclair QL.[7] Yksi kurssikirjoista oli Andrew Tanenbaumin Operating Systems: Design and Implementation, jossa kuvattiin Unixin kaltaista Minixiä.[8]

Torvaldsin alkuperäinen tavoite ei ollut käyttöjärjestelmän ytimen kirjoittaminen vaan tutustuminen ostamansa tietokoneen ominaisuuksiin.[9] Torvalds aloitti kokeilut kahden vuoroaan vaihtavan tehtävän käsittelyllä.[8][7] Kokeilujen myötä hän havaitsi koossa olevan melkein riittävästi ytimeen, jolla voisi lukea uutisryhmiä yliopiston palvelimilta.[8][7] Muistinhallinnan, prosessien vuorontamisen ja laite-I/O:n kokeilujen myötä Torvalds kehitti käyttöjärjestelmän ytimen.[9] Torvalds kehitti pääte-emulaattoriaan ja lisäsi siihen ajurin levyä varten ja tuen Minixin tiedostojärjestelmälle.[8][7]

Vuonna 1991 Torvalds kyseli uutisryhmissä POSIX-standardin dokumentteja, jotka olivat tuolloin kalliita.[10] POSIX mahdollisti lähdekooditason yhteensopivuuden GNU- ja BSD-projektien ohjelmien kanssa.[10] Tuohon aikaan SunOS oli de facto -standardi jossakin BSD:n ja System V:n välillä.[10]

Torvalds toteutti assemblylla ja C-ohjelmointikielellä käyttöjärjestelmän ytimen, joka hänen omien sanojensa mukaan käytti laajalti GCC-kääntäjän ominaisuuksia.[11] Työ eteni hitaasti eikä hän kertonut hankkeestaan vielä muille. Torvaldsin alkuperäisenä tarkoituksena ei ollut luoda käyttöjärjestelmää koko maailmalle, vaan ainoastaan omiin tarpeisiinsa. Jos hän olisi jatkanut yksin, Linuxia olisi tuskin julkaistu, sillä sen kehittäminen olisi pysähtynyt Torvaldsin omien tarpeiden täytyttyä. Torvalds julkisti projektinsa 25. elokuuta 1991 kirjoittamalla comp.os.minix-uutisryhmään, jota pidetään Linuxin syntymäpäivänä.[12][1] Versio 0.01 valmistui 17. syyskuuta samana vuotena, joka oli ensimmäinen lähdekoodijulkaisu.[13][1] Ensimmäinen julkaisu oli Torvaldsin kirjoittama paitsi vsprintf-rutiini, joka oli kirjoitettu yhdessä Lars Wirzeniusin kanssa.[14] Torvalds oli itse tehnyt käännökset bash-komentorivitulkista ja GCC-kääntäjästä.[12][13]

Lokakuussa 1991 versio 0.02 oli valmis ja Torvalds päätti laittaa sen vapaasti kaikkien saataville. 5. lokakuuta uutisryhmään lähettämässään viestissä Torvalds kertoi lähdekoodin löytyvän FTP-palvelimen nic.funet.fi hakemistosta /pub/OS/Linux ja antoi ohjeita kääntämistä varten.[15] Hän varoitti, että ohjelma oli hakkerilta hakkereille ja ei ollut siten sopiva niille, jotka hakivat vaihtoehtoa Minixille.[15] Se oli kuitenkin vielä riittävän pieni ymmärtää, käyttää sekä muokata ja toivoi kommentteja.[15]

Alun perin Torvalds oli suunnitellut antavansa ohjelmansa nimeksi ”Freax”[9], joka olisi johdettu sanoista free Unix (vapaa Unix) tai freaks (omituiset, intoilijat, friikit). FTP-palvelimen ylläpitäjä Ari Lemmke ei pitänyt nimestä ja käytti aiempaa työnimeä ”Linux”.[8] Hän oli perustanut omalle xgw:n palvelimelleen Linux -nimisen käyttöalueen Torvaldsia varten.

Palautetta ja virheraportteja tuli valtavasti. Internetin ja avoimesti saatavilla olleen lähdekoodin ansiosta ihmiset eri puolilla maailmaa pääsivät kehittämään Linuxia. Ytimen versio 0.10 julkaistiin marraskuun alussa 1991, jolloin käyttäjiä oli 10–20. 0.10 oli ensimmäinen versio, joka oli käyttökelpoinen ilman Minixiä, jolloin Linus päätti nostaa versionumeron suoraan 0.03:sta 0.10:iin. 8. joulukuuta 1991 julkaistu versio 0.11 oli jo täysin itsenäisesti käytettävissä: ydin voitiin kääntää Linuxissa itsessään. 0.11-version myötä jaettavana oli myös muutamia ohjelmia (gcc, bash, make, uemacs, tar) mutta järjestelmästä puuttui muun muassa init ja login-toiminnot.[11][16]

Version 0.12 yhteydessä Linus kertoi aikomuksesta käyttää GNU GPL -lisenssiä, joka korvasi aiemmin Torvaldsin itse kirjoittaman lisenssin.[17][18] Ytimen nykyinen lisenssi on GPL versio 2 (GPLv2) ja Torvalds on sanonut vastustavansa siirtymistä versioon 3 sen lisäämien käyttörajoituksien vuoksi.[19] Torvalds on kuvaillut päätöstään julkaista Linux-ydin GPL-lisenssillä parhaaksi tekemäkseen asiaksi.[20]

Marraskuussa 1991 Torvalds tuhosi vahingossa tietokoneensa Minix-osion, joka osaltaan vaikutti kehittämään Linuxia eteenpäin.[9]

Kun versio 0.12 julkaistiin tammikuussa 1992, Linuxin parissa työskenteli aktiivisesti lähes kaksisataa ihmistä. Tuolloin ydin oli jo vakaa ja toimiva. Yhdessä GNU-hankkeen luomien työkalujen kanssa siitä oli rakennettavissa kokonainen käyttöjärjestelmä. Linux alkoi levitä nopeasti. Vuonna 1992 saatiin valmiiksi ensimmäinen graafisella käyttöliittymällä varustettu jakelu.[21] Näihin aikoihin Linuxista kiinnostuttiin myös yliopistomaailman ulkopuolella.

Ytimen julkaisun yhteydessä Torvalds ja Tanenbaum kävivät laajalti tunnetun debatin ytimen rakenteesta.[22][23][24] Keskeiset kritiikin kohteet Tanenbaumilta oli ytimen rakenne (monoliittinen vs. mikroydin) ja siirrettävyys laitteistoalustalta toiselle.[23] Torvalds vastasi avaamaan Minixin lisenssiä ja julkaisemaan ”harrasteprojektin” ilmaiseksi, sekä sanomalla että käyttöjärjestelmän keskeinen tarkoitus on juurikin laitteisto-ominaisuuksien hyödyntäminen ja niiden piilottaminen korkean tason kutsujen taakse.[23] Microsoftin palkkaama Ken Brown ajoi väitettä, jossa Torvalds olisi kopioinut Minixiä, mutta Tanenbaum on tyrmännyt tämän väitteen.[25]

Vuonna 1992 ytimeen tuli ulkopuolista kehitystä muun muassa verkkoprotokollapinon, SCSI- ja äänilaiteajureiden, Ext2-tiedostojärjestelmän ja ELF-binäärimuodon osalle.[9] Versiossa 0.95 oli myös tuki näennäismuistille.[9]

Torvaldsilla oli tavoite tehdä ytimestä siirrettävämpi kun hän sai käyttöönsä Alpha-suorittimella toimivan järjestelmän.[26] Torvaldsin mukaan Linux/68k-projekti ytimen siirtämisessä Motorola 68000 -sarjan suorittimille ei painottanut niinkään siirtämistä vaan sen uudelleen kirjoittamista osin.[26][27] Alkuperäisessä ytimen rakenteessa ei ollut siirtämisen estävää suunnittelua vaan ero oli sen toteutuksessa.[26] M68k-versio alkoi vain Amiga-tuella ja Hamish Macdonald sekä Greg Harp julkaisivat sen ensimmäisen version 1. heinäkuuta 1993.[28] Pian tämän jälkeen Atari-käyttäjät työskentelivät käännöksen parissa.[28] Myös tuki SPARC-, MIPS-, PowerPC- ja ARM-suorittimille seurasivat.[26][29]

Kehitysprosessi

[muokkaa | muokkaa wikitekstiä]
Linux-ytimen toiminnot tasoittain.

Torvalds johtaa edelleen Linuxin ohjelmointityötä. Linux on avoimen lähdekoodin ohjelmisto ja siihen voi kuka tahansa tehdä muutoksia. Mikäli haluaa omat muutoksensa Linuxin viralliseen versioon, ne tulee toimittaa Linux Kernel -postituslistalle, jolloin ohjelmakoodi kulkee Torvaldsin tai hänen luottohenkilöidensä kautta. Muutoksella on oltava sen tekijän allekirjoitus (Signed-off-by) ja se on toimitettava katselmoitavaksi asiaan liittyville henkilöille, joiden hyväksyntä tarvitaan muutoksen etenemiseksi ytimeen liittämiseen.[30] Ytimen kehitysmallissa ”portinvartijoina” toimivat alijärjestelmien ylläpitäjät lähettävät Torvaldsille muutoksia pääsarjan ytimeen liitettäväksi.[31]

Kehitysprosessin ohjeet seuraavat ytimen lähdekoodien mukana ja sisältävät joukon esimerkkejä hyvistä ja huonoista kehitystavoista.[32][33]

Ytimen kehitysprosessia käsitellään Eric S. Raymondin esseessä The Cathedral and the Bazaar, jossa sitä käytetään esimerkkinä ”basaarimallista” (vastakohtana ”katedraalimallille” kuten GNU Emacsin kehityksessä).[34] Kehitysprosessia on kuvattu jatkuvan kehityksen mallina (engl. perpetual development), jota käytetään myös useissa muissa (pääasiassa avoimen lähdekoodin) ohjelmistoprojekteissa.[35]

Sankey-diagrammi ytimen lähdekoodin jakaantumisesta rivimäärän mukaan.

Ytimen version 2.6 kehityksen aikana Torvalds ja Andrew Morton yhdistivät ytimeen muutoksia 10 MB kuukaudessa.[36] Versioon 4.11 otettiin mukaan 12 546 muutosjoukkoa ja ydin kasvoi lähes 300 000 rivillä ohjelmakoodia.[37] Vuosien 2011 – 2012 aikana (ytimen versiot 3.1.0 – 3.5.0) ytimeen tehtiin päivittäin 10 600 uutta riviä, 8 100 riviä poistettiin ja 2 250 riviä muutettiin.[38] Muutoksia tuli 6,03 per tunti.[38]

Kesällä 2015 ytimen versiossa 4.1 oli yli 19,5 miljoonaa lähdekoodiriviä.[39] Linux-ytimen uudelleenkehittämisen arvosta on esitetty useita arvioita: maaliskuussa 2011 sen arvioitiin olevan 3 miljardia Yhdysvaltain dollaria ja kasvavan.[40][41] Linux Foundationin julkaiseman raportin mukaan kehitykseen on osallistunut yli 13 500 kehittäjää yli 1 300 yrityksestä.[42] Ytimen kokoon vaikuttaa kaikki sen tukemat arkkitehtuurit ja laitteisto jota se tukee: Greg Kroah-Hartmanin mukaan keskimääräinen kannettava tietokone käyttää noin 2 miljoonaa koodiriviä 5 000 tiedostosta toimiakseen kunnolla.[43]

Ydin on toteutettu pääasiassa C-kielellä.[44] Torvaldsin mukaan vaikeat ongelmat ytimen kehityksessä eivät ratkea ohjelmointikieltä vaihtamalla.[45] Isoimmat ongelmat ovat tyypillisesti laitteistotuessa kuten laiteajurit ja alustakohtaiset erot.[45] Eräät henkilöt ja projektit ovat pyrkineet kehittämään tukea C++:lla toteutetuille moduuleille mukaan lukien ajonaikaisen kirjaston, poikkeuskäsittelyn ja RTTI-tyyppimekanismin lisäämisen sekä pinon käsittelyn muutoksia.[46][47][48] C++:n käytössä käyttöjärjestelmän ytimessä on ongelmakohtia, joita neuvotaan välttämään.[49][50] Ytimeen on lisätty tukea Rust-kielellä ohjelmointiin asteittain ytimen versiosta 6.1 alkaen.[51][52] Ytimessä käytetään myös kääntäjien tukemia laajennuksia toimintoihin, jotka eivät ole kielen standardissa.[53]

Torvalds on vahvan staattisen tyyppijärjestelmän kannattaja, jonka johdosta hän aloitti vuonna 2003 sparse-ohjelman kehityksen.[54] Ytimen käyttötapauksissa kääntäjän oma tyyppitarkastus ei ole riittävä.[54]

Ytimen testaamisessa käytetään apuna useita tarkoitukseen kehitettyjä ohjelmia.[55] Ydintä testataan usein eri tavoin eri tavoitteiden kannalta kuten kehittäjätestaus, integraatiotestaus, regressiotestaus ja stressitestaus.[55] Ytimen yksikkötestaamiseen on kehitetty KUnit-kehys.[56][57]

Ydintä on aiemmin kehitetty parittomalla numerolla merkityssä versiohaarassa parillisten ollessa vakaita tuotantokäyttöön tarkoitettuja versioita (vrt. 2.2.x, 2.3.x, 2.4.x ja 2.5.x).[58] Nykyisin seuraavaan versioon tulevat muutokset ovat linux-next nimisessä kehityshaarassa ja versionumeroinnin erityismerkityksestä on luovuttu.[59] Monimutkaisten versionumeroiden kuten 2.6.39.4 sijaan pääversionumeroa muutetaan useammin kuten 4.0 3.20:n sijaan.[60][61] LTS-versioihin (Long Term Support) julkaistaan päivityksiä vielä uuden version jälkeen muutaman vuoden ajan.[62][63] Vuoden 2023 lopulla päätettiin lyhentää tukiaika kuudesta vuodesta kahteen tulevissa LTS-versioissa. LTS-versioita ei käytetä riittävästi ja ne aiheuttavat paljon työtä ylläpitäjille. Jonathan Corbetin mukaan työuupumus on riski vapaaehtoisille ylläpitäjille.[64][65]

Ytimen seuraavaan versioon tulevat muutokset sijoitetaan linux-next -nimiseen kehityshaaraan.[59] Muutoksien kehitys tapahtuu linux-next -haaran mukaiseen tilanteeseen.[66] Kehityshaarassa kypsyneet muutokset liitetään tulevaan julkaisuversioon ja konflikteja tai käännösongelmia aiheuttavat muutokset jätetään liittämättä.[67] Kehityshaarasta suoritetaan myös automaattista testausta ja havaituista ongelmista ilmoitetaan kehittäjille.[68] Eri konfiguraatioilla käännetyt ytimet käynnistetään ja ajetaan KVM-instansseissa.[68] Automaattinen testaus suorittaa myös sparse- ja coccinelle-ohjelmia.[68] Automaattista testausjärjestelmää on kehittänyt Fengguang Wu.[68]

Linux-staging

[muokkaa | muokkaa wikitekstiä]

Linux-staging tai lyhyesti staging on versiohallinnan haara, jossa pidetään kehityksen alla olevia muutoksia.[69] Staging-haarassa pidettävät muutokset eivät ole vielä valmiita julkaistavaksi, mutta säilötään jotta niiden saatavuus ja testaaminen on helpompaa niistä kiinnostuneille kehittäjille.[69] Staging-haarassa olevat muutokset ovat suunnattu myöhemmäksi tulevaisuuteen kuin linux-next -haarassa olevat.[69] Staging-haaran perustamisesta ilmoitti Greg Kroah-Hartman 10. kesäkuuta 2008.[70]

Muut lähdekoodipuut

[muokkaa | muokkaa wikitekstiä]

”Tip” on eräs lähdekoodipuu, jonka kautta muutokset päätyvät Torvaldsille.[71] Tip on nimetty sen ylläpitäjien mukaan: Thomas Gleixner, Ingo Molnar ja H. Peter Anvin.[71] Lähdekoodipuu sisältää eri haaroissa muutoksia, jotka on tarkoitettu liitettäväksi seuraavan liitosajankohdan myötä (”topic branch”), kiireisiä muutoksia (”urgent branch”) sekä myöhemmin valmistuvia muutoksia (”queue branch”).[71] ”arm-soc” -puu on Arnd Bergmannin perustama lähdekoodipuu, joka keskittyy järjestelmäpiirien tukeen ARM-arkkitehtuurilla.[71]

Linux-ydin tukee ladattavia moduuleja, joita käytetään muun muassa laiteajureille, tiedostojärjestelmätuelle, verkkoprotokollille, uusille järjestelmäkutsuille ja niin edelleen.[72] Ladattavien moduulien tuki on ollut ytimessä versiosta 1.2 (1995) lähtien.[72]

Suorittimet tukevat ytimen kernel-mode suoritustilassa erityiskomentoja ja sallii kaiken muistiavaruuden käytön.[73] Käyttäjän user-mode tilassa sallitut muistialueet ja käskyt ovat rajatumpia.[73] Suorituksen siirto käyttäjän ja ytimen tilojen välillä järjestelmäkutsujen yhteydessä kuluttaa huomattavasti aikaa.[73] Ytimet, joissa kaikki ajurit ovat kiinteästi osana ydintä ilman ladattavia moduuleja, ovat monoliittisia ytimiä, kun taas ladattavia moduuleja tukevia kuvataan toisinaan hybridiytimiksi.[73][74] Muita ladattavia moduuleja tukevia käyttöjärjestelmiä ovat esimerkiksi Solaris.[74] Linuxiin liittyvässä dokumentaatiossa monoliittisellä ytimellä on viitattu ytimeen, josta ladattavien moduulien tuki on kytketty pois käännösvaiheessa.[75]

Linux tukee moduulien kryptografista allekirjoittamista.[76] Linux-ytimessä toiminnot voidaan jakaa kaikille moduuleille tai vain GPL-lisenssiä käyttäville moduuleille, jota voidaan käyttää tunnistamaan ytimestä riippuvan toiminnon käyttö (derivative).[77][78] Suljetun lähdekoodin (ei-GPL) moduulien lataaminen lisää taint-merkinnän, joka kertoo kehittäjille että mahdollisen vian tapahtuessa ongelman syy voi olla tuntemattomassa lähdekoodissa.[79][80]

Koska ytimeen ladattavat moduulit toimivat ilman rajoituksia ytimen suoritustilassa niiden toteutuksessa on otettava huomioon samat seikat kuin muussa itse ytimessä olevaa ohjelmakoodiakin koskee.[81][82]

Moduuleja voidaan debugata etänä toiselta koneelta muun muassa Eclipse-kehitysympäristössä.[83]

Käyttäjät voivat ladata ja poistaa moduuleja ajon aikana muun muassa modprobe -komennolla.[84] Moduulit voidaan kääntää ja ladata ytimeen ajonaikana ilman uudelleenkäynnistystä.[84]

Esimerkki minimaalisesta moduulista, joka tulostaa viestin ytimen logiin:[84]

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
    printk(KERN_INFO "Welcome.....\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Bye....\n");
}

Moduuli ei toteuta main()-funktiota, vaan ytimen koodi kutsuu ladatun moduulin toimintoja.

Virtuaalinen tiedostojärjestelmä

[muokkaa | muokkaa wikitekstiä]
Linux-ytimen IO-pino

Linux-ydin tukee virtuaalista tiedostojärjestelmää (VFS), joka sallii ytimen tukea useita konkreettisia tiedostojärjestelmiä.[85][86][87][88] Vastaava rakenne on toteutettu esimerkiksi SunOS-käyttöjärjestelmässä.[86]

Ytimen järjestelmäkutsujen alla sijaitsee VFS-kerros, jonka alla sijaitsevat varsinaiset tiedostojärjestelmät.[86] Tiedostojärjestelmien alla sijaitsee lohkopohjainen kerros, jonka alla sijaitsevat laiteajurit.[86] VFS-kerros on abstraktiokerros, joka erottaa POSIX-yhteensopivan rajapinnan tiedostojärjestelmäkohtaisista toteutuksista.[86]

Keskeisiä olioita VFS:n toteutuksessa ovat:[88][89]

  • inode (”indeksinoodi”)
  • dentry (”hakemistomerkintä”)
  • file (tiedosto)
  • superblock (”päälohko”)

Superblock sisältää korkean tason metatiedon tiedostojärjestelmästä, josta on useita kopioita levyllä varmistuksen vuoksi ja sisältää käyttöön liitetyn (engl. mount) tiedon.[89] Dentry sisältää yhden hakemistokomponentin (yksi osa hakemistopolkua) hierarkkisessa rakenteessa, joka säilytetään vain muistissa eikä tallenneta levylle.[89][90] Inode sisältää metatietoa yhdestä tiedostosta pois lukien sen nimen ja varsinaisen sisällön: inode voi viitata myös muun tyyppisiin tietoihin kuten laitteisiin tai muistiin.[89][91] Yksittäiseen inodeen voi olla useita viittauksia kuten kovia linkkejä (engl. hard link).[88]

VFS tarjoaa toiminnot käyttäjäsovelluksille sekä ytimen sisäisen abstraktiorajapinnan ytimen toiminnoille.[88]

VFS:n avulla ydin tukee lohkopohjaisia tiedostojärjestelmiä (Btrfs, ext2 / ext3 / ext4, JFS, XFS, ISO 9660, UDF)[92][93][94], verkkopohjaisia (NFS, coda, AFS, SMB, 9P), yhdistelmäjärjestelmiä (overlayfs, unionfs), RAM-levyn kanssa käytettäviä (tmpfs, ramfs[95]) ja eritystarkoituksiin suunniteltuja (debugfs, sysfs[96]). Erityisesti flash-muistin kanssa käytettäväksi suunniteltuja ovat f2fs ja ubifs.[97][98] zonefs on yksinkertainen alueita (zone) tukeva tiedostojärjestelmä, joka ei piilota sekventiaalista kirjoitustarvetta POSIX-rajapinnan taakse ja on siten lähempänä suoraa lohkokirjoitusta.[99] NILFS2 on logirakenteinen tiedostojärjestelmä, joka tukee jatkuvia tilannekuvia (snapshot).[100] Lisäksi tuettuja ovat klustereissa käytettävät tiedostojärjestelmät kuten GFS ja OCFS2.[101][102] Ceph on hajautettu tiedostojärjestelmä, joka tukee POSIX-yhteensopivaa käyttöä.[103]

Linux laajentaa alkuperäisen Unixin periaatetta käyttää tiedostokahvoja (”Everything is a file”) myös muun muassa ajoitustapahtumiin, verkkorajapintaan sekä uudenlaisiin laitteisiin, joita ei ollut olemassa Unixia kehitettäessä.[104][105] Käsitettä on laajennettu myös prosessien käsittelyyn.[106]

Moniajo ja rinnakkaisuus

[muokkaa | muokkaa wikitekstiä]

Linux-ydin tukee ulkoista moniajoa (irrottava/keskeyttävä moniajo, pre-emptible), sekä ytimen sisäinen moniajo on mukana 2.6-sarjassa, jota on myöhemmin laajennettu nk. vapaaehtoiseen moniajoon.[107][108][109] Käyttäjäavaruuden ohjelmat ovat aina keskeytettävissä ja ytimen sisäiseen moniajoon on eri menetelmiä.[110] Kun ydin on käännetty sisäiseen moniajoon suoritus voidaan keskeyttää lähes missä vain tilanteessa.[111] Ytimen sisäinen moniajo voidaan jättää käännösaikana pois eri tarkoituksia varten.[108] Vuoronnus käyttää vuoronnusalueita (scheduling domains) ja useampia suoritusjonoja prosesseille, jotka odottavat ajovuoroaan.[112]

Ydin tukee useita menetelmiä ja algoritmeja tehtävien ajoituksen hallintaan.[113][114] Ytimen versiossa 2.6.23 lisätty CFS korvasi O(1) ja RSDL-vuorontajat.[115][116][117] Ytimeen on kehitetty tuki ladattaville skedulereille eri käyttötarpeita varten.[118][119] EEVDF-vuorontaja on kehitetty vaihtoehdoksi CFS-vuorontajalle. EEVDF parantaa latenssiherkkien ohjelmien suoritusta ja poistaa heuristiikkaa, joka aiheuttaa CFS-vuorontajassa vaikeuksia. EEVDF käsittelee prioriteetin kuten CFS, mutta laskee myös aikarajan (engl. deadline), jolloin prosessin on saatava suoritusaikaa.[120][121]

Ydintä voidaan suorittaa moniajossa yhdellä suorittimella sekä rinnakkain moniprosessoinnilla.[122] Ydin tukee ulkoisien NPTL-säikeiden lisäksi ytimen sisäisiä säikeitä.[123]

Ytimen sisäinen moniajo tunnistaa mm. spinlock-lukituksen käytön ytimen sisäisessä moniajossa.[111] Ydin käyttää runsaasti suoritinkohtaisia per-CPU tietorakenteita, jotka parantavat muun muassa välimuistin käytön tehokkuutta, mutta joiden käytössä sisäinen moniajo voidaan kytkeä hetkellisesti pois käytöstä.[124][125]

Sisäistä moniajoa voi konfiguroida eri käyttötarkoituksiin soveltuvaksi.[126] Reaaliaikakäyttöön tarkoitettu Real-Time Linux lisää omia vaihtoehtoja ytimen sisäiseen moniajoon.[126][127] Reaaliaikakäyttöön on suunnattu SCHED_DEADLINE-vuoronnus vaihtoehtona aiemmille SCHED_FIFO- ja SCHED_RR-käytännöille.[128][129]

Ytimen NO_HZ -optio vähentää ajoituksen vaatimia herätteitä tehostaen virrankäyttöä ja suorituskykyä tietyissä tilanteissa.[130][131]

Vuoronnukseen on kehitetty virrankäytön (energiatarpeen) ja lämpörajoitusten käsittely.[132][133][134] Vuoronnus käsittelee myös ytimien maksimikapasiteetin niiden suorituskyvyn mukaan epäsymmetrisessä moniprosessoinnissa kuten ARM big.LITTLE -järjestelmissä.[135]

Vuoronnus käsittelee saman ytimen säikeiden (SMT) lisäksi saman suorittimen ytimiä siten, että suorittimella ajettavat tehtävät voidaan ryhmitellä sen mukaan, voivatko ne jakaa saman suoritinytimen (core scheduling). Ratkaisulla vain keskenään luotetut säikeet voivat jakaa saman suoritinytimen resursseja, kun yhteen ryhmään kuuluvat eivät luota toiseen ryhmään. Käyttötapauksena ovat pilvipalvelut, joissa samalla tietokoneella voi olla samanaikaisesti monen eri asiakkaan tehtäviä, joiden välillä on oltava suojaus haavoittuvuuksien varalta, mutta asiakkaan omien tehtävien välillä suojaus voi olla pienempi ja tehtäviä voidaan ajaa rinnakkain samalla ytimellä.[136][137][138][139]

Keskeytyskäsittelyn vuoksi ytimessä on keinoja siirtää suoritusta. Keskeytyksen sattuessa tietokoneen suoritin pysäyttää tekemänsä asian, jolloin kutsutaan ytimessä olevaa keskeytyskäsittelyä. Ytimen keskeytyskäsittelystä on palattava nopeasti, jonka vuoksi suoritus siirretään. Laitteistokeskeytyksien sijaan on käytössä työjonoja, perinteisen Unixin kaltaisia ohjelmistokeskeytyksiä ("alempi puolisko") sekä taskletit, joista halutaan eroon.[140][141][142]

Vuoronnus tukee NUMA-muistiarkkitehtuuria, jossa tietokoneen muistiväylän viive ja kaista riippuvat siitä, miten kaukana suoritin tai väylä on muistisolusta. Ydin pyrkii sijoittamaan suoritettavan tehtävän suorittimelle, joka on lähinnä suoritettavan tehtävän tarvitsemaa muistialuetta.[143][144][145]

Muistinhallinta

[muokkaa | muokkaa wikitekstiä]

Linux tukee useita muistinhallintaan liittyviä ominaisuuksia:

  • ylivaraus (engl. overcommit)[146][147]
  • OOM Killer, joka tappaa prosessin, jotta järjestelmä voi jatkaa normaalisti kun saatavilla oleva muisti on varattu eikä normaalilla tavalla voi palauttaa muistia käyttöön (reclaim)[148][149][150][151]
  • muistin ja muiden resurssien käyttörajat (cgroups)[152]
  • heterogeeninen muisti (HMM)[153]
  • jaettu DMA-kelpoinen muisti (DMA-BUF).[154][155]
  • suuret muistisivut (hugepage)[156][157]
  • yhdistelmäsivut[158]
  • viisitasoinen sivutus vaihtoehtona aiemmalle nelitasoiselle[159][160][161]
  • memfd_secret: prosessin yksityistä muistia[162][163][164]
  • Multi-generational LRU (MGLRU)[165]
  • vierasmuistialueet virtuaalikoneille (guest_memfd)[166]
  • identtisten muistisivujen yhdistäminen (Kernel Samepage Merging, KSM)[167]

Ydin pyrkii pitämään muistissa tietoa, jota käyttäjän ohjelmat haluavat käyttää. Levyltä lukeminen on verrattain hidasta, joten vapaata muistia käytetään välimuistina levyltä luetuille tiedoille ja järjestetään viimeksi käytetyn mukaan (Last Recently Used, LRU). Muistin ollessa täynnä puskureista vapautetaan tilaa, sekä muistia voidaan sivuttaa levylle. MGLRU (Multigenerational LRU) pitää useampia listoja järjestämiseen tyypin ja iän mukaan.[151][168][169]

Ydin tukee muistin pakkausta läpinäkyvästi (RAM-levyn kanssa zram-ominaisuudella, sivutuksen kanssa zswap-ominaisuudella)[170][171] sekä muistin salausta läpinäkyvästi (AMD SME, SEV)[172]. Pakkausta muistissa voidaan käyttää viivästyttämään levylle sivutuksen tarvetta vähentäen levy-IO:n tarvetta.[173] Ydin tukee jaettua muistia System V- ja POSIX-rajapintojen avulla.[174] Muistinhallinta tukee avainpohjaista suojausta.[175]

Ytimen muistisivujen käsittelyyn on otettu käyttöön foliot. Foliot voivat kattaa yksittäisen sivun tai useamman sivun yhtenäisen alueen (yhdistelmäsivut). Foliot tukevat eri kokoisia muistisivuja arkkitehtuureilla, jotka tukevat niitä. Folioiden käytöllä parannetaan suorituskykyä ja yksinkertaistetaan käsittelyä, sekä parannetaan joustavuutta.[176][177][178][179]

Muistivarauksen hallintaan on kehitetty kolme konfiguroitavaa vaihtoehtoa: SLAB, SLOB ja SLUB.[180]

  • SLAB, perustuu algoritmiin, jonka Jeff Bonwick kehitti SunOS:lle ja sittemmin käytetty useissa BSD-variaatioissa[181][182][183][184]
  • SLUB, yksinkertaistettu SLAB[185][186], esitelty vuonna 2007 ja tarkoitettu korvaamaan SLAB[187]
  • SLOB, alkuperäisen Unixin tyylinen, joka on muistikäytön kannalta hyvä mutta skaalautuu huonosti ja kärsii fragmentaatiosta[188]

Muistivaraukseen on esitetty eri vaihtoehtoja, mutta niitä ei ole hyväksytty ytimeen ja ytimessä käytetyistä SLOB on poistettu versiossa 6.4.[187][189] SLAB on poistettu versiossa 6.8 ja jäljelle jäi SLUB, jonka myötä ytimen toimintoja on voitu yksinkertaistaa.[190]

Ytimen käyttämää muistimallia on kuvattu ISO/IEC artikkelissa P0124R4.[191]

Linux-ydin tukee usean prosessorin järjestelmiä, ytimen sisäistä moniajoa, asynkronisia keskeytyksiä, ajoittimia ja yksittäistä laitetta voi yrittää käyttää useampi prosessi samaan aikaan: laiteajureja on voitava käyttää usesta kontekstista yhtä aikaa (reentrant).[192][193] Laiteajurit voidaan kääntää kiinteästi osaksi ydintä tai ajonaikana ladattaviin moduuleihin.

Ajurit toteuttavat mekanismin (tarjotut ominaisuudet), eivät käytäntöä (miten ominaisuuksia voi hyödyntää) Unix-tapaan.[194]

Yksinkertaisimmillaan ajurit käyttävät vain IO-muistialueita, mutta useimmat laitteet vaativat monimutkaisempaa käsittelyä. Laiteajurit ovat tapahtumapohjaisia, jotka reagoivat järjestelmäkutsuihin, laitteistokeskeytyksiin ja niin edelleen. Linuxissa on mahdollista käsitellä laitteita kuten teollisuus-IO -kortteja IO-porttien kautta ioperm rajapinnan avulla myös käyttäjäavaruudesta.[195][196][197]

Linux ydin tukee VFIO-kehystä (Virtual Function I/O, Versatile Framework for userspace I/O[198]) IOMMU-toiminnon kanssa.[199][200] VFIO mahdollistaa IOMMU:n kanssa turvalliset käyttäjäavaruuteen sijoitetut laiteajurit ”läpiviennillä” muun muassa virtuaalikoneille.[199][201][198]

LKDDb (Linux Kernel Driver DataBase) on projekti, joka pyrkii kokoamaan kattavan tietokannan Linuxin tukemasta laitteistosta ja protokollista.[202] Tietokanta sisältää laitteiden tunnisteet, ytimen konfiguraation ja ajurin tiedostonimen.[202] Käyttäjät voivat lisätä omia laitetietoja.[203]

Verkkotoiminnot

[muokkaa | muokkaa wikitekstiä]

Ydin tukee useita protokollia mukaan lukien TCP/IP-protokollapino.[204][205]

Ytimeen on kehitetty useita menetelmä suodattaa (engl. filtering) ja reitittää (engl. routing) verkkoprotokollien paketteja. Eräitä ratkaisuja Linuxissa ovat netfilter[206] ja Berkeley Packet Filter (BPF), joka on saatavilla myös useille muille Unixin kaltaisille käyttöjärjestelmille.[207][208] Open vSwitch on verkkopakettien käsittelyn menetelmä, jolla voi toteuttaa Ethernet-kytkimen, virtuaalilähiverkkoja ja niin edelleen.[209] Ydin tukee VPN-verkkoja muun muassa IPsec-protokollalla ja WireGuardilla.[210][211]

Linux tukee Remote DMA -ratkaisuja.[212][213]

Käyttäjäoikeuksienhallinta

[muokkaa | muokkaa wikitekstiä]

Linux on monen käyttäjän käyttöjärjestelmä, joka pitää käyttäjäkohtaiset tiedot erillään ja tukee usean käyttäjän yhtäaikaista käyttöä.[214]

Linux Security Modules (LSM) on kehys pääsynvalvontamekanismeille, joka mahdollistaa erilaisia valvontamekanismeja ladattavina ytimen moduuleina.[215]

Linux-ydin tukee perinteisten Unix-tyylisten oikeuksienhallinnan lisäksi Access Control List (ACL) ja Mandatory Access Control (MAC) -tyyppisiä mekanismeja kuten SELinux, AppArmor, TOMOYO ja Smack.[216][217][218][219] Yama on Discretionary Access Control (DAC) -mekanismi.[220]

Linux Integrity Measurement Architecture (eli IMA) on alijärjestelmä, jota voidaan käyttää havaitsemaan tiedostomuutoksia (vahingossa tai haitallisesti tehtyjä muutoksia).[221][222] IMA:n tarkoitus vakuuttaa etänä, että järjestelmässä suoritetaan vain tunnettuja ja hyväksyttyjä ohjelmia.[223] IMA on vastuussa tiivisteen laskemisesta ennen lataamista ja raportoi sen eteenpäin. IMA-järjestelmään kuuluva Extended Verification Module (EVM) havaitsee muutoksia ja liittyy SELinux- ja Linux Security Modules (LSM)-kehyksiin. EVM tekee toisen tiivisteen tiedostojen attribuuteista.[224][225]

seccomp on mekanismi, jolla voi rajata pääsyä järjestelmäkutsuihin hiekkalaatikoiden tekoa varten.[226][227]

Landlock on vallitsevien oikeuksien (kuten globaali tiedostojärjestelmäpääsy) rajoittamiseen suunnattu pinottava turvamoduuli (LSM), jota voidaan käyttää hiekkalaatikoiden tekemiseen.[228]

Prosessien välinen kommunikointi

[muokkaa | muokkaa wikitekstiä]

Linux-ydin tukee useimpia tyypillisiä menetelmiä prosessien väliseen kommunikaatioon kuten anonyymit putket, nimetyt putket, viestijonot ja jaettu muisti.[229] Linuxissa on mahdollista käyttää myös useita muita menetelmiä.[230]

Lisäksi on mahdollista käyttää useita käyttäjäavaruudessa toimivia menetelmiä kuten D-Bus, jotka perustuvat daemon-prosessien palveluihin.

Muita ratkaisuja ovat muun muassa kehityksen alla oleva bus1 ja Androidin käyttämä binder.[231][232]

Virheenjäljitys

[muokkaa | muokkaa wikitekstiä]

Linux-ydin tukee kahdenlaisia debuggeriohjelmia ytimen virheenjäljitykseen: kdb (komentorivillä, ei lähdekooditason debuggausta) ja kgdb (etänä, lähdekooditason debuggaus).[233]

kdb tukee mm. muistin ja rekisterien tilojen tutkimista ja pysäytyskohtien asettamista. kgdb käytetään GNU Debuggerin kanssa.[233]

Lisäksi ydin tukee suorituksen seurantaan muita menetelmiä kuten ftrace, strace[234], ptrace()[235] ja kprobe.[236]

Suorituskyvyn profilointiin on olemassa muun muassa perf laskurit, jota ovat edeltäneet oprofile, perfctr ja perfmon2.[237][238] Kerättyjä laskurien tietoja käsitellään muun muassa perf-työkaluilla.[239]

Toimintojen sanitointiin on useita seurantaominaisuuksia kuten muistiviittauksiin (KASAN), epämääriteltyyn toimintaan (UBSAN), rinnakkaisuuteen (KCSAN) ja alustamattoman muistin käyttöön (KMSAN).[240][241][242][243][244] Kernel Electric-Fence (KFENCE) on näytteistykseen perustuva muistiturvallisuuden seuraaja, jota on suunniteltu käyttöön myös tuotantoympäristöissä.[245]

Virtualisointi ja säiliöinti

[muokkaa | muokkaa wikitekstiä]

Ydin tukee hypervisor-virtualisointia kuten KVM sekä säiliöintiä.[246][247][248] Xen-tuki sekä isäntänä (Dom0) että vieraana (DomU) on ollut ytimessä versiosta 3.0 lähtien.[249][250] Lisäksi User-mode Linux mahdollistaa ytimen ajamisen käyttöjärjestelmän prosessina (Linux-on-Linux, Linux-on-Windows).[251] Cooperative Linux (CoLinux) on virtualisointiin perustuva projekti, jolla Linux-ydintä voidaan pienen virtuaalikoneen avulla suorittaa Windowsin rinnalla.[252] Jailhouse on turvakriittisiin järjestelmiin tarkoitettu virtualisointi Linuxille.[253] Lisäksi ACRN-hypervisorille on tukea.[254][255] Linuxia voi käyttää Hyper-V virtualisoinnissa juuriosiona, jolla on suora pääsy laitteistoon ja joka hallinnoi muun muassa muistinkäyttöä, laitepääsyä ja levyn käyttöä.[256]

Rajapinnat ja alijärjestelmät

[muokkaa | muokkaa wikitekstiä]

Direct Rendering Manager (DRM) on monimutkaisten grafiikkalaitteiden kuten ohjelmoitavien grafiikkasuorittimien tukemiseen suunnattu rajapinta.[257]

Advanced Linux Sound Architecture (ALSA) on äänilaitteille suunnattu rajapinta, johon liittyvät myös ytimessä olevat ajurit.[258]

CPUFreq on alijärjestelmä, joka käsittelee suorittimen suorituskyvyn muutokset. Alijärjestelmässä on ydin, säätimet ja ajurit. Ydin on yhteinen kehys eri komponenteille, säädin toteuttaa algoritmit suorittimen kapasiteetille ja ajurit käsittelevät laitteiston tietoa. Laitteisto kertoo ACPI P-tiloja, jotka ajurit välittävät säätimille ja ajurit muuttavat P-tiloja säätimien pyyntöjen mukaan. Säätimiä on toteutettu erilaisia eri käyttötarpeita varten. Alijärjestelmä tukee myös kellotaajuuden muuttamista kun laitteisto tukee sitä.[259]

Media-alijärjestelmä on suunnattu videon ja radion striimauslaitteisiin kuten videokameroille, analogisille ja digitaalisille TV-viritinkorteille, AM/FM radiovastaanottimille, ohjelmistolliselle radiolle (Software Defined Radio, SDR), videokaappaukselle, pakkauslaitteille ja kauko-ohjaimille.[260] Video 4 Linux on videokaappauskorteille suunnattu. Rajapinnasta käytetään lyhennettä V4L2, koska rajapinnan ensimmäinen versio on korvattu joustavammalla.[261][262]

DMA-BUF on alijärjestelmä, joka mahdollistaa puskureiden jakamisen useiden laiteajureiden ja alijärjestelmien välillä, sekä asynkroniseen laitteistotukeen. Merkittävä käyttäjä on DRM-alijärjestelmä, joka jakaa puskureita prosessien, kirjastojen ja alijärjestelmien kuten V4L2:n kanssa.[263][154][155]

IO_uring on asynkronisen IO:n rajapinta, jonka suunnittelutavoitteina on soveltuvuus muihinkin kuin lohko-orientoituneisiin tallennuslaitteisiin.[264] IO_uring on suunniteltu korvaamaan vanha AIO-rajapinta.[265] IO_uring ratkoo vanhan rajapinnan ongelmakohtia ja muun muassa tukee puskurointia, toimii deterministisesti (ei pysäytä) ja vähentää muistikopioita.[264] IO_uring muuttaa sovelluksien suunnittelua ja sen käyttöä suunnitellaan myös muihin tarpeisiin.[266]

kexec on ytimen järjestelmäkutsu, jolla voi vaihtaa suoraan toiseen ytimeen ilman järjestelmän täyttä uudelleenkäynnistämistä, joka nopeuttaa suurien palvelimien päivitystä.[267][268]

Logical Volume Manager (LVM) on loogisen taltiohallinnan tuki on lisätty ytimeen kehitysversiossa 2.3.47.[269]

Device Mapper (DM) on kehys loogisten taltioiden ja fyysisten lohkojen välissä, jota useammat ylemmän tason toiminnot kuten LVM käyttävät.[270][271] Kehystä käytetään muun muassa tilannekuvien tallentamiseen.[272] Device Mapper Multipathing mahdollistaa useita fyysisiä IO-väyliä palvelinten ja FCP/SCSI-laitteiden välillä ja tukee muun muassa uudelleen reitittämistä (failover) ja kuormituksen tasaamista.[273]

Ytimessä on tuki salaukselle, jonka pääkonsepteja ovat luottamuksellisuus, tietojen eheys ja lähteen varmentaminen.[274][275] Käyttökohteita ovat muun muassa levysalaus (dm-crypt), verkkoprotokollat (IPsec, Bluetooth), tiedostojärjestelmät ja laiteajurit sekä useita muita.[275] Kernel Key Retention Service ("keystore") on ytimen palvelu salausavainten ja autentikaatiovaltuuksien hallintaan. Tietoja käytetään esimerkiksi salattujen tiedostojärjestelmien kanssa, mutta lisäksi käyttäjäavaruuden ohjelmat voivat tallentaa siihen avaintietoja, jolloin ohjelmat eivät tarvitse käyttäjäavaruudessa erillistä "agenttiohjelmaa".[276][277][278][279]

NAPI ("New API") on laajennus laiteajurien pakettikäsittelyyn. NAPI voi vaihtaa keskeytykset pollaavaan kun tiedetään että paketteja on odottamassa, sekä verkkoalijärjestelmä voi tarvittaessa pudottaa paketteja ennen kuin ne päätyvät lisäkäsittelyyn.[280][281][282] Tavallisesti verkkorajapinta tekisi keskeytyksen kun paketti saapuu, ydin käsittelisi keskeytyksen suorittaisi paketin käsittelyn.[282] Kiireisissä järjestelmissä tämä tuottaisi paljon keskeytyksiä, joiden käsittely vaatisi paljon suoritinaikaa.[282] NAPI:n kanssa keskeytys vaihdetaan taajaan pollaamiseen kun tiedetään, että paketteja on aina odottamassa ja odottavat paketit voidaan käsitellä kaikki kerralla.[282]

netfs on ytimen sisäinen apukirjasto, joka on suunniteltu avustamaan verkkotiedostojärjestelmien yhteisissä toiminnoissa.[283][284]

Ytimen userfaultfd-järjestelmäkutsu mahdollistaa sivutuksen käsittelyä käyttäjäavaruudessa.[285][286] Toiminto on kehitetty auttamaan käynnissä olevien virtuaalikoneiden siirtoa fyysiseltä koneelta toiselle.[287]

"Accel" on laskentakiihdyttimille suunnattu alijärjestelmä, joka tukee muun muassa ASIC-piirejä, järjestelmäpiirejä ja grafiikkasuorittimia. Laskentakiihdyttimet ovat tyypillisesti suunnattu koneoppimiseen ja syväoppimiseen, mutta alijärjestelmä ei ole rajattu näihin.[288] Ennen uuden alijärjestelmän lisäämistä näitä laitteita tuettiin DRM-alijärjestelmässä.[289][290]

Live patching

[muokkaa | muokkaa wikitekstiä]

Ytimessä on tuki ohjelmakoodin päivityksille ilman järjestelmän tai sovelluksien uudelleen käynnistämistä.[291][292] Live patching -ominaisuus on julkaistu ytimen versiossa 4.0.[293] Tyypillinen käyttökohde ovat tietoturvapäivitykset esimerkiksi järjestelmän ollessa raskaan kuormituksen alla.[292][294] Ominaisuus on yksi kolmesta ominaisuudesta, jotka voivat muuttaa suorituskohdetta ajonaikaisesti: kaksi muuta ovat kprobe ja ftrace.[294] Päivitykset jaetaan ytimen moduuleina, joissa on uusi toteutus korvattavasta toiminnosta.[294][291] Ominaisuus on tarkoitettu kriittisiin päivityksiin ympäristöissä, joissa on vaatimuksia palveluiden saatavuudelle.[292]

Konfigurointi

[muokkaa | muokkaa wikitekstiä]

Ennen käännöstä tehtävä konfigurointi tehdään Kconfig/kbuild-työkalulla (huom: eri kuin KDE-projektin KConfig). Kconfigissa on makrokieli, jonka avulla asetetaan käännöksessä mukana olevat ominaisuudet ja luodaan tarvittavat tiedostot ohjelmointikielen kääntäjälle. Käännösvalinnat voidaan esittää valikkona, josta voi valita muun muassa laiteajureita ja useita muita asetuksia.[295][296][297] Esimerkiksi Androidia varten ydin voidaan konfiguroida alhaisen muistimäärän järjestelmää varten.[298] Eri jakeluversiot voivat käyttää eri ytimen konfiguraatioita tarkoituksensa mukaisesti.[299]

Käynnistyksen yhteydessä ytimelle voidaan antaa komentoriviparametreja käynnistyslataajan kautta. Parametrit voidaan asettaa käynnistyslataajan omaan konfiguraatioon.[300][301]

Käynnissä olevan ytimen asetuksia voidaan muuttaa sysctl-toiminnon avulla käyttäjäavaruudesta.[302][303][304]

Linux on historian eniten eri laitteistoalustoja tukeva käyttöjärjestelmä.[305]

Linux tukee NUMA-muistiarkkitehtuurin tietokoneita ja toteuttaa järjestelmäkutsuja järjestelmien hallintaan.[306] Tuki on ollut ytimessä versiosta 2.5 lähtien ja on parannettu jälkeenpäin.[307][308]

UClinux-projektin myötä Linux tukee myös digitaalisia signaaliprosessoreita sekä mikrokontrollereita sulautetuissa järjestelmissä ja reitittimissä.[309] Projekti on integroitu ytimen päähaaraan versiossa 2.5.46.[310]

Linux on myös sovitettu toimimaan Mach- ja L4-mikroytimien päällä MkLinux ja L4Linux -projekteissa.[311]

64-bittisten alustojen yleistymisestä johtuen on keskusteltu 32-bittisten alustojen tulevaisuudesta ja tuesta: sulautetuissa järjestelmissä 32-bittisiä versioita käytetään yhä paljon.[312]

Linux tukee Open Firmware Device Tree (DT) määrittelyjä[313] sekä ACPI Device Tree toimintoja.[314] DT-määrittely on laajennettu yleiskäyttöiseksi kaikille alustoille [313] UEFI-tuen avulla ydin tukee sen ajonaikaisia palveluita.[315]

Linux tukee hotplug-toimintoja ytimen versiosta 2.4 lähtien: oheislaitteiden lisäksi suorittimet ja muisti on mahdollista liittää tai poistaa käytön aikana.[316][317][318] Suorittimen hotplug-toiminto oli suunniteltu alun perin vikaantuneen laitteen poistamiseen järjestelmästä, mutta se on löytänyt käyttöä myös energian käytön hallintaan sekä virtualisoiduissa ympäristöissä vieraskäyttöjärjestelmille.[319]

Linuxin varhaiset versiot oli julkaistu Torvaldsin itse kirjoittamalla lisenssillä, joka ei sallinut ytimen levitystä rahaa vastaan koska halusi sen pysyvän ilmaisena eikä niinkään vapaan ideologian mukaisena.[17][16] Eräiden tahojen toivoessa voivansa kerätä Linuxin levittämisestä syntyvät kustannukset Torvalds päätti muuttaa lisenssiä ja totesi rahaan liittyvän rajoituksen olleen virhe.[17] Linus ilmoitti version 0.12 julkistuksen yhteydessä siirtyvänsä käyttämään GNU GPL -lisenssiä 1. helmikuuta 1992 lähtien.[18] Ytimen nykyinen lisenssi on GPL versio 2 ja Torvalds on sanonut vastustavansa siirtymistä versioon 3 sen lisäämien käyttörajoituksien vuoksi.[19] Torvalds on kuvaillut päätöstään julkaista Linux-ydin GPL-lisenssillä parhaaksi tekemäkseen asiaksi.[20]

Lisenssiä on täsmennetty myös, että se on ainoastaan GPL versio 2.0 ja ettei ytimen lisenssi koske ohjelmia, jotka vain käyttävät ytimen järjestelmäkutsuja.[5][320][321][322] Ytimessä on siirrytty käyttämään Software Package Data Exchange (SPDX) -tunnisteita toistuvan tekstin vähentämiseen ja helpompaan tarkistamiseen automaattisesti.[320]

Koska Linux-ydin käyttää nimenomaan GNU GPL versiota 2 (GPLv2), sitä eivät sido lisenssiversion 3 rajoitukset, joita Torvalds on vastustanut ja on ilmoittanut, ettei Linux-ydin siirry versioon 3.[19][323][324] Torvalds arvosteli lisenssiversion 3 tiukkaa linjaa kaupallisiin ja omisteisiin ohjelmistoihin.[323]

Linux-libre on Linux-ytimeen perustuva ydin, josta on poistettu ei-vapaat (omisteiset) firmware-osiot.[325]

Linux-aikajana

[muokkaa | muokkaa wikitekstiä]
Pääartikkeli: Linux-ytimen aikajana
Linux-ytimen merkittäviä versioita[326][327]
Versio Ajankohta Huomioita
Linux 0.01 17. syyskuuta 1991 ensimmäinen versio; käynnistäminen levykkeeltä, Intel 80386-prosessorin tuki ja suomalainen näppäimistötuki[9]
Linux 0.02 5. lokakuuta 1991
Linux 0.03 lokakuussa 1991
Linux 0.10 marraskuussa 1991
Linux 0.11 8. joulukuuta 1991 itsenäisesti toimiva versio, jossa kerneli voitiin kääntää ajamalla samaa versiota Linuxista.
Linux 0.12 tammikuussa 1992 lisäsi muistin levylle sivuttamisen ja lisenssi vaihtui GNU GPL -lisenssiin
Linux 1.0 julkaistiin maaliskuussa 1994
Linux 1.2 maaliskuussa 1995 lisäsi tuen Alpha-, SPARC- ja MIPS-suorittimille ja ELF-binääritiedostomuodolle.
Linux 2.0 kesäkuussa 1996 mahdollisti käytön usealla suorittimella yhtä aikaa (moniprosessointituki) sekä tuen m68k- ja PowerPC-arkkitehtuureille.
Linux 2.2 tammikuussa 1999 lisäsi televisiokorttien tuen, bittikarttagrafiikkaa tukevan konsolin ja IPv6-tuen.
Linux 2.2.13 joulukuussa 1999 lisäsi tuen IBM:n S/390 suurtietokoneille[328]
Linux 2.4 tammikuussa 2001 lisäsi ISA-PnP-, USB- ja PCMCIA-tuen, sekä tuen yli 2 GiB tiedostoille (LFS) ja ext3- ja ReiserFS-tiedostojärjestelmät (ReiserFS versiossa 2.4.1). Versio 2.4.6 lisäsi Bluetooth-tuen.
Linux 2.5.43 lokakuussa 2002 lisäsi Read-Copy-Update (RCU) mekanismin tuen[326][329]
Linux 2.6 joulukuussa 2003 lisäsi XFS- ja JFS-tiedostojärjestelmät, sisälsi uudet ALSA-ääni- ja syöttölaitteiden ajurit, InfiniBand-tuen, NPTL-säikeistyksen tuen ja tehosti käyttöä suurissa järjestelmissä. Lisäksi SELinux on integroitu pääversioon.
Linux 2.6.20 helmikuussa 2007 lisäsi tuen Kernel-based Virtual Machine (KVM) virtualisointituen[246][330]
Linux 2.6.24 tammikuussa 2008 lisäsi Cgroup-tuen[331]
Linux 2.6.29 maaliskuussa 2009 lisäsi ytimeen Kernel Modesetting (KMS) tuen näytönohjaimille, joka yksinkertaistaa X Window Systemin ajureita; suorittimien tukea tehostettiin 4096:n suorittimen laitteiden tukemiseksi[332]
Linux 2.6.38 maaliskuussa 2011 lisäsi läpinäkyvän tuen suurille muistisivuille (engl. transparent huge pages, THP), joka aiemmin oli hugetlbfs-kirjastoon sidottu[333][334][156]
Linux 3.0 heinäkuussa 2011 Torvalds ilmoitti muuttavansa versionumeroa Linuxin 20-vuotispäivien kunniaksi.[335]
Linux 3.1 lokakuussa 2011 lisäsi tuen OpenRISC-suorittimelle ja NFC-siruille.[336]
Linux 3.7 vuonna 2012 yhtenäisti tuen ARM-pohjaisille järjestelmäpiireille[337][338]
Linux 3.8 vuonna 2013 lisäsi tuen käyttäjien nimiavaruuksille[339]
Linux 4.0 huhtikuussa 2015 lisäsi tuen ytimen korjauspäivityksille ilman tarvetta koko järjestelmän uudelleenkäynnistykselle (live patching), tuki Intelin Skylake-arkkitehtuurille, tuki Intelin Quark-piireille, tuki PlayStation 3 -konsolille, tuki äänelle DisplayPort-väylän kautta AMD:n Radeon-ohjainten avoimissa ajureissa.[293]
Linux 4.14 marraskuussa 2017 uudistuksia ovat muun muassa viisitasoinen muistisivujen käsittely, joka nostaa maksimimuistimäärän teratavuista petatavuihin.[340][341] Muita uudistuksia ovat heterogeeninen muistikäsittely (HMM), ORC pinonkäsittely, AMD:n muistisalaus, nolla-kopion verkkokäsittely ja säikeistystuki cgroup-ryhmille.[342][343][160]
Linux 5.1 toukokuussa 2019 uusi asynkronisen IO:n rajapinta io_uring, pidfd-rajapinta signaalien käsittelyyn[344]
Linux 5.2 heinäkuussa 2019 Sound Open Firmware (SOF) -tuki, uusi mount -rajapinta[345][346]
Linux 5.5 tammikuussa 2020 KUnit-yksikkötestaustuki, KCSAN rinnakkaisuuden sanitointi.[347][243][348]
Linux 6.1 joulukuussa 2022 Multi-generational LRU, varhainen tuki Rust-kielelle ytimessä, KMSAN, Maple tree hakupuu[165][349][350][351]
  1. a b c Larabel, Michael: Linux Turns 26 Years Old Phoronix. Viitattu 25.8.2017.
  2. Linux 6.12, (viitattu ). Tieto on haettu Wikidatasta.
  3. Bergmann, Arnd: Kbuild: move to -std=gnu11 git.kernel.org. 3.3.2022.
  4. https://github.com/gregkh/linux
  5. a b COPYING git.kernel.org. Viitattu 15.9.2021. (englanniksi)
  6. a b c Linus Torvalds Encyclopaedia Britannica. Viitattu 5.8.2019. (englanniksi)
  7. a b c d e f Glyn Moody: How Linux was born, as told by Linus Torvalds himself 25.8.2015. Ars Technica. Viitattu 9.9.2019. (englanniksi)
  8. a b c d e f Glyn Moody: The Greatest OS That (N)ever Was 8.1.1997. Wired. Viitattu 9.9.2019. (englanniksi)
  9. a b c d e f g Dr. Oliver Diedrich: The history of Linux h-online.com. 25.8.2011. Viitattu 16.8.2019. (englanniksi)
  10. a b c Daniel Quinlan: The Past and Future of Linux Standards 1.6.1999. Linux Journal. Viitattu 9.9.2019. (englanniksi)
  11. a b LINUX's History cs.cmu.edu. Viitattu 5.8.2019. (englanniksi)
  12. a b Torvalds, Linus: What would you like to see most in minix? groups.google.com. Viitattu 5.8.2017.
  13. a b Torvalds, Linus: Notes for linux release 0.01 ftp.funet.fi. Viitattu 5.8.2017.
  14. 2020 Linux Kernel History Report (PDF) elokuu 2020. Linux Foundation. Arkistoitu 17.9.2020. Viitattu 1.9.2020. (englanniksi)
  15. a b c Torvalds, Linus: Free minix-like kernel sources for 386-AT groups.google.com. Viitattu 5.8.2017. (englanniksi)
  16. a b Linus Torvalds: LINUX--a free unix-386 kernel oldlinux.org. 10.10.1991. Viitattu 18.10.2019. (englanniksi)
  17. a b c Christopher Tozzi: Linus Torvalds on Early Linux History, GPL License and Money datacenterknowledge.com. 23.8.2016. Viitattu 18.10.2019. (englanniksi)
  18. a b Torvalds, Linus: RELEASE NOTES FOR LINUX v0.12 kernel.org. Viitattu 5.8.2017.
  19. a b c Linus Torvalds says GPL v3 violates everything that GPLv2 stood for youtube.com. Viitattu 3.7.2017.
  20. a b Hiroo Yamagata: The Pragmatist of Free Software, Linus Torvalds Interview (Arkistoitu – Internet Archive), 30 September 1997
  21. The Daemon, the GNU and the Penguin, by Dr. Peter H. Salus – Ch. 20 Groklaw. Arkistoitu 10.6.2007. Viitattu 25.11.2017.
  22. Linux is obsolete – A must read debate between Andrew S. Tanenbaum and Linus Torvalds 24.11.2012. IBM. Arkistoitu 10.7.2017. Viitattu 20.12.2017.
  23. a b c The Tanenbaum-Torvalds Debate oreilly.com. Viitattu 9.9.2019. (englanniksi)
  24. [1-25 LINUX is obsolete] groups.google.com. 29.1.1992. Viitattu 20.12.2017.
  25. Tanenbaum, Andy: Tanenbaum-Torvalds Debate Part II cs.vu.nl. 12.5.2006. Viitattu 20.12.2017.
  26. a b c d Torvalds, Linus: Linux: a Portable Operating System 31.1.1997. Helsingin yliopisto. Viitattu 9.9.2019. (englanniksi)
  27. Open Sources: Voices from the Open Source Revolution oreilly.com. 1999. Viitattu 17.10.2023. (englanniksi)
  28. a b Chris Lawrence: Linux/m68k: Linux on Motorola's 68000 Processor linuxjournal.com. 1.5.1997. Viitattu 15.2.2021. (englanniksi)
  29. David S. Miller & Miguel de Icaza: The Linux/SPARC port (PDF) pdfs.semanticscholar.org. 19.12.1996. Viitattu 9.9.2019. (englanniksi)
  30. Submitting patches: the essential guide to getting your code into the kernel kernel.org. Viitattu 7.8.2019. (englanniksi)
  31. 2. How the development process works kernel.org. Viitattu 26.11.2019. (englanniksi)
  32. Kroah-Hartman, Greg: HOWTO do Linux kernel development kernel.org. Viitattu 27.11.2017.
  33. Morton, Andrew: The perfect patch. ozlabs.org. 4.3.2006. Viitattu 27.11.2017.
  34. Eric Steven Raymond: The Cathedral and the Bazaar catb.org. Viitattu 9.9.2019. (englanniksi)
  35. Dror G. Feitelson: Perpetual Development: A Model of the Linux Kernel Life Cycle (PDF) cs.huji.ac.il. 25.10.2011. Viitattu 14.10.2020. (englanniksi)
  36. Kernel Summit: Development process 21.7.2004. LWN.net. Viitattu 27.11.2017.
  37. Corbet, Jonathan: 4.11 Kernel development statistics 19.4.2017. LWN.net. Viitattu 30.11.2017.
  38. a b Greg Kroah-Hartman: Linux Kernel Development (PDF) events.static.linuxfound.org. Viitattu 9.8.2019. (englanniksi)
  39. Larabel, Michael: Linux Kernel At 19.5 Million Lines Of Code, Continues Rising Phoronix. Viitattu 6.8.2017.
  40. Wheeler, David A.: The Linux Kernel: It’s Worth More! dwheeler.com. Viitattu 6.8.2017. (englanniksi)
  41. The Cost of Linux linuxcost.blogspot.fi. Viitattu 6.8.2017. (englanniksi)
  42. Linux Kernel Development Report 2016 Linux Foundation. Arkistoitu 22.8.2016. Viitattu 6.8.2017. (englanniksi)
  43. Bigger than big: Linux kernel colonel Torvalds claims 5.8 is 'one of our biggest releases of all time' theregister.com. 15.6.2020. Viitattu 15.6.2020. (englanniksi)
  44. Barry, Paul: Which Programming Language? 7.2.2001. Linux Journal. Viitattu 2.12.2017.
  45. a b Venezia, Paul: Linux at 25: Linus Torvalds on the evolution and future of Linux 25.8.2016. InfoWorld. Viitattu 2.12.2017.
  46. Halldor Isak Gylfason: C++ Exceptions & the Linux Kernel 1.9.2005. Dr Dobb's. Viitattu 3.4.2018.
  47. Vegard Nossum: Re: [PATCH 00/45 C++: Convert the kernel to C++] lkml.org. 2.4.2018. Viitattu 3.4.2018.
  48. Nathan Cooprider: C++ in the Linux kernel threatstack.com. 28.10.2016. Viitattu 3.4.2018.
  49. C++ OSDev.org. Viitattu 3.4.2018.
  50. Porting C++ code to Linux kernel pograph.wordpress.com. 5.4.2009. Viitattu 3.4.2018.
  51. Jonathan Corbet: A first look at Rust in the 6.1 kernel lwn.net. 13.10.2022. Viitattu 20.2.2023. (englanniksi)
  52. Jonathan Corbet: Rust in the 6.2 kernel lwn.net. 17.11.2022. Viitattu 20.2.2023. (englanniksi)
  53. Jonathan Corbet: Scope-based resource management for the kernel lwn.net. 15.6.2023. Viitattu 16.1.2024. (englanniksi)
  54. a b Doc Searls: Linus & the Lunatics, Part I 24.11.2003. Linux Journal. Viitattu 3.9.2019. (englanniksi)
  55. a b Shuah Khan: Linux Kernel Testing and Debugging 10.7.2014. Linux Journal. Viitattu 9.8.2019. (englanniksi)
  56. Zack Brown: KUnit and Assertions 30.5.2019. Linux Journal. Viitattu 13.10.2019. (englanniksi)
  57. Zack Brown: Unit Testing in the Linux Kernel 3.1.2019. Linux Journal. Viitattu 13.10.2019. (englanniksi)
  58. Linux Kernel Version Numbering 29.5.2006. The Linux Information Project.
  59. a b Frequently asked questions kernel.org. Viitattu 30.11.2017.
  60. Michael Larabel: Linux 4.0-RC1 Tagged, Linux 4.0 Will Bring Many Notable Improvements 22.2.2015. Phoronix. Viitattu 7.8.2019. (englanniksi)
  61. Sebastian Anthony: Linux version dilemma: Linus Torvalds is “running out of fingers and toes” 17.2.2015. Ars Technica. Viitattu 7.8.2019. (englanniksi)
  62. Long-term Linux support future clarified 27.11.2017. ZDNet. Viitattu 30.11.2017.
  63. Larabel, Michael: Linux To Get "Extended LTS" Releases, Kernel Support For Six Years 29.9.2017. Phoronix. Viitattu 30.11.2017. (englanniksi)
  64. Ron Amadeo: Linux gives up on 6-year LTS kernels, says they’re too much work arstechnica.com. 21.9.2023. Viitattu 29.1.2024. (englanniksi)
  65. Jamieson Davis: Linux Kernel Faces Reduction in Long-Term Support Due to Maintenance Challenges linuxjournal.com. 19.9.2023. Viitattu 29.1.2024. (englanniksi)
  66. Jonathan Corbet: The current development kernel is...linux-next? 8.6.2008. Lwn.net. Viitattu 7.8.2019. (englanniksi)
  67. Jonathan Corbet: A day in the life of linux-next 23.6.2008. Lwn.net. Viitattu 7.8.2019. (englanniksi)
  68. a b c d Michael Kerrisk: KS2012: Kernel build/boot testing 5.9.2012. Lwn.net. Viitattu 7.8.2019. (englanniksi)
  69. a b c Jake Edge: A new kernel tree: linux-staging lwn.net. 11.6.2008. Viitattu 6.9.2019. (englanniksi)
  70. Greg KH: linux-staging tree created 10.6.2008. Lwn.net. Viitattu 6.9.2019. (englanniksi)
  71. a b c d Jonathan Corbet: Git tree maintenance lwn.net. 29.10.2013. Viitattu 7.3.2021. (englanniksi)
  72. a b Introduction to Linux Loadable Kernel Modules tldp.org. Viitattu 22.11.2017.
  73. a b c d Nitesh Dhanjani & Gustavo Rodriguez: Loadable Kernel Module Programming and System Call Interception 1.2.2001. Linux Journal. Viitattu 22.11.2017.
  74. a b Silberschatz & Galvin & Gagne: Operating System Concepts Essentials (PDF) cs.columbia.edu. Arkistoitu 28.6.2016. Viitattu 10.11.2017.
  75. Building a Monolithic Kernel Red Hat. Arkistoitu 12.8.2019. Viitattu 12.8.2019. (englanniksi)
  76. Kernel module signing facility kernel.org. Viitattu 16.2.2020. (englanniksi)
  77. Day, Rob: The Kernel Newbie Corner: Kernel Symbols: What's Available to Your Module, What Isn't linux.com. 29.7.2009. Viitattu 22.11.2017.
  78. On the value of EXPORT_SYMBOL_GPL lwn.net. 5.10.2005. Viitattu 16.2.2020. (englanniksi)
  79. Tainting from user space 24.5.2006. LWN.net. Viitattu 22.11.2017.
  80. Tainted kernels kernel.org. Viitattu 22.11.2017.
  81. Derek Molloy: Writing a Linux Kernel Module — Part 1: Introduction derekmolloy.ie. Viitattu 22.11.2017.
  82. Day, Rob: The Kernel Newbie Corner: Loadable Kernel Modules, Coming and Going linux.com. 8.7.2009. Viitattu 22.11.2017.
  83. Debugging a loadable kernel module infocenter.arm.com. Viitattu 22.11.2017.
  84. a b c Himanshu Arora: How to Create, Compile, Load Linux LKM Loadable Kernel Modules 2.4.2012. The Geek Stuff. Viitattu 22.11.2017.
  85. A tour of the Linux VFS tldp.org. Viitattu 23.11.2017.
  86. a b c d e M. Jones: Anatomy of the Linux virtual file system switch 31.8.2009. IBM. Viitattu 23.11.2017.
  87. https://www.kernel.org/doc/Documentation/filesystems/
  88. a b c d Gooch, Richard & Enberg, Pekka: Overview of the Linux Virtual File System kernel.org. Viitattu 19.4.2020. (englanniksi)
  89. a b c d M. Jones: Anatomy of the Linux virtual file system switch developer.ibm.com. 31.8.2009. Viitattu 23.10.2020. (englanniksi)
  90. Pathname lookup kernel.org. Viitattu 24.10.2020. (englanniksi)
  91. Inode Definition linfo.org. Viitattu 23.10.2020. (englanniksi)
  92. Lanyue Lu & Andrea C. Arpaci-Dusseau & Remzi H. Arpaci-Dusseau & Shan Lu: A Study of Linux File System Evolution pages.cs.wisc.edu. doi:10.1145/2560012 Viitattu 28.11.2017.
  93. isofs kernel.org. Viitattu 28.11.2017.
  94. Documentation/filesystems/udf.txt kernel.org. Viitattu 28.11.2017.
  95. Create a RAM disk in Linux jamescoyle.net. Viitattu 19.4.2020. (englanniksi)
  96. https://www.kernel.org/doc/html/latest/filesystems/sysfs.html
  97. https://www.kernel.org/doc/html/latest/filesystems/f2fs.html
  98. https://www.kernel.org/doc/html/latest/filesystems/ubifs.html
  99. https://www.kernel.org/doc/html/latest/filesystems/zonefs.html
  100. NILFS2 docs.kernel.org. Viitattu 29.1.2024. (englanniksi)
  101. https://www.kernel.org/doc/html/v5.7/filesystems/gfs2.html
  102. https://www.kernel.org/doc/html/v5.7/filesystems/ocfs2.html
  103. https://www.kernel.org/doc/html/latest/filesystems/ceph.html
  104. Neil Brown: Ghosts of Unix Past: a historical search for design patterns lwn.net. 27.10.2010. Viitattu 23.10.2020. (englanniksi)
  105. Re: [PATCH Futex Asynchronous Interface] yarchive.net. Viitattu 23.10.2020. (englanniksi)
  106. Jonathan Corbet: Adding the pidfd abstraction to the kernel lwn.net. 7.10.2019. Viitattu 23.10.2020. (englanniksi)
  107. FAQ/Preemption Kernelnewbies. Viitattu 25.11.2017.
  108. a b Corbet, Jonathan: Optimizing preemption 14.8.2013. LWN.net. Viitattu 25.11.2017.
  109. Addressing latency problems in 2.6 lwn.net. 14.7.2017. Viitattu 25.11.2017.
  110. Preemption Models wiki.linuxfoundation.org. Viitattu 9.11.2023. (englanniksi)
  111. a b Driver porting: the preemptible kernel lwn.net. 24.2.2003. Viitattu 23.11.2017.
  112. Linux scheduling ibm.com. 19.7.2023. Viitattu 6.11.2023. (englanniksi)
  113. sched – overview of CPU scheduling Linux man-pages project. Viitattu 2.12.2017.
  114. Ankita Garg: Real-Time Linux Kernel Scheduler 1.8.2009. Linux Journal. Viitattu 2.12.2017.
  115. M.Jones: Inside the Linux 2.6 Completely Fair Scheduler 15.12.2009. IBM. Viitattu 2.12.2017.
  116. Corbet: Schedulers: the plot thickens lwn.net. 17.4.2007. Viitattu 28.8.2023. (englanniksi)
  117. Robert Love: The Linux Process Scheduler 13.11.2003. Informit. Viitattu 2.12.2017.
  118. Scott Rhine: Plug-In Scheduler Policies for Linux (PDF) classiccmp.org. Arkistoitu 3.12.2017. Viitattu 2.12.2017.
  119. Con Kolivas: Pluggable cpu scheduler framework LWN.net. Viitattu 2.12.2017.
  120. Jonathan Corbet: An EEVDF CPU scheduler for Linux lwn.net. 9.3.2023. Viitattu 28.8.2023. (englanniksi)
  121. Earliest Eligible Virtual Deadline First : A Flexible and Accurate Mechanism for Proportional Share Resource Allocation (PDF) citeseerx.ist.psu.edu. 26.1.1996. Viitattu 28.8.2023. (englanniksi)
  122. M. Jones: Anatomy of Linux synchronization methods IBM. Arkistoitu 1.12.2017. Viitattu 25.11.2017.
  123. kthreads (PDF) cs.fsu.edu. Viitattu 25.11.2017.
  124. Proper Locking Under a Preemptible Kernel: Keeping Kernel Code Preempt-Safe kernel.org. Viitattu 1.12.2017.
  125. Driver porting: per-CPU variables LWN.net. Viitattu 1.12.2017.
  126. a b Understanding Linux Kernel Preemption devarea.com. 23.11.2017. Viitattu 29.11.2017. (englanniksi)
  127. Steven Rostedt: Real-Time is coming to Linux (PDF) events19.linuxfoundation.org. 24.10.2018. Viitattu 26.10.2019. (englanniksi)
  128. Deadline scheduling class for better real-time scheduling kernelnewbies.org. Viitattu 24.10.2020. (englanniksi)
  129. Jonathan Corbet: Deadline scheduling: coming soon? lwn.net. 4.12.2013. Viitattu 24.10.2020. (englanniksi)
  130. NO_HZ: Reducing Scheduling-Clock Ticks kernel.org. Viitattu 1.12.2017.
  131. Corbet, Jonathan: (Nearly) full tickless operation in 3.10 8.5.2013. LWN.net. Viitattu 1.12.2017.
  132. Nicolas Pitre: Teaching the scheduler about power management lwn.net. 18.6.2014. Viitattu 1.3.2020. (englanniksi)
  133. Marta Rybczyńska: Telling the scheduler about thermal pressure lwn.net. 16.5.2019. Viitattu 1.3.2020. (englanniksi)
  134. Energy Aware Scheduling docs.kernel.org. Viitattu 6.11.2023. (englanniksi)
  135. Capacity Aware Scheduling docs.kernel.org. Viitattu 6.11.2023. (englanniksi)
  136. Jonathan Corbet: Core scheduling lands in 5.14 lwn.net. 1.7.2021. Viitattu 6.11.2023. (englanniksi)
  137. Jonathan Corbet: Many uses for Core scheduling lwn.net. 20.9.2019. Viitattu 6.11.2023. (englanniksi)
  138. Core Scheduling docs.kernel.org. Viitattu 22.3.2024. (englanniksi)
  139. Jonathan Corbet: Core scheduling lwn.net. 28.2.2019. Viitattu 22.3.2024. (englanniksi)
  140. Jonathan Corbet: The end of tasklets lwn.net. 5.2.2024. Viitattu 25.2.2024. (englanniksi)
  141. corbet: Eliminating tasklets lwn.net. 24.6.2007. Viitattu 25.2.2024. (englanniksi)
  142. M. Jones: Deferrable functions, kernel tasklets, and work queues developer.ibm.com. 1.3.2010. Viitattu 25.2.2024. (englanniksi)
  143. Kanoj Sarcar: What is NUMA? kernel.org. Viitattu 22.3.2024. (englanniksi)
  144. Jonathan Corbet: NUMA scheduling progress lwn.net. 1.10.2013. Viitattu 22.3.2024. (englanniksi)
  145. The Effect of NUMA Tunings on CPU Performance (PDF) s3.cern.ch. doi:10.1088/1742-6596/664/9/092010 Viitattu 22.3.2024. (englanniksi)
  146. Overcommit kernel.org. Viitattu 16.8.2019. (englanniksi)
  147. Andreas Scherbaum: Virtual memory settings in Linux - The Problem with Overcommit engineering.pivotal.io. 2.7.2016. Viitattu 16.8.2019. (englanniksi)
  148. Concepts overview kernel.org. Viitattu 11.3.2024. (englanniksi)
  149. https://www.baeldung.com/linux/memory-overcommitment-oom-killer
  150. https://www.oracle.com/technical-resources/articles/it-infrastructure/dev-oom-killer.html
  151. a b Vlastimil Babka: Overview of Memory Reclaim in the Current Upstream Kernel (PDF) lpc.events. syyskuu 2021. Viitattu 11.3.2024. (englanniksi)
  152. CGROUPS(7) man7.org. Viitattu 25.11.2017.
  153. Jonathan Corbet: Heterogeneous memory management lwn.net. 27.4.2016. Viitattu 16.8.2019. (englanniksi)
  154. a b Rob Clark & Sumit Semwal: DMA Buffer Sharing Framework:An Introduction (PDF) elinux.org. 2012. Viitattu 16.8.2019. (englanniksi)
  155. a b Jonathan Corbet: DMA buffer sharing in 3.3 11.1.2012. Lwn.net. Viitattu 16.8.2019. (englanniksi)
  156. a b Gorman, Mel: Huge pages part 1 (Introduction) lwn.net. 16.2.2010. Viitattu 16.11.2017.
  157. Transparent Hugepage Support kernel.org. Viitattu 5.10.2022. (englanniksi)
  158. Jonathan Corbet: An introduction to compound pages lwn.net. 11.11.2014. Viitattu 9.7.2021. (englanniksi)
  159. Jonathan Corbet: Five-level page tables lwn.net. 15.3.2017. Viitattu 13.10.2020. (englanniksi)
  160. a b Linux 4.14 Kernelnewbies. Viitattu 13.11.2017.
  161. Four-level page tables merged lwn.net. 5.1.2005. Viitattu 23.10.2020. (englanniksi)
  162. Jonathan Corbet: Two address-space-isolation patches get closer lwn.net. 27.10.2020. Viitattu 30.8.2021. (englanniksi)
  163. Jonathan Corbet: Keeping secrets in memfd areas lwn.net. 14.2.2020. Viitattu 30.8.2021. (englanniksi)
  164. Jonathan Corbet: memfd_secret() in 5.14 lwn.net. 6.8.2021. Viitattu 29.1.2024. (englanniksi)
  165. a b Jonathan Corbet: Merging the multi-generational LRU lwn.net. 12.5.2022. Viitattu 12.12.2022. (englanniksi)
  166. Jonathan Corbet: Guest-first memory for KVM lwn.net. 2.11.2023. Viitattu 29.1.2024. (englanniksi)
  167. Kernel Samepage Merging docs.kernel.org. Viitattu 13.3.2024. (englanniksi)
  168. Paging and swapping Chapter 5. Memory Management learnlinux.org.za. Viitattu 11.3.2024. (englanniksi)
  169. Chapter 11 Swap Management kernel.org. ”Strictly speaking, Linux does not swap as “swapping” refers to coping an entire process address space to disk and “paging” to copying out individual pages. Linux actually implements paging as modern hardware supports it, but traditionally has called it swapping in discussions and documentation.” Viitattu 11.3.2024. (englanniksi)
  170. https://www.kernel.org/doc/html/v5.9/admin-guide/blockdev/zram.html
  171. https://www.kernel.org/doc/html/latest/vm/zswap.html (Arkistoitu – Internet Archive)
  172. https://www.kernel.org/doc/html/v5.8/x86/amd-memory-encryption.html
  173. Seth Jennings: Transparent Memory Compression in Linux (PDF) events.static.linuxfound.org. 2013. Viitattu 10.7.2021. (englanniksi)
  174. Marty Kalin: Inter-process communication in Linux: Shared storage opensource.com. 15.4.2019. Viitattu 10.7.2021. (englanniksi)
  175. Memory Protection Keys kernel.org. Viitattu 5.10.2022. (englanniksi)
  176. Jonathan Corbet: Clarifying memory management with page folios lwn.net. 18.3.2021. Viitattu 13.3.2024. (englanniksi)
  177. Jonathan Corbet: A memory-folio update lwn.net. 4.5.2022. Viitattu 13.3.2024. (englanniksi)
  178. Jonathan Corbet: Large folios for anonymous memory lwn.net. 6.7.2023. Viitattu 13.3.2024. (englanniksi)
  179. Matthew Wilcox: Memory Folios lwn.net. 31.3.2021. (englanniksi)
  180. Christoph Lameter: Slab allocators in the Linux Kernel: SLAB, SLOB, SLUB (PDF) events.static.linuxfound.org. 2014. Viitattu 10.11.2021. (englanniksi)
  181. Anatomy of the Linux slab allocator – Internet Archive
  182. Mel Gorman: Chapter 8 Slab Allocator kernel.org. Viitattu 9.9.2019. (englanniksi)
  183. Jeff Bonwick: The Slab Allocator: An Object-Caching Kernel Memory Allocator (PDF) people.eecs.berkeley.edu. Viitattu 9.9.2019. (englanniksi)
  184. Jeff Bonwick & Jonathan Adams: Magazines and Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary Resources (PDF) parrot.org. Viitattu 9.9.2019. (englanniksi)
  185. SLUB: The unqueued slab allocator V6 lwn.net. Viitattu 9.9.2019. (englanniksi)
  186. The SLUB allocator lwn.net. 11.4.2007. Viitattu 9.9.2019. (englanniksi)
  187. a b Jonathan Corbet: SLOB nears the end of the road lwn.net. 23.12.2022. Viitattu 16.5.2023. (englanniksi)
  188. slob: introduce the SLOB allocator lwn.net. Viitattu 9.9.2019. (englanniksi)
  189. Jonathan Corbet: 6.4 Merge window, part 1 lwn.net. 28.4.2023. Viitattu 28.8.2023. (englanniksi)
  190. Jonathan Corbet: The first half of the 6.8 merge window lwn.net. 12.1.2024. Viitattu 11.3.2024. (englanniksi)
  191. Linux-Kernel Memory Model open-std.org. 25.9.2017. Viitattu 10.7.2021. (englanniksi)
  192. Concurrency in the Kernel lwn.net. Viitattu 24.10.2020. (englanniksi)
  193. Corbet, Jonathan; Rubini, Alessandro; Kroah-Hartman, Greg: Linux Device Drivers, s. 20–21. O'Reilly, 2005 (1998). ISBN 9781449371616 Linux Device Drivers, Third Edition.
  194. The Role of the Device Driver lwn.net. Viitattu 24.10.2020. (englanniksi)
  195. 2. Using I/O ports in C programs tldp.org. Viitattu 16.2.2020. (englanniksi)
  196. I/O access and Interrupts linux-kernel-labs.github.io. Arkistoitu 19.8.2019. Viitattu 16.2.2020. (englanniksi)
  197. The Userspace I/O HOWTO kernel.org. Viitattu 16.2.2020. (englanniksi)
  198. a b Zhenyu Wang: Full GPU virtualization in mediated pass-through way (PDF) x.org. Viitattu 13.2.2020. (englanniksi)
  199. a b VFIO - “Virtual Function I/O” kernel.org. Viitattu 13.2.2020. (englanniksi)
  200. 12. Linux IOMMU Support kernel.org. Arkistoitu 13.2.2020. Viitattu 13.2.2020. (englanniksi)
  201. Alex Williamson: VFIO lwn.net. 29.5.20120. Viitattu 13.2.2020. (englanniksi)
  202. a b LKDDb: Linux Kernel Driver DataBase cateee.net. Viitattu 1.4.2021. (englanniksi)
  203. https://linux-hardware.org
  204. https://www.kernel.org/doc/Documentation/networking/
  205. Linux Networking Documentation kernel.org. Viitattu 1.4.2021. (englanniksi)
  206. Netfilter’s flowtable infrastructure docs.kernel.org. Viitattu 29.5.2022. (englanniksi)
  207. Corbet, Jonathan: BPF: the universal in-kernel virtual machine 21.5.2014. LWN.net. Viitattu 27.11.2017.
  208. Linux Socket Filtering aka Berkeley Packet Filter (BPF) kernel.org. Viitattu 27.11.2017.
  209. Open vSwitch datapath developer documentation docs.kernel.org. Viitattu 29.5.2022. (englanniksi)
  210. Jonathan Corbet: Virtual private networks with WireGuard 6.3.2018. LWN.net. Viitattu 4.3.2019.
  211. The 5.6 kernel has been released lwn.net. Viitattu 30.3.2020. (englanniksi)
  212. Implementing RDMA on Linux (PDF) lenovopress.com. Viitattu 25.5.2021. (englanniksi)
  213. https://www.kernel.org/doc/html/latest/driver-api/infiniband.html
  214. What Does "Multi-User" Mean? lugod.org. Viitattu 22.3.2021. (englanniksi)
  215. Chris Wright, Crispin Cowan, James Morris, Stephen Smalley, Greg Kroah-Hartman: Linux Security Modules: General Security Support for the Linux Kernel usenix.org. 2002. Viitattu 24.3.2021. (englanniksi)
  216. POSIX Access Control Lists on Linux usenix.org. Viitattu 22.3.2021. (englanniksi)
  217. TOMOYO Linux and pathname-based security 14.4.2008. LWN.net. Viitattu 28.11.2017.
  218. AppArmor kernel.org. Viitattu 28.11.2017.
  219. Edge, Jake: Smack for simplified access control 8.8.2007. LWN.net. Viitattu 28.11.2017.
  220. Yama kernel.org. Viitattu 22.3.2021. (englanniksi)
  221. How to use the Linux kernel's Integrity Measurement Architecture redhat.com. 22.10.2020. Viitattu 17.2.2021. (englanniksi)
  222. Integrity Measurement Architecture (IMA) sourceforge.net. Viitattu 17.2.2021. (englanniksi)
  223. The Integrity Measurement Architecture lwn.net. 24.5.2005. Viitattu 6.4.2024. (englanniksi)
  224. Franciszek Pokryszko: Gotcha linux-magazine.com. 2021. Viitattu 6.4.2024. (englanniksi)
  225. Chapter 8. Enhancing security with the kernel integrity subsystem access.redhat.com. Viitattu 6.4.2024. (englanniksi)
  226. SECure COMPuting with filters kernel.org. Viitattu 8.3.2020. (englanniksi)
  227. Jonathan Corbet: Constant-action bitmaps for seccomp() lwn.net. 22.10.2020. Viitattu 17.2.2021. (englanniksi)
  228. Mickaël Salaün: Landlock: unprivileged access control kernel.org. Viitattu 27.7.2021. (englanniksi)
  229. 6 Linux Interprocess Communications The Linux Documentation Project. Viitattu 30.11.2017.
  230. Chandrashekar Babu: IPC mechanisms on Linux – Introduction chandrashekar.info. 1.8.2012. Arkistoitu 1.12.2017. Viitattu 30.11.2017.
  231. Brown, Neil: Bus1: a new Linux interprocess communication proposal 17.8.2016. LWN.net. Viitattu 4.12.2017.
  232. Brown, Neil: Fast interprocess communication revisited 9.11.2011. LWN.net. Viitattu 4.12.2017.
  233. a b Chapter 1. Introduction kernel.org. Viitattu 25.11.2017.
  234. strace(1) – Linux man page linux.die.net. Viitattu 25.11.2017.
  235. PTRACE(2) man7.org. Viitattu 25.11.2017.
  236. Kernel Probes (Kprobes) kernel.org. Viitattu 25.11.2017.
  237. Vince Weaver: Linux perf event Features and Overhead web.eece.maine.edu. 21.4.2013. Viitattu 25.11.2017.
  238. Jake Edge: Perfcounters added to the mainline lwn.net. 1.7.2009. Viitattu 12.12.2022. (englanniksi)
  239. 5.4. Performance Counters for Linux (PCL) Tools and perf access.redhat.com. Viitattu 12.12.2022. (englanniksi)
  240. The Kernel Address Sanitizer (KASAN) kernel.org. Viitattu 27.1.2020. (englanniksi)
  241. Jake Edge: The kernel address sanitizer 17.9.2014. Lwn.net. Viitattu 27.1.2020. (englanniksi)
  242. The Undefined Behavior Sanitizer - UBSAN kernel.org. Viitattu 27.1.2020. (englanniksi)
  243. a b Kernel Concurrency Sanitizer Set For Linux 5.5 To Uncover Data Race Conditions phoronix.com. Viitattu 27.1.2020. (englanniksi)
  244. Jake Edge: Finding bugs with sanitizers lwn.net. 27.9.2022. Viitattu 12.12.2022. (englanniksi)
  245. Kernel Electric-Fence (KFENCE) kernel.org. Viitattu 12.12.2022. (englanniksi)
  246. a b Linux 2 6 20 kernelnewbies.org. Viitattu 25.11.2017.
  247. Connecting Linux to hypervisors Lwn.net. Viitattu 9.8.2019. (englanniksi)
  248. Chenxi Wang: What is Docker? Linux containers explained 29.6.2017. InfoWorld. Viitattu 4.12.2017.
  249. Michael Reed: Xen Enters Mainline Kernel 20.6.2011. Linux Journal. Viitattu 11.8.2019. (englanniksi)
  250. Wim Coekaerts: Linux mainline contains all the Xen code bits for Dom0 and DomU support blogs.oracle.com. 26.5.2011. Viitattu 11.8.2019. (englanniksi)
  251. UserModeLinux HOWTO user-mode-linux.sourceforge.net. Viitattu 9.8.2019. (englanniksi)
  252. Cooperative Linux 0.51 lwn.net. Viitattu 9.8.2019. (englanniksi)
  253. Corbet, Jonathan: Safety-critical realtime with Linux LWN.net. Viitattu 5.10.2017.
  254. Zhao Yakui: Add the support of Linux guest on ACRN hypervisor lore.kernel.org. 29.5.2019. Viitattu 8.9.2020. (englanniksi)
  255. 1.8. Add the IoT ACRN supervisor kernelnewbies.org. Viitattu 8.9.2020. (englanniksi)
  256. Tim Anderson: Linux as root partition on Hyper-V: Microsoft submits patches for kernel 5.12 theregister.com. 17.2.2021. Viitattu 27.7.2021. (englanniksi)
  257. Linux GPU Driver Developer’s Guide kernel.org. Viitattu 1.11.2020. (englanniksi)
  258. Jeff Tranter: Introduction to Sound Programming with ALSA linuxjournal.com. 30.9.2004. Viitattu 14.1.2021. (englanniksi)
  259. CPU Performance Scaling kernel.org. Viitattu 22.2.2024. (englanniksi)
  260. Linux Media Infrastructure userspace API kernel.org. Viitattu 1.11.2020. (englanniksi)
  261. An Introduction to the Video4Linux Framework archive.fosdem.org. Viitattu 1.4.2021. (englanniksi)
  262. 7.2. Changes of the V4L2 API kernel.org. Viitattu 15.7.2024. (englanniksi)
  263. Buffer Sharing and Synchronization (dma-buf) docs.kernel.org. Viitattu 14.7.2024. (englanniksi)
  264. a b Efficient IO with io_uring (PDF) kernel.dk. Viitattu 1.11.2020. (englanniksi)
  265. Jonathan Corbet: Ringing in a new asynchronous I/O API lwn.net. 15.1.2019. Viitattu 1.11.2020. (englanniksi)
  266. Steven J. Vaughan-Nichols: The next deep magic Linux program to change the world? Io_uring theregister.com. 16.9.2022. Viitattu 22.9.2022. (englanniksi)
  267. kexec(8) - Linux man page linux.die.net. Viitattu 17.5.2021. (englanniksi)
  268. Greg Marsden: Reboot faster with kexec blogs.oracle.com. 5.3.2019. Viitattu 17.5.2021. (englanniksi)
  269. Kernel development static.lwn.net. 24.2.2000. Viitattu 1.11.2020. (englanniksi)
  270. Appendix A. The Device Mapper access.redhat.com. Viitattu 24.5.2021. (englanniksi)
  271. https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/index.html
  272. Use the Device Mapper storage driver docs.docker.com. Viitattu 24.5.2021. (englanniksi)
  273. Linux Device Mapper-Multipathing (DM-MP) ibm.com. Viitattu 24.5.2021. (englanniksi)
  274. Kernel Crypto API Interface Specification kernel.org. Viitattu 6.12.2020. (englanniksi)
  275. a b Boris Brezillion: An overview of the crypto subsystem (PDF) events17.linuxfoundation.org. Viitattu 6.12.2020. (englanniksi)
  276. Kernel Key Retention Service docs.kernel.org. Viitattu 26.12.2023. (englanniksi)
  277. keyctl(1) — Linux manual page man7.org. Viitattu 26.12.2023. (englanniksi)
  278. keyctl(2) — Linux manual page man7.org. Viitattu 26.12.2023. (englanniksi)
  279. Oxana Kharitonova, Ignat Korchagin: The Linux Kernel Key Retention Service and why you should use it in your next application blog.cloudflare.com. 28.11.2022. Viitattu 26.12.2023. (englanniksi)
  280. napi wiki.linuxfoundation.org. Viitattu 11.12.2021. (englanniksi)
  281. Jonathan Corbet: Newer, newer NAPI lwn.net. 7.8.2007. Viitattu 11.12.2021. (englanniksi)
  282. a b c d Jonathan Corbet: NAPI polling in kernel threads lwn.net. 9.10.2020. Viitattu 11.12.2021. (englanniksi)
  283. Network Filesystem Helper Library docs.kernel.org. Viitattu 20.1.2024. (englanniksi)
  284. netfs: Prep for write helpers lwn.net. Viitattu 20.1.2024. (englanniksi)
  285. Jonathan Corbet: /dev/userfaultfd lwn.net. 13.6.2022. Viitattu 17.8.2022. (englanniksi)
  286. userfaultfd(2) — Linux manual page man7.org. Viitattu 17.8.2022. (englanniksi)
  287. Jonathan Corbet: The next steps for userfaultfd() lwn.net. 29.3.2017. Viitattu 17.8.2022. (englanniksi)
  288. Compute Accelerators - Introduction docs.kernel.org. Viitattu 30.6.2024. (englanniksi)
  289. Michael Larabel: Intel's Habana Labs Driver Finishes Adapting To The Linux Accel Subsystem phoronix.com. 17.10.2023. Viitattu 30.6.2024. (englanniksi)
  290. Oded Gabbay: New subsystem for acceleration devices lore.kernel.org. 23.10.2022. Viitattu 30.6.2024. (englanniksi)
  291. a b Live patching the Linux kernel developer.ibm.com. 9.10.2018. Viitattu 1.11.2020. (englanniksi)
  292. a b c Linux Kernel Live Patching: What It Is and Who Needs It infosecurity-magazine.com. 6.3.2020. Viitattu 1.11.2020. (englanniksi)
  293. a b Linux 4.0 released lkml.org. Viitattu 6.8.2017. (englanniksi)
  294. a b c Livepatch kernel.org. Viitattu 1.11.2020. (englanniksi)
  295. Cao Jin: Exploring the Linux kernel: The secrets of Kconfig/kbuild opensource.com. 11.10.2018. Viitattu 1.9.2023. (englanniksi)
  296. Kconfig Language kernel.org. Viitattu 1.9.2023. (englanniksi)
  297. Greg Kroah-Hartman: The Kernel Configuration and Build Process linuxjournal.com. 1.5.2003. Viitattu 1.9.2023. (englanniksi)
  298. Kernel Configuration source.android.com. Viitattu 1.9.2023. (englanniksi)
  299. Jake Edge: Kernel configuration for distributions lwn.net. 18.7.2012. Viitattu 1.9.2023. (englanniksi)
  300. The kernel’s command-line parameters kernel.org. Viitattu 1.9.2023. (englanniksi)
  301. Kernel parameters wiki.archlinux.org. Viitattu 1.9.2023. (englanniksi)
  302. Kernel tunables (sysctl) docs.fedoraproject.org. Viitattu 1.9.2023. (englanniksi)
  303. Jonathan Corbet: Managing sysctl knobs with BPF lwn.net. 9.4.2019. Viitattu 1.9.2023. (englanniksi)
  304. sysctl(8) - Linux man page linux.die.net. Viitattu 1.9.2023. (englanniksi)
  305. Levine, Barry: Linux' 22th Birthday Is Commemorated – Subtly – by Creator CMS Wire. Viitattu 30.8.2017.
  306. NUMA(7) Linux man-pages project. Viitattu 30.11.2017.
  307. Linux Support for NUMA Hardware lse.sourceforge.net. Viitattu 30.11.2017.
  308. Corbet, Jonathan: NUMA in a hurry 14.11.2002. LWN.net. Viitattu 30.11.2017.
  309. uClinux on the Blackfin DSP Architecture: Part 1 12.4.2006. embedded. Viitattu 23.11.2017.
  310. uClinux and Linux set to merge linux.com. 19.11.2002. Viitattu 26.9.2020. (englanniksi)
  311. Hermann Härtig & Michael Hohmuth & Jochen Liedtke & Sebastian Schönberg & Jean Wolter: The Performance of µ-Kernel-Based Systems os.inf.tu-dresden.de. Viitattu 9.8.2019. (englanniksi)
  312. Arnd Bergmann: The future of 32-bit Linux lwn.net. 4.12.2020. Viitattu 16.1.2021. (englanniksi)
  313. a b Linux and the Device Tree kernel.org. Viitattu 16.3.2021. (englanniksi)
  314. ACPI Device Tree - Representation of ACPI Namespace kernel.org. Viitattu 16.3.2021. (englanniksi)
  315. The Unified Extensible Firmware Interface (UEFI) kernel.org. Arkistoitu 25.10.2020. Viitattu 16.3.2021. (englanniksi)
  316. Linux Hotplugging linux-hotplug.sourceforge.net. Viitattu 1.4.2021. (englanniksi)
  317. CPU hotplug in the Kernel kernel.org. joulukuu 2016. Viitattu 1.4.2021. (englanniksi)
  318. Memory hotplug kernel.org. Viitattu 1.4.2021. (englanniksi)
  319. Thomas Gleixner & Paul E. McKenney & Vincent Guittot: Cleaning Up Linux’s CPU Hotplug For Real Time and Energy Management (PDF) sigbed.seas.upenn.edu. marraskuu 2012. doi:10.1145/2452537.2452547 Viitattu 1.4.2021. (englanniksi) 
  320. a b https://www.kernel.org/doc/html/v5.0/process/license-rules.html
  321. Linux Syscall Note spdx.org. Viitattu 15.9.2021. (englanniksi)
  322. GNU General Public License v2.0 only spdx.org. Viitattu 15.9.2021. (englanniksi)
  323. a b Babcock, Charles: The Torvalds Transcript: Why I 'Absolutely Love' GPL Version 2 Information Week. Viitattu 6.8.2017. (englanniksi)
  324. Pentikäinen, Juho: Torvalds pitää uudesta gpl-luonnoksesta, Microsoft ei Tietoviikko. 29.3.2007. Talentum. Arkistoitu 15.7.2011. Viitattu 16.3.2010.
  325. Bruce Byfield: The Linux-libre Project Linux Magazine. Viitattu 13.7.2019. (englanniksi)
  326. a b LinuxVersions KernelNewbies. Viitattu 6.8.2017.
  327. D. P. Bovet & M. Cesati: Linux Evolution (PDF) sprg.uniroma2.it. 26.3.2008. Arkistoitu 14.12.2013. Viitattu 22.11.2017.
  328. Linux/390 – Notes and Observations linuxvm.org. Viitattu 6.8.2017. (englanniksi)
  329. McKenney, Paul: What is RCU, Fundamentally? LWN.net. Viitattu 6.8.2017.
  330. Kernel Virtual Machine linux-kvm.org. Viitattu 25.11.2017.
  331. Linux 2 6 24 Kernelnewbies. Viitattu 25.11.2017.
  332. Linux 2 6 29 Kernelnewbies. Viitattu 25.11.2017.
  333. Corbet, Jonathan: Transparent huge pages in 2.6.38 lwn.net. 19.1.2011. Viitattu 16.11.2017.
  334. Linux 2 6 38 Kernelnewbies. Viitattu 16.11.2017.
  335. Torvalds, Linus: Linux 3.0 release LWN.net. Viitattu 6.8.2017.
  336. Linux 3.1 Released With Support for the OpenRISC CPU Slashdot. Viitattu 6.8.2017.
  337. One Linux for all ARM systems ZDNet. Viitattu 6.8.2017.
  338. Linux 3.7 released, bringing generic ARM support with it 12.12.2012. Ars Technica. Viitattu 22.11.2017.
  339. Namespaces in operation, part 5: User namespaces lwn.net. Viitattu 14.2.2017.
  340. Sharwood, Simon: Linux 4.14 'getting very core new functionality' says Linus Torvalds The Register. Viitattu 19.9.2017.
  341. Larabel, Michael: Intel Working On 5-Level Paging To Increase Linux Virtual/Physical Address Space Phoronix. Viitattu 19.9.2017.
  342. The 4.14 kernel has been released lwn.net. 12.11.2017. Viitattu 13.11.2017.
  343. Corbet, Jonathan: Zero-copy networking lwn.net. 3.7.2017. Viitattu 13.11.2017.
  344. Linux 5.1 KernelNewbies. Viitattu 5.8.2019. (englanniksi)
  345. Linux 5.2 KernelNewbies. Viitattu 11.7.2019. (englanniksi)
  346. Jonathan Corbet: Six (or seven) new system calls for filesystem mounting 12.7.2018. Lwn.net. Viitattu 11.7.2019. (englanniksi)
  347. Linux 5.5 Feature Overview - Raspberry Pi 4 To New Graphics Capabilities To KUnit phoronix.com. Viitattu 27.1.2020. (englanniksi)
  348. Add Kernel Concurrency Sanitizer (KCSAN) lwn.net. 16.10.2019. Viitattu 27.1.2020. (englanniksi)
  349. Jonathan Corbet: Next steps for Rust in the kernel lwn.net. 19.9.2022. Viitattu 12.12.2022. (englanniksi)
  350. Marta Rybczyńska: Introducing maple trees lwn.net. 12.2.2021. Viitattu 12.12.2022. (englanniksi)
  351. Linux 6.1 kernelnewbies.org. Viitattu 12.12.2022. (englanniksi)

Kirjallisuutta

[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]