Linuxkjernen

Fra Wikipedia, den frie encyklopedi
(Omdirigert fra Linux (kjerne))
Hopp til: navigasjon, søk
Denne artikkelen omhandler Linuxkjernen. For operativsystemet, se GNU/Linux.
Linuxkjernen
Linuxkjernen
Linuxkjernen
Oppstart av Linux-kjernen 2.6.25.17
Skaper Linus Torvalds
Utgitt 17. september 1991 (utviklingsversjon)
14. mars 1994 (stabil versjon)[1]
Nyeste versjon 4.9.4 (15. januar 2017; 40 timer siden (2017-01-15)[2])
Nyeste beta-versjon 4.10 rc4 (16. januar 2017; 16 timer siden (2017-01-16))
Plattform Mange arkitekturer
Skrevet i C og AT&T assembler
Skrivebordsmiljø Ingen. Kommandobasert operativmiljø
OS-familie Unix-liknende
Type Tidsdelte operativsystemer
Kjerne Monolittisk kjerne
Lisens GNU General Public License versjon 2
Nettsted www.kernel.org

Linuxkjernen er en fri og åpen Unix-liknende operativsystemkjerne som benyttes verden over i operativsystemet Linux.[3] Den anvendes i personlige datamaskiner og tjenere,[4] vanligvis i form av Linuxdistribusjoner,[5] så vel som i innebygde systemer som rutere, trådløse basestasjoner, hustelefonsentraler, TV-mottakere, smart-TV'er,[6] digitale videopptakere[7] og nettverkstilsluttete datalagre. Operativsystemet Android for nettbrett, smarttelefoner og smartur benytter en modifisert Linuxkjerne.

Linuxkjernen ble skapt av finnen Linus Torvalds (1969–),[8] som lanserte første utviklingsversjon den 17. september 1991.[9] Første stabile versjon kom 14. mars 1994.[1] I dag vedlikeholdes den av et nettverk med brukere, hvor det inngår multinasjonale selskaper som Intel,[10] Red Hat,[10] IBM,[10] Hewlett-Packard,[9] Novell,[11][10] Oracle[10], Nokia,[10] Google,[12] Advanced Micro Devices,[12] Fujitsu[12] og Samsung.[12] Nesten 12 000 programmerere fra omkring 1 200 selskaper har bidratt til kjernens utvikling.[13][14] Gruppen «amatører» stod i 2007 for 3,9 % av endringene.[15] Utviklingsdiskusjoner foregår daglig på Linuxkjernens e-postliste.[11]

Linuxkjernen er en monolittisk kjerne, og var i starten avhengig av mikrokjernen Minix under oppstart. Kjernen er skrevet nesten utelukkende i programmeringsspråket C (med noen GNU C syntaksutvidelser)[16] og AT&T assembler.[16] Opprinnelig ble den utviklet for Intels 32-biter mikroprosessor 80386. I årenes løp har den blitt portert til de fleste datamaskinarkitekturer, deriblant x86-64, Motorola 68000, SPARC, PowerPC, IBM POWER, MIPS, PA-RISC, DEC Alpha, SuperH, IBM System z9, Intel Itanium og ARM. Støtten for grafikkprosessorer er fortsatt mangelfull.

Etterhvert har Linuxkjernen blitt endret fra å støtte kooperativ fleroppgavekjøring til å støtte fleroppgavekjøringen med «forkjøpsrett». Den har også blitt utvidet med symmetrisk flerprosessering, multitråder, delte biblioteker, virtuell hukommelse og demand paging, dynamisk lastbare moduler, støtte for et tyvetalls ulike filsystemer, avansert støtte for datanett og kommunikasjon med nettverksoperativsystemer (deriblant Network File System (NFS), Netware, m.m.), internett, støtte for ulike busser for periferienheter etter hvert som disse har utviklet seg (ISA, EISA, MCA, VESA, I2O, AGP, PCI, PCI-X, PCI Express, USB, FireWire) og utstyrsdrivere for ulike former for periferiutstyr. Som resultat har Linuxkjernen vokst fra 8 413 linjer med C-kode i første utviklingsversjon, til å omfatte 22 348 367 linjer med C-kode i versjon 4.9.0.

Linuxkjernen er utviklet under GNU General Public License versjon 2, og kildekoden er derfor fri programvare. Siste versjon er 4.9.4 som ble lansert 15. januar 2017.

Arkitektur[rediger | rediger kilde]

Monolittisk kjerne[rediger | rediger kilde]

Utdypende artikler: Monolittisk kjerne og mikrokjerne

Strukturen til operativsystemer som benytter henholdsvis monolittiske kjerner og mikrokjerner.

Linuxkjernen er en monolittisk kjerne. Dette betyr at hele operativsystemet kjører i operativsystemkjernen. Som kontrast til dette står mikrokjerner, hvor det absolutt minste antall tjenester opererer innenfor kjernen, og hvor andre tjenester bygges i lag på lag omkring den. Unix og Unix-lignende operativsystemer benytter stort sett monolittiske kjerner, som er den tradisjonelle arkitekturen. Mikrokjerner oppstod i 1980-årene som en reaksjon på utfordringer som tradisjonelle kjerner hadde i møtet med den teknologiske utvikling. Stadige teknologiske forandringer gjorde at det stadig måtte utvikles nye utstyrsdrivere, nye nettverksprotokoller og nye filsystemer. Også andre deler av operativsystemene var berørt. I distribuerte operativsystemer var dette spesielt følbart, fordi datanett kunne bestå av ulike datamaskinarkitekturer, som hver enkelt hadde sine egenarter og gjennomgikk sin egen særegne utvikling. Dette førte igjen til enda mer arbeid for utviklere av utstyrsdrivere. Mikrokjerner er implementert ved hjelp av modulær programmering: Utstyrsdrivere, nettverksprotokoller, filsystemer og flere ting fjernet fra kjernen. De er isolert i moduler utenfor kjernen, hvor de er lettere å håndtere og modifisere.

Forløperen til Linuxkjernen var MINIX, og i begynnelsen var Linuxkjernen avhengig av MINIX under oppstart. MINIX ble opprinnelig utviklet av Andrew S. Tanenbaum ved Vrije Universiteit Amsterdam, og første versjon ble lansert i 1987. MINIX er et POSIX-kompatibelt Unix-lignende operativsystem som er basert på en mikrokjerne. Den 29. januar 1992 startet Tanenbaum en debattUsenets diskusjonsgruppe comp.os.minix. Der hevdet han at mikrokjerner var overlegen i forhold til monolittiske kjerner, og at Linuxkjernen allerede før lanseringen i 1992 var foreldet. Debatten startet saklig, men utviklet seg etterhvert til en «flame war». Emnet ble tatt opp igjen den 9. mai 2006, og den 12. mai 2006 forklarte Tanenbaum på nytt sin holdning til monolittiske kjerner.

Mikrokjernen GNU Mach er også verdt å nevne, fordi den er GNU-prosjektets offisielle operativsystemkjerne. Den har sin forløper i mikrokjernen Mach fra Carnegie Mellon University, og er kjernen i GNU Hurd. Selv om Debian offisielt er en Linuxdistribusjon, finnes det en uoffisell avart (Debian GNU/Hurd) som kjører GNU Hurd i stedet for Linuxkjernen. Det samme er tilfelle for Arch Hurd (som er basert på Arch Linux), Guix System Distribution, tidligere avarter av Bee og Gentoo, og den tidligere distribusjon NixOS.

Linuxkjernen er ikke en del av GNU-prosjektet, men er blitt utviklet ved hjelp av GNU C og andre utviklingsverktøy fra GNU. Den er også lisensiert under GNU General Public License versjon 2.

Beskyttelsesringer[rediger | rediger kilde]

Utdypende artikler: Beskyttelsesring og brukermodus

Beskyttelsesringer for x86 tilgjengelig i beskyttet modus
Kart over Linuxkjernen
Linuxkjernen støtter ulike datamaskinarkitekturer, og gir en felles plattform for å kjøre fri og åpen så vel som proprietær programvare.

Moderne mikroprosessorer har beskyttelsesringer, som beskytter data og funksjonalitet fra feil. Disse beskyttelsesringene gjenspeiler seg i Linux, som skiller mellom brukermodus og kjernemodus. Eksempler på programmer som kjører i brukermodus er applikasjonsprogramvare, vindussystemet X, Wayland og skrivebordsmiljøer. De har ikke lov til å utføre maskinvarerelaterte kommandoer direkte, men må sende systemkall til Linuxkjernen som utfører disse kommandoene. Linuxkjernen er således den betrodde delen av Linux, som utfører maskinvarerelaterte kommandoer direkte. En slik beskyttelse sørger for feiltoleranse. Den hindrer for eksempel at en programvarefeil i en nettleser eller et annet brukerprogram skal kunne krasje hele operativsystemet. De tidligere operativsystemene Windows 95 og Windows 98 manglet til sammenligning slik feiltoleranse. Der kunne for eksempel programvarefeil i et dataspill føre til havari av hele datasystemet. OS/2 og Windows NT på den andre siden, utnyttet i likhet med Linux den beskyttede modus i x86-arkitekturen hvor disse beskyttelsesringene blir tatt i bruk.

En annen måte å si det på, er at beskyttelsesringene gir ulike prioritetsnivåer. Operativsystemkjernen har større prioritet enn brukerprogrammer, dersom de to skulle komme i konflikt. Vi sier at Linuxkjernen kjører i prioritetsring 0 (høyest prioritet), mens de øvrige prosesser kjører i prioritetsring 3.

Valget av en monolittisk kjerne, gjør at hele Linuxkjernen kjører i ring 0. En mikrokjerne ville ha ført til at kun det absolutt minste antall tjenester hadde kjørt i ring 0, og at de resterende delene av operativsystemkjernen kjørte i ring 3. Dette ville igjen ha ført til en svekkelse av kjernens ytelse, fordi ring 3 er tregere enn ring 0, og fordi ulike deler av kjernen hadde vært nødt til å sende systemkall til hverandre i stedet for å utføre kommandoer direkte. Mikrokjerner har således den fordel at de gjør operativsystemet enklere å modifisere. Men prisen for denne modulariteten er en svekket ytelse.

Figuren nedenfor viser de ulike lagene i Linux. Den viser også skillet mellom brukermodus og kjernemodus.

Utstyrsdrivere og kjerneutvidelser for skedulering, interprosesskommunikasjon, minnehåndtering, virtuelle filer og datanett, kjører alle sammen i operativsystemkjernen (ring 0), og har full tilgang til maskinvaren. Dette gjelder også komponenter som Advanced Linux Sound Architecture, Security-Enhanced Linux (SELinux), etc. Nevneverdige unntak er virtuelle filsystemer som er basert på Filesystem in Userspace (FUSE) og character in userspace (CUSE), såvel som deler av UIO (utstyrsdrivere i brukermodus).[17][18] Vindussystemet X og Wayland, som de fleste bruker sammen med Linux, kjører ikke innenfor kjernen, men i brukermodus. Til forskjell fra tradisjonelle monolittiske kjerner, kan utstyrsdrivere enkelt bli konfigurert som lastbare kjernemoduler, som kan bli innlastet og avlastet mens systemet kjører. Ulikt tradisjonelle monolittiske kjerner, kan utstyrsdrivere under visse omstendigheter bli deaktivert og aktivert dynamisk, for å bedre håndtere maskinvareavbrudd på en korrekt måte og for bedre å støtte symmetrisk flerprosessering.[19] Linuxkjernen har intet binært applikasjonsgrensesnitt (ABI).[20]

Maskinvaren er også inkorporert i filsystemets hierarki. Utstyrsdrivere har et grensesnitt til brukerapplikasjoner gjennom en definisjon i katalogene /dev eller /sys.[21] Prosessinformasjon blir også definert i filsystemet gjennom katalogen /proc.[21]

Ulike lag i Linux, som viser skillet mellom brukermodus og kjernemodus
Brukermodus Applikasjoner Bash, LibreOffice, Apache OpenOffice, Blender, 0 A.D., Mozilla Firefox, etc.
Lavnivå systemkomponenter: Daemoner:
systemd, runit, logind, networkd, soundd, ...
Vindussystem:
X11, Wayland, Mir, SurfaceFlinger (Android)
Andre biblioteker:
GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep, etc.
Grafikk:
Mesa, AMD Catalyst, ...
C-standardbiblioteket open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (omkring 2000 subrutiner)
glibc er kompatibelt med POSIX og Single UNIX Specification, uClibc er ment for innebygde systemer, bionic er skrevet for Android, etc.
Kjernemodus Linuxkjernen stat, splice, dup, read, open, ioctl, write, mmap, close, exit, etc.
(omkring 380 POSIX/SUS-kompatible systemkall)
Delsystem for
skedulering
Delsystem for
interprosesskommunikasjon
Delsystem for
minnehåndtering
Delsystem
for virtuelle filer
Delsystem for nettverk
Andre komponenter: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter
Linux Security Modules: SELinux, TOMOYO, AppArmor, Smack
Maskinvare (mikroprosessor, hovedminne, datalager, etc.)

Fleroppgavekjøring med «forkjøpsrett»[rediger | rediger kilde]

Eksempel på fleroppgavekjøring i en fransk versjon av Debian med skrivebordsmiljøet KDE 3.3.5. Nettleseren Konqueror kjører samtidig med Amarok og KwikDisk. Det vises også tre instanser av nettleseren, en av dem brukes som filbehandler og den andre til bildefremvisning.

I likhet med tradisjonell Unix (og de fleste av dagens operativsystemer) har Linuxkjernen støtte for fleroppgavekjøring: Flere programmer kan utføres tilsynelatende samtidig på en og samme datamaskin. I begynnelsen var likevel denne mindre sofistikert enn i tradisjonell Unix. Frem til versjon 2.4, som ble lansert 4. januar 2001, benyttet Linuxkjernen såkalt kooperativ fleroppgavekjøring. Dette betyr at programmer samarbeider om å dele mikroprosessor-tid mellom seg. En prosess fortsetter å utføre instruksjoner alene på mikroprosessoren helt til den overlater kontrollen til en annen prosess. Det er opp til programmererne å sørge for at programmene gir fra seg tilgangen til mikroprosessoren når de ikke lenger foretar seg noe nyttig. Dersom et program henger seg opp eller utfører langvarige operasjoner uten å slippe kontrollen til andre prosesser, kan hele datasystemet gå i stå.

Som kontrast til dette har Unix støttet den mer sofistikerte fleroppgavekjøringen med «forkjøpsrett». Det har «forkjøpsrett», makt til å avbryte prosessen, og senere gi det andre oppgaver. Slik at den i mellomtiden ikke sperrer andre programmer. Linux har riktignok støttet dette fra starten, men bare overfor programmer i brukermodus. I versjon 2.4 begynte arbeidet med å innføre fleroppgavekjøringen med «forkjøpsrett» også i Linuxkjernen. Dette arbeidet var fullført med lanseringen av versjon 2.6 den 17. desember 2003.

Til sammenligning ble kooperativ fleroppgavekjøring benyttet i operativsystemene Windows 3.0 og Windows 3.1, så vel som i det klassiske MacOS og i de fleste versjoner av NetWare (før versjon 6.5). Windows 95 og Windows 98 benyttet kooperativ fleroppgavekjøring under kjøring av 16-biter programmer, og fleroppgavekjøring med «forkjøpsrett» under kjøring av 32-biter programmer. Fleroppgavekjøringen med «forkjøpsrett» var standard på de tidligere operativsystemene OS/2 og NeXTSTEP, og har alltid vært det på Windows NT og OS X.

Symmetrisk flerprosessering[rediger | rediger kilde]

Utdypende artikkel: Symmetrisk flerprosessering

Fra og med versjon 2.0, som ble lansert 9. juni 1996, har Linuxkjernen hatt støtte for symmetrisk flerprosessering. Til sammenligning var støtte for symmetrisk flerprosessering fraværende i klassisk MacOS så vel som i MS-DOS baserte versjoner av Microsoft Windows. Det ble innført støtte for dette i spesielle utgaver av OS/2 (fra versjon 2.11), og ble standard i Windows NT og MacOS X. Symmetrisk flerprosessering er en form for flerprosessering, hvor det benyttes to eller flere mikroprosessorer i et og samme datasystem. Symmetrisk flerprosessering støttes direkte av maskinvaren, mens asymmetrisk flerprosessering besørges indirekte av operativsystemet eller annen programvare.

Symmetrisk flerprosessering faller inn under kategorien SIMD (Single Instructions, Multiple Data) i Flynns taksonomi. Det innebærer at to eller flere mikroprosessorer deler et felles dataminne. Dette kan bety at flere prosessorkjerner finnes på samme mikrobrikke, at flere mikrobrikker (med en eller flere kjerner) finnes i en enkelt mikroprosessor, eller at flere mikroprosessorer finnes på et hovedkort. Symmetrisk flerprosessering kan også realiseres i et nettverk; da deles et felles dataminne av to eller flere datamaskiner.

Symmetrisk flerprosessering var ikke noe nytt. Det ble første gang lansert i enkelte modeller av stormaskinen IBM System/360. Modell 65, modell 67 og modell 67-2, som kom på markedet i 1965, var stormaskiner med to mikroprosessorer som kjørte samtidig. Operativsystemene OS/360 M65MP og IBM TSS/360 støttet denne flerprosesseringen, og det samme var tilfelle med Michigan Terminal System. I 1986 innledet Sun Microsystems en ny RISC-familie gjennom spesifikasjonen til datamaskinarkitekturen SPARC, og i 1987 gjorde den sin debut i arbeidsstasjonen «Sunrise». SPARC var en forkortelse for «skalerbar prosessorarkitektur» (Scalable Processor ARChitecture), og arkitekturen kunne skaleres opp til å bestå av flere tusen mikroprosessorer (superdatamaskiner). Unix-avartene SunOS og Solaris var laget for disse datamaskinene.

Det finnes mange flere eksempler på symmetrisk flerprosessering, men det tok tid før slike systemer ble solgt til almuen som personlige datamaskiner. Sequent Computer Systems lanserte i 1987 datamaskiner med opptil 20 stk 32-biter Intel 80386 mikroprosessorer (Symmetry S-serien). I 1995 ble Intel Pentium Pro lansert, med innebygd logikk for symmetrisk flerprosessering. I 2006 lanserte Intel dobbeltkjerneprosessoren Intel Pentium Dual Core og firekjernersprosessoren Core Quad. I dag er flerkjerners mikroprosessorer stort sett standard.

Multitråder[rediger | rediger kilde]

Utdypende artikkel: Tråder

Programmeringsspråk[rediger | rediger kilde]

Kjernen er skrevet nesten utelukkende i programmeringsspråket C (med noen GNU C syntaksutvidelser) og AT&T assembler.

Historie[rediger | rediger kilde]

Minix[rediger | rediger kilde]

Forløperen til Linux-kjernen var Minix. Da Unix var et ungt operativsystem, var kildekoden åpent tilgjengelig. Frem til UNIX versjon 6 ble kildekoden distribuert på universiteter, og John Lions ved University of New South Wales publiserte endog en beskrivelse av hver eneste linje i kildekoden.

AT&T oppdaget etter hvert operativsystemets potensial som et kommersielt produkt. Ved lanseringen av UNIX versjon 7 var kildekoden blitt en forretningshemmelighet som var ulovlig å studere på universiteter.

I denne situasjonen ble Minix utviklet av Andrew S. Tanenbaum ved Vrije Universiteit i Amsterdam. I 1987 publiserte han hele kildekoden med sine 12,649 linjer i en lærebok om operativsystemer.[22]

Linux tar form[rediger | rediger kilde]

Blant brukerne av Minix var Linus Torvalds. Minix 1.0 var blitt utviklet for å kjøre på Intels 16-bit mikroposessorer. Minix 1.5, som ble lansert i 1991, ble portert til Motorola 68000 og SPARC. Linus savnet et system for Intels nye 32-bit mikroprosessorer 80386 og 80486, og begynte arbeidet med å lage et nytt operativsystem for denne nye familien av mikroprosessorer.

Prosjektet startet den 26. august 1991 med en posting av Linus på Usenet-gruppen comp.os.minix:

Sitat Jeg lager et (fritt) operativsystem (bare en hobby, vil ikke bli stort og profesjonelt som gnu) for 386(486) AT-kloner... Dette har vært i anmarsj siden april, og begynner å bli ferdig. ... Jeg har for øyeblikket portert bash(1.08) og gcc(1.40). ... Det er uten noen minix-kode, og har et filsystem med multitråder.[23] Sitat

GNU-prosjektet hadde allerede skapt mange nødvendige komponenter i et fritt operativsystem. Operativsystem-kjernen GNU Hurd var likevel ennå ikke ferdig utviklet, og BSD-operativsystemene hadde ikke frigjort seg fra juridiske problemstillinger, slik at de kunne distribueres som fri programvare.

AT&T's bruk av patenter som et kommersielt middel, mot konkurrenter såvel som universiteter, tvang frem et fritt alternativ. Linus hadde ikke noe avansert operativsystem i tankene. Ei heller var det ment for alment bruk. Han ante ikke at prosjektet raskt skulle samle utviklere og brukere, der Minix-hackere tidlig bidro med kode og idéer til Linux-kjernen. Ei heller kunne han ane at kjernen etterhvert fikk hjelp av flere tusen programvare-utviklere.

Definisjonen av prosjektet som «ikke profesjonelt» skyldes at Tanenbaum konstruerte Minix etter prinsippene om en mikrokjerne i det distribuerte operativsystemet Mach. Mach representerte avansert nytenkning på denne tiden i universitetsmiljøer.

Linux mangler mikrokjerne. Det både var (og er) «monolittisk» liksom den opprinnelige UNIX. Linus benyttet heller ikke segmentert swapping etter modell fra Multics, fordi dette lettere gir et fragmentert minne enn sideveksling. Istedet valgte Linus samme minne-modell som IBM gjorde i OS/2 3.x:

Sitat Det er for det meste skrevet i [programmeringsspråket] C. ... Det utnytter enhver tenkelig egenskap ved 386 som jeg kunne finne, ettersom dette også var et prosjekt for å lære meg selv om 386-[prosessoren]. Som allerede nevnt, benytter det en MMU for både sideveksling (ennå ikke til disk) og segmentering. Det er segmenteringen som VIRKELIG gjør det 386-avhengig (enhver oppgave har et 64Mb segment for kode & data &ndash: maksimum 64 oppgaver i 4Gb) .... Fragmentering er et onde ...Jeg vil muligens gjøre det slik at [minne]-grensene enkelt kan forandres (til 32 Mb/128 oppgaver for eksempel) gjennom bare en [lettvint] rekompilering av kjernen.[23] Sitat

Første versjon ble lansert den 17. september 1991 med versjonsnummeret 0.01. Datoen kan regnes som Linux-kjernens «fødselsdato», selv om den formelt ennå var uferdig. Kjernen hadde da 8.413 linjer med kode, og det ble solgt 90 datamaskiner som var bygd og sentrert omkring den nye operativsystem-kjernen.

Versjon 0.02 ble lansert den 5. oktober 1991.[24] Tredje versjon (desember 1991) hadde versjonsnummeret 0.11, og kunne rekompileres uavhengig av Minix. Ved lanseringen av verjon 0.12 i februar 1992, erstattet Linus sin egen lisens (som ikke tillot kommersiell distribuering) med GNU-lisensen for fri programvare.[25]

Den første postingen på Usenets diskusjonsgruppe alt.os.linux kom den 19. januar 1992.[26] Den 31. mars 1992 ble den omdøpt til comp.os.linux.[27]

Versjon 0.95 (7. mars 1992) kunne kjøre XFree86, som var en fri klone av vindussystemet X. Hoppet i nummereringen fra 0.12 til 0.95, skyldtes troen på at versjon 1.0 var umiddelbart forestående. Dette var en overoptimistisk antagelse: Versjon 0.95 ble etterfulgt av 0.95a, 0.96a (med fire revisjoner), 0.96b (med to revisjoner), 0.96c (med to revisjoner), 0.97 og 0.99. Fra 1993 til 1994 ble det lansert 15 oppdaterte versjoner av 0.99.

Den 13. mars 1994 ble Linux 1.0 endelig lansert. Et fritt operativsystem for Intel 80386 var en realitet, og er fødselsdatoen til den første stabile Linux-kjernen.

Versjon 1.2[rediger | rediger kilde]

Versjon 1.1 var en utviklingsversjon som kulminerte i lanseringen av den stabile versjon 1.2 den 7. mars 1995. En mer modulær oppbygning av kildekoden gjorde det enklere å portere Linux-kjernen til andre datamaskin-arkitekturer enn Intel 80386.

En variant av Linux-kjernen (versjonene 1.2 og 2.0) for Motorola 68000-serien, kalt Linux/mk68, ble utviklet uavhengig av det offisielle Linux-kjerne prosjektet. Debian's Linux-distribusjon Debian/mk68k benyttet denne porteringen av versjon 2.0.[28]

Versjon 2.0[rediger | rediger kilde]

Versjon 2.0 ble lansert den 9. juni 1996, etter å ha blitt utviklet gjennom utviklingsversjonen 1.3. Denne nye stabile versjonen ble utviklet ved hjelp av GNU C-kompilatoren versjon 2.7.2 og binutils 2.6.0.14.

Versjon 2.0 hadde bedre støtte for nettverk, med protokollene PPP, SLIP, CSLIP og PLIP, såvel som DDP (Appletalk), samt flere utstyrsdrivere. Den støttet også symmetrisk flerprosessering, der opptil 16 mikroprosessorer kunne kjøre i parallell i en og samme datamaskin. Den var enda mer modulært oppbygd enn versjon 1.2, og hadde dynamisk opplastbare moduler hvor blant annet aksess-lister ble implementert.

Versjon 2.0 var også den første operativsystem-kjernen med innebygd støtte for Java.

Versjon 2.2[rediger | rediger kilde]

Versjon 2.2, den stabile utgaven av utviklingsversjonen 2.1, ble lansert den 25. januar 1999.[29] Den ble portert til Motorola 68000, PowerPC, såvel som til 64-bit mikroprosessorene SPARC64 og DEC Alpha. Den støttet også optimaliseringer for x86-kloner fra AMD og Cyrix Corporation. Versjon 2.2 innførte også støtte for Micro Channel architecture, «Plug & Play» for PCI-kort, støtte for CD-ROM, DVD, Iomega zip-drives, irDA, digital penn, og utvidet støtte for de fleste typer av Joystick. Koden for håndtering av lyd, lydkort og periferiutstyr for lyd (høytalere, etc.), var gjort mer modulær og enklere å oppdatere. Støtten for video var kraftig forbedret, med støtte for et voksende antall kort for TV (Video4Linux), radio og digitale kameraer. Det samme gjaldt støtten for amatør-radioer ved å tilføye støtte for protokollene NetROM og ROSE, og forbedringer i AX.25-laget.

Versjon 2.2 innførte støtte for internett-protokollen IPv6, med SPX og IPX.

Det «utvidede filsystemet» (ext) i de tidligere utgavene av Linux-kjernen, ble erstattet med ext2.

I nettverk ble det mulig å lese innholdet på datamaskiner med andre operativsystemer, og deres filsystemer: NTFS (Windows NT), FAT (MS-DOS), Virtual FAT og FAT32 (Windows 95 og Windows 98), Microsoft Joliet system (med lange filnavn på CD-ROM), HFS (Apple Macintosh), FFS (Amiga), UFS (BSD), SysVFS, Minix, Acorn RiscOS, FreeBSD, SunOS, og Solaris. I nettverk ble også støtten for NetWare forbedret.

To andre viktige nyheter i versjon 2.2, var støtte for Unicode og en gryende tilpasning til Unix98 standarden.

Versjon 2.4[rediger | rediger kilde]

Versjon 2.4, den stabile utgaven av utviklingsversjonen 2.3, ble lansert den 4. januar 2001. I heterogene nettverk ble støtten til andre operativsystemers filformater utvidet til å omfatte OS/2, Efs (Irix) og NextStep. Linux-kjernen støttet for første gang Sun NFS 3.0.[30] Versjon 2.2 av Linux-kjernen var den første operativsystem-kjernen som var fullstendig kompatibel med IPv4-spesifikasjonen. Versjon 2.4 gjorde implementasjonen enda mer skalerbar. I nettverkslaget ble det også tilføyd støtte for DECNet, og innenfor OSI-modellens datalink-lag ble de to lagene for PPP og ISDN i versjon 2.2 slått sammen til ét lag.

Versjon 2.2 satte en grense på 1024 samtidig kjørende prosesser eller tråder. I versjon 2.4 var grensen skalerbar under kjøring, slik at det eneste som begrenser antall prosesser var datamaskinens mengde med RAM.

Versjon 2.4 tilføyde støtte for USB, PCMCIA, PCI-utvidelsen I2O og ISA Plug and Play. IDE-kontrollere støttet maksimalt 4 lagringsenheter i en datamaskin, det være seg harddisker, CD-ROM eller DVD. Versjon 2.2 utvidet grensen til 4 kontrollere og 10 IDE-enheter. I versjon 2.4 ble dette utvidet til 10 kontrollere og 20 enheter. Versjon 2.4 kunne også kjøres i innebygde systemer.

En generisk program-laster gjorde det mulig å kjøre DOS- og Windows-programmer direkte fra kjernen gjennom emulatorer som WINE og Dosemu. Versjon 2.4 var også mer kompatibel med POSIX, og mer avhengig av formatet ELF enn versjon 2.2, selv om versjon 2.2 var den første Linux-kjernen som bare kunne kompileres som ELF.

Versjonshistorikk[rediger | rediger kilde]

Tidslinje[rediger | rediger kilde]

Versjonene før 2.6[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner1 Merknader
0.x 0.01 17. september 1991 8 413 230 88 Første utviklingsversjon. Ble bootet på Intel 80386 med Minix, finsk
tastatur og kommandotolken bash.
0.02 5. oktober 1991 10 239
1.0 1.0.0 13. mars 1994 170 581 1 259 563 Første stabile versjon.
1.0.1 16. mars 1994
1.0.2 18. mars 1994
1.0.3 21. mars 1994
1.0.4 22. mars 1994
1.0.5 28. mars 1994
1.0.6 3. april 1994
1.0.7 6. april 1994
1.0.8 7. april 1994
1.0.9 16. april 1994 1 256 Siste underversjon
1.1 1.1.0 6. april 1994 170 320 1 256 561 Utviklingsversjoner
1.1.95 2. mars 1995 2 301
1.2 1.2.0 7. mars 1995 294 623 2 301 909 Portabel til flere arkitekturer. Lansert for Motorola 68000,
Alpha, MIPS og SPARC
1.2.1 17. mars 1995
1.2.2 27. mars 1995
1.2.3 2. april 1995
1.2.4 6. april 1995
1.2.5 12. april 1995
1.2.6 23. april 1995
1.2.7 29. april 1995
1.2.8 3. mai 1995
1.2.9 1. juni 1995
1.2.10 12. juni 1995
1.2.11 26. juni 1995
1.2.12 25. juli 1995
1.2.13 2. august 1995 2 355
1.3 1.3.0 12. juni 1995 323 581 2 558 992 Utviklingsversjoner
1.3.100 10. mai 1996   5 615
2.0 2.0.0 9. juni 1996 716 119 5 844 2 015 Symmetrisk multiprosessering, aksesslister i dynamisk
opplastbare moduler, Java, flere nettverksprotokoller.
2.0.1 3. juli 1996
2.0.2 5. juli 1996
2.0.40 8. februar 2004   7 551
2.1 2.1.0 30. september 1996 735 736 6 033 1 727 Utviklingsversjoner
2.2.0-pre9 21. januar 1999   13 077
2.2 2.2.0 25. januar 1999 1 676 182 13 080 4 599 Porteringer til 64-bit RISC: Power, DEC Alpha, PA-RISC,
SPARC64, UltraSPARC. Støtte for internettprotokollen IP v.6
og det nye filsystemet ext 2.
2.2.26 25. februar 2004   19 530
2.3 2.3.0 11. mai 1999 1 763 358 13 804 4 721 Utviklingsversjoner
2.3.0-pre9 23. mai 2000   20 882
2.4 2.4.0 4. januar 2001 3 158 560 24 379 8 187 Utvidet støtte for teknologier for periferienheter: ACPI, USB, etc.,
utvidet støtte for nettverk, skalerbar grense for antall multitråder
som flyttes ved utvidelse av RAM
2.4.37 2. desember 2008   38 735
2.4.37.11 18. desember 2010     Siste underversjon

Versjon 2.6[rediger | rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner1 Merknader
2.5 2.5.0 23. november 2001 3 833 603 29 405 9 893 Utviklingsversjoner
2.5.75 10. juli 2003   40 969
2.6 2.6.0 18. desember 2003 5 475 685 41 614 15 007
2.6.11 2. mars 2005     Nytt undernivå i versjonsnummerering (2.6.x.x).
2.6.11.12 12. juni 2005    
2.6.12 17. juni 2005    
2.6.12.6 29. august 2005    
2.6.13 29. august 2005    
2.6.13.5 15. desember 2005    
2.6.14 28. oktober 2005    
2.6.14.7 31. januar 2006    
2.6.15 3. januar 2006    
2.6.15.7 28. mars 2006    
2.6.16 20. mars 2006    
2.6.16.62 21. juli 2008    
2.6.17 18. juni 2006    
2.6.17.14 13. oktober 2006    
2.6.18 20. september 2006    
2.6.18.8 23. februar 2007    
2.6.19 29. november 2006    
2.6.19.7 3. mars 2007    
2.6.20 4. februar 2007 8 102 486 54 548 21 280
2.6.20.21 17. oktober 2007    
2.6.21 26. april 2007 8 246 470 55 329 21 614
2.6.21.7 4. august 2007    
2.6.22 8. juli 2007 8 499 363 56 914 22 411
2.6.22.19 26. februar 2008    
2.6.23 9. oktober 2007 8 566 554 57 404 22 530
2.6.23.17 26. februar 2008    
2.6.24 24. januar 2008 8 859 629 59 079 23 062
2.6.24.7 7. mai 2008    
2.6.25 17. april 2008 9 232 484 61 518 23 810
2.6.25.20 10. november 2008    
2.6.26 13. juli 2008 9 411 724 62 550 24 270
2.6.26.8 10. november 2008    
2.6.27 9. oktober 2008 9 709 868 63 721 24 354 Støtte for ny maskinvare, deriblant Serial Attached SCSI
2.6.27.62 17. mars 2012    
2.6.28 24. desember 2008 10 195 507 66 766 25 255
2.6.28.10 2. mai 2009    
2.6.29 23. mars 2009 11 010 647 71 977 26 668
2.6.29.6 2. juli 2009    
2.6.30 10. juni 2009 11 637 173 75 768 27 879 Støtte for USB 3.0
2.6.30.10 4. desember 2009    
2.6.31 9. september 2009 12 046 317 78 279 29 111
2.6.31.14 5. juli 2010    
2.6.32 3. desember 2009 12 610 030 81 901 30 485
2.6.32.65 13. desember 2014    
2.6.33 24. februar 2010 12 990 041 84 533 31 565
2.6.33.20 7. november 2011    
2.6.34 16. mai 2010 13 320 934 86 520 32 297
2.6.34.15 11. februar 2014    
2.6.35 1. august 2010      
2.6.35.14 1. august 2011    
2.6.36 20. oktober 2010      
2.6.36.4 17. februar 2011    
2.6.37 5. januar 2011      
2.6.37.6 27. mars 2011    
2.6.38 15. mars 2011      
2.6.38.8 3. juni 2011    
2.6.39 19. mai 2011      
2.6.39.4 3. august 2011    

Versjon 2.6–[rediger | rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner1 Merknader
3.0 3.0 rc1 29. mai 2011     Utviklingsversjoner
3.0 rc7 11. juli 2011
3.0 22. juli 2011    
3.0.101 22. oktober 2013    
3.1 3.1 rc1 8. august 2011     Utviklingsversjoner
3.1 rc10 17. oktober 2011
3.1 24. oktober 2011     Støtte for OpenRISC
3.1.10 18. januar 2012    
3.2 3.2 rc1 8. november 2011     Utviklingsversjoner
3.2 rc7 24. desember 2011    
3.2.0 4. januar 2012      
3.2.68 6. mars 2015      
3.3 3.3 rc1 19. januar 2012     Utviklingsversjoner
3.3 rc7 10. mars 2012    
3.3.0 19. mars 2012      
3.3.8 1. juni 2012      
3.4 3.4 rc1 31. mars 2012     Utviklingsversjoner
3.4 rc7 13. mai 2012    
3.4.0 21. mai 2012      
3.4.106 2. februar 2015      
3.5 3.5 rc1 3. juni 2012     Utviklingsversjoner
3.5 rc7 14. juli 2012    
3.5.0 21. juli 2012      
3.5.7 12. oktober 2012      
3.6 3.6 rc1 2. august 2012     Utviklingsversjoner
3.6 rc4 1. september 2012    
3.6.0 1. oktober 2012      
3.6.11 17. desember 2012      
3.7 3.7.0 11. desember 2012      
3.7.10 27. februar 2013      
3.8 3.8.0 19. februar 2013      
3.8.13 11. mai 2013      
3.9 3.9.0 29. april 2013      
3.9.11 21. juli 2013      
3.10 3.10.0 30. juni 2013      
3.10.73 26. mars 2015      
3.11 3.11.0 2. september 2013      
3.11.10 29. november 2013      
3.12 3.12.0 3. november 2013      
3.12.39 19. mars 2015      

1 Antall datamaskiner solgt med find . -type f | wc -l

Referanser[rediger | rediger kilde]

  1. ^ a b Index of /pub/linux/kernel/v1.0, kernel.org, besøkt 2. august 2016
  2. ^ Linus Torvalds (10. januar 2016). «Linux 4.4». 
  3. ^ Bovet 2005, side 1
  4. ^ Bovet 2005, side 7
  5. ^ «README». Linux kernel source tree, git.kernel.org. Besøkt 1. august 2016. 
  6. ^ Linux TV, linuxtv.org, 26. mai 2016, besøkt 3. august 2016
  7. ^ PVR recording software, Kodi, 4. februar 2016
  8. ^ Richardson, Marjorie (1. november 1999). «Interview: Linus Torvalds». Linux Journal. Besøkt 2. august 2016. 
  9. ^ a b Linux, history-computer.com, 2007
  10. ^ a b c d e f Corbet 2012, side 9
  11. ^ a b Love 2015
  12. ^ a b c d Corbet 2012, side 10
  13. ^ «The Linux Foundation Releases Linux Development Report». Linux Foundation. 18. februar 2015. Besøkt 1. august 2016. 
  14. ^ Corbet 2012
  15. ^ Don Marti: Linux contributor base broadens, Computerworld, 2. juli 2007
  16. ^ a b Linux kernel coding style, kernel.org, Documentation, 28. juli 2016
  17. ^ Jake Edge (25. november 2008). «Character devices in user space». LWN.net. Besøkt 7. mai 2015. 
  18. ^ Jonathan Corbet (2. mai 2007). «UIO: user-space drivers». LWN.net. Besøkt 7. mai 2015. 
  19. ^ Jonathan Corbet (24. februar 2003). «Driver porting: the preemptible kernel». LWN.net. Besøkt 7. mai 2015. 
  20. ^ Kroah-Hartman, Greg. «The Linux Kernel Driver Interface». 
  21. ^ a b Nguyen, Binh (30. juli 2004). «Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy». The Linux Documentation Project. Besøkt 28. november 2012. 
  22. ^ Andrew S. Tanenbaum: Operating Systems: Design and Implementation, Appendix E: Minix source code listing, side 433–686, Prentice-Hall International, Inc., 1987, ISBN 0-13-637331-3
  23. ^ a b (en) Linus Benedict Thorvalds (26. august 1991). ««What would you like to see most in minix?»». comp.os.minix. Besøkt 29. oktober 2009. 
  24. ^ (en) Linus Benedict Thorvalds (5. oktober 1991). ««Free minix-like kernel sources for 386-AT»». comp.os.minix. Besøkt 29. oktober 2009. 
  25. ^ (en) Linus Benedict Thorvalds (februar 1992). ««Release notes for Linux v0.12»». www.kernel.org. Besøkt 29. oktober 2009. 
  26. ^ (en) David D. Summers (19. januar 1992). ««Troubles with partions»». Besøkt 29. oktober 2009. 
  27. ^ (en) Allan B. Clegg (31. mars 1992). ««It's here!»». Besøkt 29. oktober 2009. 
  28. ^ (en) Chris Lawrence (1. mai 1997). «Linux/m68k: Linux on Motorola's 68000 Processor». Linux Journal. Besøkt 29. oktober 2009. 
  29. ^ (en) Joseph Pranevich (26. januar 1999). «The Wonderful World of Linux 2.2 -- 'revised millennium penguin' version». Linux Today. Besøkt 29. oktober 2009. 
  30. ^ (en) Joseph Pranevich (14. september 1999). «Wonderful World of Linux 2.4 (Quite Nearly There Edition)». Linux Today. Besøkt 29. oktober 2009. 

Eksterne lenker[rediger | rediger kilde]

Litteratur[rediger | rediger kilde]

  • Bovet, Daniel P.; Cesati, Marco (2005). Understanding the Linux Kernel. O'Reilly Media, 1. utgave, november 2000, 2. utgave, desember 2002; 3. utgave, november 2005. ISBN 978-0596005658. ISBN 05-960056-5-2. 
  • Corbet, Jonathan; Kroah-Hartman, Greg; McPherson, Amanda (2012). Linux Kernel Development. How Fast it is Going, Who is Doing It, What They are Doing, and Who is Sponsoring It. Linux Foundation, mars 2012. 
  • Love, Robert (2015). Linux Kernel Development. Novell Press, 12. januar 2015. ISBN 978-0-672-32720-9. ISBN 0-672-32720-1. 
  • Negus, Christopher (2015). Linux Bible. Wiley, 9. utgave, 27. april 2015. ISBN 978-1118999875. ISBN 11-189998-7-8.