Linux (ydin)

Kohteesta Wikipedia
(Ohjattu sivulta Linux-ydin)
Loikkaa: valikkoon, hakuun
Tämä artikkeli käsittelee käyttöjärjestelmän ydintä. Artikkeli Linux käsittelee kokonaisia tietokoneohjelmistoja.
Linux ydin

Tux


Kehittäjä Linus Torvalds ja tuhansia kehittäjiä
Kehityshistoria
Julkaistu 0.0.1, 17. syyskuuta 1991[1]
Vakaa versio 4.14 / 12.11.2017 [2][3][4]
Kehitystilanne Aktiivinen
Tiedot
Ohjelmistotyyppi Käyttöjärjestelmän ydin
Alusta useita
Ohjelmointikielet C, Assembly
Lisenssi GPLv2
Verkkosivu www.kernel.org
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, 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, apuohjelmia, käyttöliittymiä ja sovelluksia valmiiksi paketoituna loppukäyttäjää varten, helpottamaan tietokoneen käyttöönottoa. Pelkästä Linux-ytimestä erottamiseen jakeluista käytetään toisinaan nimitystä GNU/Linux, sillä käyttöjärjestelmä ja sovellukset sisältävät paljon GNU-projektin tuottamia ohjelmistoja.

Historiaa[muokkaa | muokkaa wikitekstiä]

Helsingin yliopistossa tietojenkäsittelytiedettä opiskellut Linus Torvalds aloitti Linuxin kehittämisen 21-vuotiaana vuonna 1990. Linux lähti liikkeelle töiden jakamisen (engl. scheduler) harjoitustyöstä, jota Torvalds kehitteli tehtävänantoa monipuolisemmaksi. Työstä kehkeytyi kokonaisen käyttöjärjestelmän toimintoja sisältävä ohjelma.

Torvalds oli tyytymätön MS-DOS-käyttöjärjestelmään, joka hyödynsi huonosti hänen vasta hankkimansa Intel 80386 -koneen ominaisuuksia. Häntä kiinnosti Unix, sillä se oli vakaa ja siinä oli sellaisia ominaisuuksia, joita hän halusi. Unix oli suosittu ja sitä pidettiin hakkerien keskuudessa ainoana oikeana käyttöjärjestelmänä. Se oli kuitenkin liian vaativa ja kallis PC-käyttöön. Unixin lähdekoodi ei myöskään ollut enää vapaasti saatavilla.

Torvalds sai yliopistosta käsiinsä Andrew Tanenbaumin ohjelmoiman Minixin. Se oli PC:lle tarkoitettu, Unixia muistuttava käyttöjärjestelmä, joka oli suunniteltu opetuskäyttöön. Minixin lähdekoodi oli vapaasti kaikkien niiden saatavilla, joilla oli kopio Tanenbaumin kirjasta. Ohjelmoijat pystyivät näin opiskelemaan olemassa olevaa käyttöjärjestelmää ensimmäisen kerran sitten Unixin alkuaikojen.

Minixkään ei ollut sitä, mitä Torvalds oli hakemassa. Se kuitenkin mahdollisti ja inspiroi Linuxin ohjelmoinnin aloittamisen. Torvalds asensi Minixin koneeseensa ja kirjoitti uutta ydintä koko kesän. Vähitellen hän kokosi konekielellä ja C-ohjelmointikielellä käyttöjärjestelmän ytimen. 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ä.[5][1] Versio 0.01 valmistui 17. syyskuuta samana vuotena, joka oli ensimmäinen lähdekoodijulkaisu.[6][1] Torvalds oli itse tehnyt käännökset bash-komentorivitulkista ja GCC-kääntäjästä.[5][6]

Lokakuussa 1991 versio 0.02 oli valmis ja Torvalds päätti laittaa sen vapaasti kaikkien saataville. 5. lokakuuta Internetin keskusteluryhmää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.[7] Hän varoitti, että ohjelma oli hakkerilta hakkereille. Sen toimintakuntoon saattaminen saattoi siis vaatia hakkerin taitoja. Lisäksi hän rohkaisi muuttamaan ohjelmaa vapaasti ja toivoi kommentteja mahdollisista muiden Minixille kirjoittamista apuohjelmista ja funktioista. Toimiakseen Linux vaati vielä Minixin siinä koneessa, jossa sitä haluttiin käyttää. Myöhemmin samassa kuussa julkaistiin versio 0.03.

Alun perin Linus Torvalds oli suunnitellut antavansa ohjelmansa nimeksi Freax, joka olisi johdettu sanoista free Unix (vapaa Unix) tai freaks (omituiset, intoilijat, friikit). FTP-palvelimen ylläpitäjä Ari Lemmke ei kuitenkaan ollut pitänyt nimestä. 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. Version 0.12 yhteydessä Linus kertoi aikomuksesta käyttää GPL-lisenssiä.[8] 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. Vielä samana vuonna saatiin valmiiksi toimiva ja graafisella käyttöliittymällä varustettu työpöytä-Linux PC-koneisiin. Näihin aikoihin Linuxista kiinnostuttiin myös yliopistomaailman ulkopuolella.

Linuxin varhaiset versiot oli julkaistu Torvaldsin itse kirjoittamalla lisenssillä, joka ei sallinut ytimen levitystä rahaa vastaan. Linus ilmoitti version 0.12 julkistuksen yhteydessä siirtyvänsä käyttämään GNU GPL -lisenssiä 1. helmikuuta 1992 lähtien.[9] Nykyinen lisenssi on GPL versio 2 ja Torvalds on sanonut vastustavansa siirtymistä versioon 3 sen lisäämien käyttörajoituksien vuoksi.[10]

Torvalds on kuvaillut päätöstään julkaista Linux-ydin GPL-lisenssillä parhaaksi tekemäkseen asiaksi.[11]

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.

Moduulit[muokkaa | muokkaa wikitekstiä]

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

Suorittimet tukevat ytimen kernel-mode suoritustilassa erityiskomentoja ja sallii kaiken muistiavaruuden käytön.[13] Käyttäjän user-mode tilassa muistialueet käskyt ovat rajatumpia.[13] Suorituksen siirto käyttäjän ja ytimen tilojen välillä järjestelmäkutsujen yhteydessä kuluttaa huomattavasti aikaa.[13] Ytimet, joissa kaikki ajurit ovat kiinteästi osana ydintä ilman ladattavia moduuleja, ovat monoliittisiä ytimiä.[13]

Linux tukee moduulien kryptografista allekirjoittamista.[14] 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).[15] 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.[16][17]

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

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

Muita ladattavia moduuleja tukevia käyttöjärjestelmiä ovat esimerkiksi Solaris.[21]

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

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

#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");
}

Linux-aikajana[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: Linux-ytimen aikajana

Linux-ytimen versioita:[23][24]

  • Linux 0.01 julkaistiin 17. syyskuuta 1991.
  • Linux 0.02 julkaistiin 5. lokakuuta 1991.
  • Linux 0.03 julkaistiin lokakuussa 1991.
  • Linux 0.10 julkaistiin marraskuussa 1991.
  • Linux 0.11 julkaistiin 8. joulukuuta 1991: itsenäisesti toimiva versio, jossa kerneli voitiin kääntää ajamalla samaa versiota Linuxista.
  • Linux 0.12 joulukuussa 1991: muistin levylle sivuttaminen, siirtyminen 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 (monisuoritintuki) 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[25]
  • 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[23][26]
  • Linux 2.6 joulukuussa 2003 lisäsi XFS- ja JFS-tiedostojärjestelmät, sisälsi uudet ALSA-ääni- ja syöttölaitteiden ajurit, NPTL-säikeistyksen tuen ja tehosti käyttöä suurissa järjestelmissä.
  • 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[27][28][29]
  • Linux 3.0 heinäkuussa 2011. Torvalds ilmoitti muuttavansa versionumeroa Linuxin 20-vuotispäivien kunniaksi.[30]
  • Linux 3.1 lokakuussa 2011 lisäsi tuen OpenRISC-suorittimelle ja NFC-siruille.[31]
  • Linux 3.7 vuonna 2012 yhtenäisti tuen ARM-pohjaisille järjestelmäpiireille[32][33]
  • Linux 3.8 vuonna 2013 lisäsi tuen käyttäjien nimiavaruuksille[34]
  • Linux 4.0 huhtikuussa 2015 lisäsi tuen ytimen korjauspäivityksille ilman tarvetta koko järjestelmän uudelleenkäynnistykselle (live patching), tuki Intelin Skylake-alustalle, tuki Intelin Quark-piireille, tuki PlayStation 3 -konsolille, tuki äänelle DisplayPort-väylän kautta AMD:n Radeon-ohjainten avoimissa ajureissa.[35]
  • Linux 4.11 huhtikuussa 2017 lisäsi tuen muun muassa liitännäisille IO-skedulereille.[36]
  • Linux 4.14 marraskuussa 2017: uudistuksia ovat muun muassa viisitasoinen muistisivujen käsittely, joka nostaa maksimimuistimäärän teratavuista petatavuihin.[37][38] Muita uudistuksia ovat heterogeeninen muistikäsittely (HMM), ORC pinonkäsittely, AMD:n muistisalaus, nolla-kopion verkkokäsittely ja säikeistystuki cgroup-ryhmille.[39][40][41]

Arvo[muokkaa | muokkaa wikitekstiä]

Linux-ytimen uudelleenkehittämisen arvosta on esitetty useita arvioita: maaliskuussa 2011 sen arvioitiin olevan 3 miljardia Yhdysvaltain dollaria ja kasvavan.[42][43]

Kesällä 2015 ytimen versiossa 4.1 oli yli 19,5 miljoonaa lähdekoodiriviä.[44]

Kehittäjät[muokkaa | muokkaa wikitekstiä]

Linux Foundationin julkaiseman raportin mukaan kehitykseen on osallistunut yli 13 500 kehittäjää yli 1 300 yrityksestä.[45]

Alustat[muokkaa | muokkaa wikitekstiä]

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

Katso myös[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. a b c Larabel, Michael: Linux Turns 26 Years Old Phoronix. Viitattu 25.8.2017.
  2. https://www.kernel.org
  3. Torvalds, Linus: Linux 4.14 Viitattu 13.11.2017.
  4. Torvalds, Linus: Linux 4.14 Viitattu 13.11.2017.
  5. a b Torvalds, Linus: What would you like to see most in minix? Viitattu 5.8.2017.
  6. a b Torvalds, Linus: Notes for linux release 0.01 Viitattu 5.8.2017.
  7. Torvalds, Linus: Free minix-like kernel sources for 386-AT Viitattu 5.8.2017.
  8. Torvalds, Linus: RELEASE NOTES FOR LINUX v0.12 Viitattu 5.8.2017.
  9. http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12
  10. Linus Torvalds says GPL v3 violates everything that GPLv2 stood for Viitattu 3.7.2017.
  11. Hiroo Yamagata: The Pragmatist of Free Software, Linus Torvalds Interview, 30 September 1997
  12. a b Introduction to Linux Loadable Kernel Modules Viitattu 22.11.2017.
  13. 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.
  14. Kernel module signing facility Viitattu 22.11.2017.
  15. Day, Rob: The Kernel Newbie Corner: Kernel Symbols: What's Available to Your Module, What Isn't 29.7.2009. Viitattu 22.11.2017.
  16. Tainting from user space 24.5.2006. LWN.net. Viitattu 22.11.2017.
  17. Tainted kernels Viitattu 22.11.2017.
  18. Derek Molloy: Writing a Linux Kernel Module — Part 1: Introduction Viitattu 22.11.2017.
  19. Day, Rob: The Kernel Newbie Corner: Loadable Kernel Modules, Coming and Going 8.7.2009. Viitattu 22.11.2017.
  20. Debugging a loadable kernel module Viitattu 22.11.2017.
  21. Silberschatz & Galvin & Gagne: Operating System Concepts Essentials (PDF) Viitattu 10.11.2017.
  22. 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.
  23. a b LinuxVersions KernelNewbies. Viitattu 6.8.2017.
  24. D. P. Bovet & M. Cesati: Linux Evolution (PDF) 26.3.2008. Viitattu 22.11.2017.
  25. Linux/390 - Notes and Observations Viitattu 6.8.2017. (englanniksi)
  26. McKenney, Paul: What is RCU, Fundamentally? LWN.net. Viitattu 6.8.2017.
  27. Corbet, Jonathan: Transparent huge pages in 2.6.38 19.1.2011. Viitattu 16.11.2017.
  28. Linux 2 6 38 Kernelnewbies. Viitattu 16.11.2017.
  29. Gorman, Mel: Huge pages part 1 (Introduction) 16.2.2010. Viitattu 16.11.2017.
  30. Torvalds, Linus: Linux 3.0 release LWN.net. Viitattu 6.8.2017.
  31. Linux 3.1 Released With Support for the OpenRISC CPU Slashdot. Viitattu 6.8.2017.
  32. One Linux for all ARM systems ZDNet. Viitattu 6.8.2017.
  33. Linux 3.7 released, bringing generic ARM support with it 12.12.2012. Ars Technica. Viitattu 22.11.2017.
  34. Namespaces in operation, part 5: User namespaces Viitattu 14.2.2017.
  35. Linux 4.0 released Viitattu 6.8.2017. (englanniksi)
  36. Linux 4.11 Kernelnewbies. Viitattu 6.8.2017. (englanniksi)
  37. Sharwood, Simon: Linux 4.14 'getting very core new functionality' says Linus Torvalds The Register. Viitattu 19.9.2017.
  38. Larabel, Michael: Intel Working On 5-Level Paging To Increase Linux Virtual/Physical Address Space Phoronix. Viitattu 19.9.2017.
  39. The 4.14 kernel has been released 12.11.2017. Viitattu 13.11.2017.
  40. Corbet, Jonathan: Zero-copy networking 3.7.2017. Viitattu 13.11.2017.
  41. Linux 4.14 Kernelnewbies. Viitattu 13.11.2017.
  42. Wheeler, David A.: The Linux Kernel: It’s Worth More! Viitattu 6.8.2017. (englanniksi)
  43. The Cost of Linux Viitattu 6.8.2017. (englanniksi)
  44. Larabel, Michael: Linux Kernel At 19.5 Million Lines Of Code, Continues Rising Phoronix. Viitattu 6.8.2017.
  45. Linux Kernel Development Report 2016 Linux Foundation. Viitattu 6.8.2017. (englanniksi)
  46. Levine, Barry: Linux' 22th Birthday Is Commemorated - Subtly - by Creator CMS Wire. Viitattu 30.8.2017.

Kirjallisuutta[muokkaa | muokkaa wikitekstiä]

  • Bovet, Daniel P.; Cesati, Marco: Understanding the Linux Kernel. O'Reilly, 2005 (2000). ISBN 0-596-00565-2.
  • Corbet, Jonathan; Rubini, Alessandro; Kroah-Hartman, Greg: Linux Device Drivers. O'Reilly, 2005 (1998). ISBN 0-596-00590-3.
  • Benvenuti, Christian: Understanding Linux Network Internals. O'Reilly, 2006. ISBN 0-596-00255-6.
  • Hallinan, Christopher: Embadded Linux Primer: A Practical, Real-World Approach. Prentice-Hall, 2007. ISBN 0-13-167984-8.

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Commons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta Linux (ydin).
  • [1] Torvaldsin ilmoitus Linuxin versiosta 0.02 Internetin postituslistalla vuonna 1991 (englanniksi)
  • kernel.org Linux-ydin (englanniksi)
  • Ytimen dokumentaatiota - viittaa viimeisimpään versioon (englanniksi)
  • Linux.fi – suomenkielinen Linux-aiheinen wiki, joka sisältää tietoa ja vinkkejä Linuxiin käyttöön
  • [2] Helsingin yliopiston 4.9.2006 järjestämän Linuxin 15-vuotisseminaarin sivu
  • Linux Device Drivers, Third Edition Creative Commons -lisenssillä (englanniksi)