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
Utvikler Brukernettverk
Utgitt 17. september 1991; 25 år siden (1991-09-17) (utviklingsversjon)
14. mars 1994; 23 år siden (1994-03-14) (stabil versjon)[1]
Nyeste versjon 4.10.13 (27. april 2017; 3 dager siden (2017-04-27))
Nyeste beta-versjon 4.11 rc8 (23. april 2017; 7 dager siden (2017-04-23))
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
Forgjenger MINIX

Linuxkjernen er en fri og åpen, monolittisk og Unix-liknende operativsystemkjerne som benyttes verden over i operativsystemet Linux.[2] Den anvendes i personlige datamaskiner, arbeidsstasjoner, tjenere og superdatamaskiner,[3][a] vanligvis i form av Linuxdistribusjoner.[6][b] Linuxkjernen brukes også i innebygde systemer som rutere, trådløse basestasjoner, hustelefonsentraler, TV-mottakere, smart-TV'er,[8] digitale videopptakere[9] og nettverkstilsluttete datalagre. Diverse operativsystemer for nettbrett, lesebrett, smarttelefoner og smartur benytter modifiserte Linuxkjerner.[c]

Linuxkjernen ble skapt av finnen Linus Torvalds (1969–),[10] som lanserte første utviklingsversjon den 17. september 1991.[11] 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,[12] Red Hat,[12] IBM,[12] Hewlett-Packard,[11] Novell,[13][12] Oracle,[12] Nokia,[12] Google,[14] Advanced Micro Devices,[14] Fujitsu[14] og Samsung.[14] I 2015 hadde nesten 12 000 programmerere fra omkring 1 200 selskaper bidratt til kjernens utvikling,[15][16] mens gruppen «amatører» i 2007 stod for 3,9 % av endringene.[17] Utviklingsdiskusjoner foregår daglig på Linuxkjernens e-postliste.[13] Linuxkjernen har vokst fra 8 413 linjer med C-kode i første utviklingsversjon, til å omfatte 22 839 541 linjer med C-kode i versjon 4.10.0 som ble lansert 19. februar 2017.

Linuxkjernen var i starten avhengig av mikrokjernen MINIX under oppstart. Kjernen er skrevet nesten utelukkende i programmeringsspråket C (med noen GNU C syntaksutvidelser)[18] og AT&T assembler.[18] 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, ARM og RISC-V. 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 behovsbetinget sideveksling, dynamisk lastbare moduler, støtte for et tyvetalls ulike filsystemer, avansert støtte for datanett og kommunikasjon med nettverksoperativsystemer (deriblant Network File System (NFS) og Netware), 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.

Linuxkjernen er utviklet under GNU General Public License versjon 2, og kildekoden er derfor fri programvare. Siste versjon er 4.10.13 som ble lansert 27. april 2017.

Innhold

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 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, vindussystemet Mir og en rekke skrivebordsmiljøer. De har ikke lov til å utføre maskinvarerelaterte kommandoer direkte, men sender 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 videospill 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 svekket 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 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).[19][20] 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 konfigureres som lastbare kjernemoduler, som innlastes og avlastes 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.[21] Linuxkjernen har intet binært applikasjonsgrensesnitt (ABI).[22]

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

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. Frem til versjon 2.4, som ble lansert 4. januar 2001, benyttet Linuxkjernen 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 støttet dette fra starten, men bare overfor programmer i brukermodus.[24] Når en prosess kjøres, settes den boolske variabelen TASK_RUNNING, som er knyttet til prosessen, lik sann. Prosessen kan avbrytes av andre prosesser, som har en høyere prioritet, og som dermed setter TASK_RUNNING lik falsk. 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. Fleroppgavekjøringen med «forkjøpsrett» er imidlertid ikke gjennomført i alle seksjoner av kjernen.[25]

Linuxkjernen inneholder forskjellige klasser for skedulering.[26] Som standard benyttes en skeduleringsmekanisme som kalles Completely Fair Scheduler, og som ble introdusert i versjon 2.6.23 av kjernen den 9. oktober 2007.[27] Internt er denne skeduleringsklassen kjent som SCHED_OTHER, men Linuxkjernen inneholder også to POSIX-kompatible[28] sanntidsklasser som kalles SCHED_FIFO (basert på en køstruktur) og SCHED_RR (round robin skedulering).[26]

Ved å benytte programvareendringen PREEMPT_RT, kan full støtte for «forkjøpsrett» bli innført for kritiske seksjoner, avbruddshåndterere og kodesekvenser hvor avbrudd er deaktivert.[29] Denne programvareendringen og dens funksjonalitet er blitt delvis integrert i Linuxkjernen.[30] Bruk av «forkjøpsrett» innebærer mindre latens, gjør responsen raskere, og gjør Linux mer egnet for sanntidsapplikasjoner. Eldre versjoner av Linuxkjernen hadde en stor kjernelås for synkronisering over hele kjernen, men denne ble fjernet av Arnd Bergmann den 25. januar 2011.[31]

En tilleggspolitikk for skedulering kjent som SCHED_DEADLINE, er en implementasjon av algoritmen earliest deadline first skedulering (EDF) og ble tilføyd versjon 3.14 av Linuxkjernen den 30. mars 2014.[32][33]

Kooperativ fleroppgavekjøring ble benyttet i operativsystemene Windows 3.0 og Windows 3.1, så vel som i det klassiske MacOS og i de fleste versjoner av nettverksoperativsystemet 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å 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

Lokaliseringen av Completely Fair Scheduler i Linuxkjernen.

Fra og med versjon 2.0, som ble lansert 9. juni 1996, har Linuxkjernen støttet symmetrisk flerprosessering. Til sammenligning var dette 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 innebærer to eller flere mikroprosessorer i et og samme datasystem. Det er en flerprosessering som 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, og 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 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, hadde 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 flere tusen mikroprosessorer (superdatamaskiner). Unix-avartene SunOS og Solaris var laget for disse datamaskinene.

Det finnes mange flere eksempler på symmetrisk flerprosessering. Her er bare noen systemer valgt ut som anskueliggjørende eksempler. 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]

Intel Core i7 920 mikroprosessor med 4 kjerner. Flerkjerners mikroprosessorer er i dag blitt utbredt.

Linuxkjernen har også støtte for tråder, som betyr at flere deler av det samme dataprogrammet kjører samtidig. Mens ordinære prosesser er uavhengige, har mye tilstandsinformasjon, separate minneadresser og interne prosess-kommunikasjonsmekanismer, deler tråder informasjonen fra én enkel prosess, samt minne og andre ressurser, direkte; de kan betraktes som asynkrone prosedyrer i et program. Kontekstskifte mellom flere tråder går som regel raskere enn kontekstskifte mellom prosesser.

Oppgaver med forskjellige ressurskrav kan utføres i forskjellige tråder, ved at for eksempel at skjermen blir oppdatert mens platelageret, som trenger lite systemressurser, arbeider. Trådene kan også fordeles på ulike mikroprosessorer når flerprosessering er tilstedeværende, for å øke dataprogrammers ytelse.

Tidligere versjoner av Linuxkjernen (forut for versjon 2.6) benyttet LinuxThreads. Dette var en delvis implementasjon av POSIX Threads, slik den var definert av POSIX 1003.1c. LinuxThreads benyttet det nye systemkallet clone() til å skape tråder som delte foreldreprosessens adresseområde. Dette var en avart av systemkallet fork(), som har vært en del av UNIX siden 1971. Tråder ble gitt unike prosessidentifikatorer. Dette kunne imidlertid skape problemer for håndteringen av Unix signaler. LinuxThreads benyttet signalene SIGUSR1 og SIGUSR2 til å koordinere trådene. Dette gjorde at de samme signalene ikke kunne brukes av andre programmer. To konkurrerende alternativer vokste etter hvert frem som en mulig etterfølger til LinuxThreads: Next Generation POSIX Threads og Native POSIX Thread Library (NPTL). NTPL vant frem og ble innført som standard i versjon 2.6 av Linuxkjernen.

Virtuell hukommelse[rediger | rediger kilde]

Virtuell hukommelse: Programmet tror at det har en kontinuerlig mengde med hovedminne. I virkeligheten ligger aktive deler av programmet spredt i hovedminnet, mens inaktive deler ligger på en harddisk.

På samme måte som UNIX, og andre moderne operativsystemer, støtter Linuxkjernen virtuell hukommelse. Det har den gjort helt fra starten av. Virtuell hukommelse er en teknikk som gir dataprogrammer inntrykk av at de har tilgang til en kontinuerlig mengde med hovedminne. I virkeligheten befinner deres benyttede minne seg fragmentert i hovedminnet, og kan endog overstige den mengden med hovedminne som finnes i datamaskinen. Hvis det sistnevnte er tilfelle, brukes datamaskinens harddisk delvis som minne ved å forflytte deler av programmet frem og tilbake mellom hovedminnet og harddisken (swapping).

Fra UNIX arvet Linuxkjernen en metode som kalles sideveksling. Denne er også i bruk i andre Unix-lignende operativsystemer, og i de fleste moderne operativsystemer. Sideveksling er en form for minnehåndtering hvor datamaskinen lagrer og henter data fra et sekundært datalager for bruk i hovedminnet.[34] Hvert fragment kalles en side, og er 4 Kb i størrelse. Linuxkjernen benytter behovsbetinget sideveksling, som betyr at den kopierer en side inn i den fysiske hukommelsen bare hvis et forsøk blir gjort på å aksessere den og siden ikke allerede er i hukommelsen.[35] I kontrast til sideveksling står segmentering. Under segmentering har hvert segment en maksimal størrelse, men varierer innbyrdes i størrelse. Segmentering ble benyttet i operativsystemet Multics, som var forgjengeren til UNIX.

Linuxkjernen ble opprinnelig utviklet for 32-biter mikroprosessoren Intel 80386, som var en del av x86-familien. De første medlemmer av denne familien, 16-biter mikroprosessorene Intel 8086 og Intel 8088, benyttet segmenter som var 64 Kb i størrelse, for å være kompatibel med 8-biter mikroprosessoren Intel 8085. Intel 80286 var den første i denne familien som støttet virtuell hukommelse, og «arvet» segmenter på 64 Kb fra sine forgjengere. Dette var også grunnen til at operativsystemet OS/2, som i utgangspunktet var «skreddersydd» for Intel 80286, benyttet en segmentert minnemodell. Denne segmenterte minnemodellen ble også implementert i Windows 3.0 og i Windows 3.1.

Intel 80386 økte maksimalgrensen på segmentenes størrelse fra 64 Kb til 4 Gb. Den metode som Linuxkjernen benyttet på denne mikroprosessoren, var å ta i bruk bare et enkelt segment og deretter foreta sideveksling innenfor dette segmentet. Slik kunne man «lure» operativsystemet til å tro at den underliggende maskinvaren ikke var segmentert, men støttet sideveksling i utgangspunktet. Denne metoden ble også tatt i bruk av Windows NT på Intel 80386.

Sideveksling har den fordel fremfor segmentering at det gir mindre fragmentering av harddisken.[36]

Dynamisk lastbare kjernemoduler[rediger | rediger kilde]

Utdypende artikkel: Dynamisk lastbare kjernemoduler

Liksom tilfellet er med FreeBSD, Solaris, AIX, Mac OS X Windows NT og det tidligere nettverksoperativsystemet NetWare, har Linuxkjernen støtte for dynamisk lastbare kjernemoduler. Dette er objektfiler som inneholder en utvidelse av operativsystemets kjerne. Slike moduler brukes vanligvis for å støtte nyere maskinvare, filsystemer eller for å tilføye nye systemkall. Når deres funksjonalitet ikke lenger er påkrevet, kan de bli lastet ut av kjernen for å frigjøre hukommelse og andre ressurser.

Modulene blir lastet inn i kjernen (og avlastet ut av kjernen) med kommandoen modprobe. De er lokaliserte i filkatalogen /lib/modules og hadde tidligere filetternavnet .o. Siden versjon 2.6 har de hatt filetternavnet .ko.[37] Programmet modprobe var en del av modutils fra versjon 2.2 til versjon 2.4.x av Linuxkjernen.[38] Fra og med versjon 2.6 blir verktøyet levert sammen med module-init-tools.[39]

Kommandoen lsmod lister ut de lastbare kjernemoduler. I nødstilfeller, når datasystemet ikke starter opp på grunn av feil i modulene, kan spesifikke moduler aktiveres eller deaktiveres ved å modifisere kjernens oppstartsparametere.

Deaktivering av et kjernemodul skjer via kommandoen sysctl med opsjonen /proc/sys/kernel/modules_disabled.[40][41] Et datasystem som benytter RAM-disken initramfs, kan av sikkerhetsmessige hensyn laste spesifikke moduler under oppstart og deretter deaktivere lastingen av moduler. Hvis angripere kan forandre initramfs, kan de også forandre på binærkoden i kjernen.

I motsetning til FreeBSD, Solaris, Mac OS X og Windows NT, har Linuxkjernen intet applikasjonsprogrammeringsgrensesnitt (API) eller binært applikasjonsgrensesnitt (ABI) for kjernemoduler. Dette betyr at det er forskjeller mellom ulike kjerneversjoner hva angår de interne strukturer og funksjoner, noe som kan skape kompatibilitetsproblemer. For å avhjelpe dette, er versjonsdata plassert innenfor seksjonen .modinfo i lastbare ELF-moduler. Denne versjonsinformasjonen kan sammenlignes med den kjørende kjerne før et modul kjøres. Hvis versjonene er inkompatible, vil modulen ikke bli lastet.

Delte biblioteker[rediger | rediger kilde]

Utdypende artikkel: Delte biblioteker

Liksom de fleste moderne operativsystemer, har Linuxkjernen støtte for delte biblioteker. Et delt bibliotek er en fil som kan deles av eksekverbare filer, og som kan lastes opp under oppstart og under kjøring. De kan bli statisk lenket, hvilket betyr at både biblioteket og programmene allokeres minne når det blir skapt. Alternativt kan bibliotekene bli dynamisk lenket, hvilket betyr at programmene bare kobler seg til biblioteket gjennom en API når det vil ha en bestemt oppgave utført.

Biblioteker ligger i katalogen /usr/lib/. De har prefikset lib, og er etterfulgt av filetternavnet .so.[42] Hvis de er statisk lenket har de filetternavnet .a.

Programmeringsspråk[rediger | rediger kilde]

Kjernen er skrevet nesten utelukkende i programmeringsspråket C (sammen med noen GNU C syntaksutvidelser). Enkelte korte seksjoner av koden er skrevet i AT&T assembler. I versjon 4.1 ble store deler av assemblerkoden skrevet i C.[43], og i versjon 4.2 ble enda mer av assemblerkoden omskrevet i C.[44] GNU C (GCC) var lenge den eneste kompilator som var i stand til å bygge Linuxkjernen på en korrekt måte.

Kompatibilitet med kompilatorer[rediger | rediger kilde]

Utdypende artikler: Intel C++ Compiler og Clang

GNU C Compiler (GCC) er standard kompilator for Linuxkjernens kildekode. I 2004 modifiserte Intel sin Intel C++ Compiler, slik at den også var i stand til å kompilere Linuxkjernen.[45] I 2009 ble dette gjort enda en gang på en modifisert utgave av versjon 2.6.22 av Linuxkjernen.[46][47]

Siden 2010 har det pågått et arbeide med å bygge Linuxkjernen med Clang, en alternativ C-kompilator som er et alternativ til GCC.[48] Den 12. april 2014 kunne nesten hele den offisielle kjernen bli kompilert med Clang.[49][50] Prosjektet er kjent som LLVMLinux, oppkalt etter infrastrukturen LLVM som ligger til grunn for Clang.[51] LLVMLinux er ikke en fork av verken Linuxkjernen eller LLVM, men et metaprosjekt som består av programvareoppdateringer som til slutt blir en del av hovedprosjektet. Å gjøre Linuxkjernen i stand til å bli kompilert med Clang kan tjene kjernens utviklere, fordi Clang er kjent for raskere kompilering enn GCC.[52]

Grensesnitt mot Linuxkjernen[rediger | rediger kilde]

Fire grensesnitt er definert: To interne i kjernen, og to mellom kjernen og brukermodus.
På XDC2014 kunngjorde Alex Deucher fra Advanced Micro Devices (AMD) en felles driver for grafikkort og APU'er.[53] Den propritære Linuxdriveren, libGL-fglrx-glx, deler Direct Rendering Manager med Mesa 3D. Ettersom kjernen mangler et stabilt binærgrensesnitt, brukte AMD sin egen binary blob.

Applikasjonsprogrammeringsgrensesnitt i brukermodus[rediger | rediger kilde]

Portabilitet i kildekoden sikrer at et C-program som er skrevet i henhold til en standard kan kompileres og kjøres på ethvert system som følger samme standarden. De relevante standarder i sammenheng med Linuxkjernen, og GNU C Library som er tilknyttet den, er POSIX og Single UNIX Specification. De to Linuxdistribusjonene EulerOS[54][55] og Inspur K-UX,[56][57] som begge er derivater av Red Hat Enterprise Linux, følger offisielt UNIX-03 standarden. Det er likevel ingen flere Linuxdistribusjoner som blir gitt varemerket «UNIX» av Open Group, hovedsakelig på grunn av kostnadene ved konformitets-testing.

GNU C Library på sin side støtter alle relevante standarder: K&R C, ANSI C, ISO C99, ISO C11, Single UNIX Specification (UNIX 93, UNIX 95, UNIX 98, UNIX 03), POSIX.1c, POSIX.1d, POSIX.1j, BSD-grensesnitt, System V Interface Definition (SVID), X/Open Portability Guide 4.2 og utvidelser av C-syntaksen som er spesifikke for Linuxkjernen. Biblioteket støtter også C++ og alle dens standarder: C++98, C++03, C++11, C++14 og den kommende C++17.

Linuxkjernens API består hovedsakelig av systemkall.

Applikasjonsprogrammers binærgrensesnitt[rediger | rediger kilde]

Utdypende artikkel: Linux Standard Base

Binærportabilitet skal garantere at ethvert program som en gang er kompilert for en gitt maskinvareplattform, kan kjøre i sin kompilerte form på enhver annen maskinvareplattform som følger standarden. Binærportabilitet er et essensielt krav for den kommersielle levedyktighet til applikasjoner fra uavhengige programvareleverandører som er bygd for operativsystemer som er basert på Linuxkjernen. Binærkompatibilitet er mye mer krevende enn kildekodeportabilitet. Per februar 2014 er Linux Standard Base (LSB) den eneste standard som er opptatt av binærkompatibilitet.

Applikasjonsgrensesnitt i kjernen[rediger | rediger kilde]

Det finnes flere interne applikasjonsgrensensnitt i kjernen som anvendes mellom forskjellige undersystemer og undersystemer av undersystemer. Noen av dem har blitt holdt stabile over flere versjoner, mens andre ikke har det. Det er ingen garanti for at applikasjonsgrensesnitt i kjernen vil vedvare; vedlikeholdere og bidragsytere kan fritt frem endre dem når som helst.[58]

Eksempler på applikasjonsgrensesnitt i kjernen inkluderer rammeverk for de følgende klasser av utstyrsdrivere:

Binærgrensesnitt i kjernen[rediger | rediger kilde]

Linuxkjernens utviklere har valgt å ikke vedlikeholde noe stabilt binærgrensesnitt i kjernen.[60]

Portabilitet[rediger | rediger kilde]

En iPod som starter iPodLinux

Linuxkjernen var opprinnelig ikke konstruert for å være portabel,[61][62] men ble laget for 32-biter mikroprosessoren Intel 80386, som på denne tiden hadde vokst i popularitet. Støtten for Intel 80386 forsvant i versjon 3.8 av Linuxkjernen den 28. februar 2013.[63] Den første portering ble gjort til Motorola 68000 av brukere av Amiga, men for å gjøre dette måtte store deler av Linuxkjernen omskrives. Linus Thorvalds kalte dette for en fork og for et «Linuxlignende operativsystem».[62] Med denne erfaringen i minne, ledet Thorvalds en restrukturering av Linuxkjernen for å oppnå en portering til 64-biter RISC-arkitekturen DEC Alpha, slik at både 80386 og DEC Alpha kunne støttes i et enkelt tre i kildekoden.[62] Idag er Linuxkjernen en av de mest porterte operativsystemkjerner i verden. Den har blitt portert til de fleste datamaskinarkitekturer, deriblant x86-64, SPARC, PowerPC, IBM POWER, MIPS, PA-RISC, SuperH, IBM System z9/z10/zEnterprise System, Intel Itanium, ARM og RISC-V.

Linux kjører som det primære operativsystem på Sunway TaihuLight, Tianhe-2, Titan-Cray XK7, IBMs Blue Gene og andre superdatamaskiner. I november 2016 ble Linuxkjernen kjørt på 498 av verdens 500 kraftigste superdatamaskiner, rangert på listen TOP500 (de to andre benyttet AIX og IBM POWER7).[4][5] Diverse operativsystemer for nettbrett, lesebrett, smarttelefoner og smartur benytter modifiserte Linuxkjerner.[64] Eksempler på slike enheter er iPod og iPhone fra Apple Computer, med iPodLinux og iPhone Linux (iOS fra Apple er derimot basert på Mac OS X). Andre eksempler er Android, WebOS, Tizen, Sailfish OS, H5OS, Maemo, Openmoko Linux og Ångström, så vel som de tidligere operativsystemene Moblin, MeeGo og Firefox OS.[65][66][67] I 2013 ble Android det mest utbredte operativsystemet i verden.

Periferiutstyr og databusser[rediger | rediger kilde]

I årenes løp har Linuxkjernen innført 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 1.0 ble støttet fra versjon 2.0.0 av Linuxkjernen; USB 1.1 ble støttet fra versjon 2.2.0 av Linuxkjernen; USB 2.0 ble støttet fra versjon 2.4.0 av Linuxkjernen; USB 3.0 ble støttet fra versjon 2.6.31 av Linuxkjernen.[68] USB 3.1 ble støttet av versjon 4.6.0 av Linuxkjernen.[69]
  • FireWire (konkurrent til USB) ble støttet fra versjon 2.6.31 av Linuxkjernen.[68][70]

Sikkerhet[rediger | rediger kilde]

Datasikkerhet har vært et stort tema i forbindelse med Linuxkjernen, fordi en stor del av kjernens programvarefeil presenterer en potensiell sikkerhetsrisiko. Dette kan muliggjøre privilegie-eskalering og skape tjenestenektangrep. I løpet av årene er flere programvarefeil blitt oppdaget og rettet i Linuxkjernen.[71] Nye egenskaper blir ofte implementert for å forbedre Linuxkjernens sikkerhet.[72][73]

Kritikere har anklaget Linuxkjernens utviklere for å dekke over sikkerhetshull eller for å ikke informere om dem; i juli 2008 reagerte Linus Thorvalds på kritikken med følgende uttalelse:[74][75]

Sitat Personlig betrakter seg sikkerhetsfeil for å være bare «normale feil». Jeg dekker ikke over dem, men jeg har heller ikke noen tenkelig grunn til å mene at det er en god ide å oppspore dem og kunngjøre dem som noe spesielt ... en grunn til at jeg nekter å bry meg om hele sikkerhets-sirkuset er at jeg mener at dette glorifiserer – og således oppmuntrer til – feil adferd. Det skaper «helter» av sikkerhetsfolk, som om folk som ikke fikser normale feil ikke er viktige. Faktisk er alle de normale kjedelige feilene mer viktige, nettopp fordi det er så mange av dem. Jeg tror ikke at et eller annet spektakulært skkerhetshull burde glorifiseres eller få oppmerksomhet som så mye mer «spesielt» enn et tilfeldig spektakulært krasj som skyldes feil. Sitat

Linuxdistribusjoner lanserer ofte sikkerhetsoppdateringer som fikser sårbarheter i Linuxkjernen. Noen av dem (deriblant Debian, Ubuntu, Red Hat Enterprise Linux og SUSE Linux) tilbyr egne versjoner med langtidsstøtte hvor en spesiell versjon av Linuxkjernen oppdateres over en lengre periode.

Kjernepanikk og oopser[rediger | rediger kilde]

Utdypende artikler: Kjernepanikk og Linuxkjernens oopser

Eksempel på en kjernepanikk i Linux

I Linux er en kjernepanikk en uopprettelig systemfeil som oppdages av kjernen, i motsetning til lignende feil som oppdages av kode i brukermodus. Det er mulig for kjernens kode å indikere en slik tilstand ved å kalle funksjonen panic() som befinner seg i filen sys/system.h De fleste tilfeller av kjernepanikk er resultatet av uhåndterte unntak i kjernens kode, slik som referanser til ugyldige minneadresser. De indikerer typisk en programmeringsfeil et eller annet sted i kjeden av kall som fører til panikken. De kan også indikere en feil med maskinvaren, slik som feil i RAM eller i de aritmetiske funksjoner i mikroprosessoren som er forårsaket av en mikroprosessorfeil, en overhetet eller skadd mikroprosessor eller en myk feil.

En rapport om ikke-fatale programvarefeil i kjernen blir kalt et «oops»; slike avvik fra korrekt adferd av Linuxkjernen kan føre til fortsatt kjøring, men med redusert pålitelighet.[76] Disse krasjrapportene blir automatisk samlet og kan sendes upstream av ulik programvare, slik som for eksempel kjerneoops,[77] ABRT (i distribusjonen Fedora)[78] og apport i distribusjonen Ubuntu. KernelOops.org samler disse rapportene på utgir statistikk på deres hjemmeside.[79]

Kjernens panikkmeldinger kan ikke bli skrevet ut på en synlig måte, som f.eks. ved å ta i bruk grafikken på en stasjonær datamaskin. For å avluse slike tilstander må andre metoder benyttes, slik som å tilknytte en serieport.

Live oppdateringer med programvareendringer[rediger | rediger kilde]

Oppdateringer av Linuxkjernen, som kan installeres uten å starte datamaskinen på nytt, er tilgjengelige i form av live patcing slik som Ksplice, kpatch og kGraft. Et minimalistisk grunnlag for live patching ble innført i Linuxkjernens versjon 4.0, som ble lansert den 12. april 2015. Disse funksjonene, kjent som livepatch, danner essensen i kjernens ftrace-funksjonalitet og grunnlaget for både kGraft og kpatch, ved å danne en API for kjernemodulene og et binærgrensesnitt for programmer i brukermodus.

Basisfunksjonaliteten i versjon 4.0 av Linuxkjernen støtter likevel bare x86-arkitekturen og sørger ikke for noen mekanismer som sikrer konsistens på funksjonsnivå mens oppdateringer pågår. Det pågår imidlertid arbeid med å integrere kpatch og kGraft med Linuxkjernen.[80][81][82]

Linuxkjernens filsystemer[rediger | rediger kilde]

Linuxkjernen har hatt støtte for et tyvetalls ulike filsystemer. Nedenfor er noen av de mest toneangivende beskrevet.

MINIX file system[rediger | rediger kilde]

Utdypende artikkel: MINIX file system

Dette filsystemet ble benyttet av MINIX, som var forgjengeren til Linux. Det ble introdusert i 1987 sammen med MINIX 1.0. Det støttes av Linuxkjernen, men er lite i bruk i dag.

extended file system (ext)[rediger | rediger kilde]

Utdypende artikkel: extended file system

Dette ble utviklet for å overvinne visse begrensninger i MINIX file system, og hadde en metadatastruktur som var inspirert av det tidligere Berkeley Fast File System i Berkeley Software Distribution (BSD).[83] ext debuterte den 5. juli 1992 i versjon 0.96c av Linuxkjernen, og var den første implementasjonen som benyttet et virtuelt filsystem. Ext kunne håndtere filer på opptil 2 gigabyte i størrelse.[84] ext ble erstattet av ext2 og xiafs. Den 14. januar 1997 ble ext fjernet fra versjon 2.1.21 av Linuxkjernen, og er ikke lenger i bruk.

Xiafs[rediger | rediger kilde]

Utdypende artikkel: Xiafs

Xiafs ble lansert den 13. mars 1993 i versjon 0.99.7 av Linuxkjernen. Det var ment å erstatte extended file system (ext) og konkurrerte i begynnelsen med ext2. Det ble fjernet den 14. januar 1997 fra versjon 2.1.21 av Linuxkjernet sammen med ext.

Second extended file system (ext2)[rediger | rediger kilde]

Utdypende artikkel: ext2

Skjermbilde av Mandriva Linux 2010. Denne distribusjonen benyttet filsystemet Journaled File System.

ext2 eller second extended filesystem («det andre utvidede filsystem») var et POSIX-kompatibelt filsystem som ble lansert den 13. mars 1993 i versjon 0.99.7 av Linuxkjernen. ext2 var en erstatning for extended file system (ext); i begynnelsen konkurrerte det i begynnelsen filsystemet xiafs, men ble etter hvert ledende. Dets metadatastruktur var inspirert av det tidligere Berkeley Fast File System i Berkeley Software Distribution (BSD).[85]

ext2 benyttes fortsatt på lagringsmedia med flashminne (slik som Secure Digital og minnepinner) fordi mangelen på en journal øker ytelsen og minimaliserer antall skrivinger (flashminne har et begrenset antall skrivesykluser). Avhengig av størrelsen på blokkene, hadde ext2 støtte for harddisker på maksimalt 2–32 tebibyte (TiB), og for datafiler med maksimal størrelsesorden på mellom 16 gibibyte (GiB) og 2 tebibyte (TiB). ext2 støttet lagring av datafiler med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i den gregorianske kalenderen.

Third extended filesystem (ext3)[rediger | rediger kilde]

Utdypende artikkel: ext3

ext3 eller third extended filesystem («det tredje utvidede filsystem») er et tidligere POSIX-kompatibelt og journalførende filsystem. Det var etterfølgeren til ext2, og ble en del av versjon 2.4.15 av Linuxkjernen den 23. november 2001.[86] ext3 skilte seg fra ext2 på tre områder. Det første var innføringen av en journal, noe som økte stabiliteten og fjernet behovet for å kjøre en sjekk av filsystemet dersom datamaskinen skulle krasje. Det andre var at filsystemet kunne vokse i tilkoblet (online) tilstand. Det tredje var at HTrær ble benyttet som datastruktur for å indeksere større filkataloger.[87] Dette økte skalerbarheten fra en praktisk grense på noen få tusen filer i ext2 til titalls millioner av filer per filkatalog.

Avhengig av størrelsen på blokkene, hadde ext3 støtte for harddisker på maksimalt 4–32 tebibyte (TiB), og for datafiler med maksimal størrelsesorden på mellom 16 gibibyte (GiB) og 2 tebibyte (TiB). ext3 støttet lagring av datafiler med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i den gregorianske kalenderen. ext3 manglet egenskaper som dynamisk inodeallokering og extents. Metadata hadde en fast størrelse, ble plassert på velkjente steder og datastrukturene hadde en viss redundans. Ved alvorlige datakrasj, var filene i ext2 og ext3 i større grad gjenopprettbare enn i et trebasert filsystem.

Den 9. desember 2015 ble ext3 fjernet fra versjon 4.3 av Linuxkjernen.[88]

XFS[rediger | rediger kilde]

Utdypende artikkel: XFS

Skjermbilde av Linuxdistribusjonen Elive. Elive benyttet filsystemet ReiserFS.

XFS er et 64-biter[89] POSIX-kompatibelt og journalførende filsystem som opprinnelig ble lansert av Silicon Graphics i oktober 1993.[90] Filsystemet var standard i operativsystemet IRIX fra versjon 5.3,[90] som ble lansert i desember 1994. XFS er etterfølgeren til Extent File System (EFS), som var filsystemet til IRIX før versjon 5.3. I mai 2000 ble XFS lisensiert under GNU General Public License (GPL) versjon 2. Den 18. februar 2004 ble XFS innlemmet i versjon 2.4.25 av Linuxkjernen, og den 18. desember 2003 ble filsystemet innlemmet i Linuxkjernens versjon 2.6.

XFS støtter harddisker på opptil 18 exbibyte (EiB) (16 tebibyte (TiB) på 32-biter Linux) og datafiler på opptil 9 exbibyte (TiB) (16 tetibyte (TiB) på 32-biter Linux).[89] Dette er noe mer enn ext4 og noe mindre enn btrfs.

Journaled File System (JFS)[rediger | rediger kilde]

Utdypende artikkel: Journaled File System

Journaled File System eller JFS er et 64-biter journalførende filsystem som er utviklet av IBM. JFS ble lansert i februar 1990 i versjon 3,1 av UNIX-avarten AIX. Det finnes to generasjoner av filsystemet, som refereres til som henholdsvis JFS og JFS2.[91][92] Andre generasjon av filsystemet er adoptert av Linuxkjernen[93] og er tilgjengelig som fri programvare under GNU General Public License.

ReiserFS[rediger | rediger kilde]

Utdypende artikkel: ReiserFS

ReiserFS er et POSIX-kompatibelt journalførende filsystem som ble designet og utviklet av et team hos Namesys ledet av Hans Reiser. ReiserFS var det første journalførende filsystemet som ble støttet av Linuxkjernen; det ble integrert i Linuxkjernens versjon 2.4.1.

ReiserFS støtter harddisker på opptil 6 tetibye (TiB) og datafiler på opptil 1 exbibyte (EiB) (8 tetibyte (TiB) på 32-biter Linux). Datafiler i ext4 kan lagres med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i den gregorianske kalenderen.

Reiser4[rediger | rediger kilde]

Utdypende artikkel: Reiser4

SUSE Linux 10.0 med skrivebordsmiljøet GNOME. OpenSUSE 13.2 var blant de første Linuxdistribusjoner som benyttet Btrfs som standard.

Reiser4 er et journalførende filsystem som er utviklet av Hans Reiser og Namesys, som etterfølgeren til ReiserFS. Det ble innlemmet i versjon 3.15 av Linuxkjernen den 14. august 2014. Prosjektet har vært sponset av Defense Advanced Research Projects Agency (DARPA) og Linspire. Filsystemet blir fortsatt utviklet,[94] men det er tvilsomt om disse endringene blir tilføyd Linuxkjernen i nær fremtid, ettersom opphavsmannen soner en fengselsdom.[95]

Fourth extended filesystem (ext4)[rediger | rediger kilde]

Utdypende artikkel: ext4

ext4, eller fourth extended filesystem («det fjerde utvidede filsystem»), er et POSIX-kompatibelt og journalførende filsystem. Det er etterfølgeren til filsystemet ext3, slik ext3 var etterfølgeren til ext2. ext4 er også bakoverkombatibelt med ext3. ext4 er inspirert av finesser som ble utviklet for filsystemet Lustre mellom 2003 og 2006, og som ga økt lagringsplass og ytelsesforbedringer.[96] Den 21. oktober 2008 ble den endelige versjonen lansert i versjon 2.6.28 av Linuxkjernen.

I ext4 ble blokklagringen i ext2 og ext3 erstattet av extents som reduserer fragmentering og gir økt ytelse på store datafiler. En enkel extent i ext4 kan opprette inntil 128 mebibyte (MiB) med kontinuerlig diskplass innenfor en blokk på 4 kibibyte (Kib). Opptil fire extents kan lagres i en inode.[96] Når det er mer enn fire extents i en datafil, blir resten indeksert i et tre.[97] ext4 er således hurtigere og mer stabilt enn ext3, fordi datafiler fragmentert meget sjelden på grunn av «forsinket allokering». ext4 støtter harddisker på opptil 1 exbibyte (EiB), og datafiler på opptil 16 tebibyte (TiB). Datafiler i ext4 kan lagres med rett dato innenfor tidsrommet 14. desember 1901 og 10. mai 2446 i den gregorianske kalenderen.

B-tree file system (btrfs)[rediger | rediger kilde]

Utdypende artikkel: btrfs

Et B-tre av femte orden.

Btrfs, en forkortelse for B-tree file system, uttalt butter F S,[98] better F S,[99] eller b-tree F S,[100] er et copy-on-write og journalførende filsystem. Btrfs er etterfølgeren til ext4, og løser problemer knyttet til pooling, snapshots, sjekksummer og datasystemer hvor mange forskjellige typer innmatningsutstyr er integrerte.[101] Filsystemet er POSIX-kompatibelt.[102] En utviklingsversjon ble integrert i versjon 2.6.29 av Linuxkjernen den 23. mars 2009.[103] Første stabile versjon ble lansert 29. mars 2013 i versjon 3.10 av Linuxkjernen.[104]

Det har egenskaper som støtte for defragmentering (deriblant automatisk defragmentering gjennom opsjonen autodefrag),[105] data scrubbing,[105] online endring av størrelsen på diskvolumer,[106] offline filsystemsjekk (fsck),[107] transparent datakompresjon (zlib og Lempel-Ziv-Oberhumer)[108][109] av datafiler eller logiske disker, union mount,[110] etc. Btrfs støtter harddisker på inntil 16 exbibyte (EiB) og filstørrelser på inntil 16 exbibyte (EiB).[111] Dets datastruktur er et B-tre, en selvbalanserende tredatastruktur, som sorterer data og tillater søking, sekvensiell aksess, innsettelse og sletting i en logaritmisk tid.[112]

Juridiske aspekter[rediger | rediger kilde]

Lisensiering[rediger | rediger kilde]

I begynnelsen lanserte Torvalds Linux under en lisens som la ned forbud mot all kommersiell bruk.[113] Dette ble forandret i versjon 0.12 gjennom en overgang til GNU General Public License (GPL).[114] Denne lisensen tillater distribusjon og salg av modifiserte og umodifiserte versjoner av Linux, men krever at alle kopiene blir utgitt under samme lisens og er ledsaget av den komplette korresponderende kildekode.

Torvalds beskrev i 1997 lisensieringen av Linux under GPL som «den beste tingen jeg noensinne har gjort.»[113]

GPL version 3[rediger | rediger kilde]

Linuxkjernen er eksplisitt lisensiert bare under versjon 2 av GPL,[115] uten å velge «enhver senere versjon», som er den vanlige GPL- utvidelsen. Der har vært en betydelig debatt om hvor enkelt lisensen kunne bli forandret til å bruke senere GPL versjoner (deriblant versjon 3) og hvorvidt en slik forandring endog er ønskelig.[116] Torvalds selv spesifikt indikerte under lanseringen av versjon 2.4.0 at hans egen kode bare ville lansert under GPL versjon 2.[117]

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.[118]

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.[119] 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&Ts 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. I stedet 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.[119] 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.[120] 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.[121]

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

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.[124]

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.[125] 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.[126] 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.0[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

Versjon 2.0[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner Merknader
2.0 2.0.0 9. juni 1996 716 119 5 844 2 015 Symmetrisk flerprosessering, aksesslister i dynamisk
opplastbare moduler, Java, flere nettverksprotokoller.

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.0 2.0.0 9. juni 1996 2 015 Symmetrisk flerprosessering, aksesslister i dynamisk
opplastbare moduler, Java, flere nettverksprotokoller.
2.0.1 3. juli 1996
2.0.2 5. juli 1996
2.0.3 6. juli 1996
2.0.4 8. juli 1996
2.0.5 10. juli 1996
2.0.6 12. juli 1996
2.0.7 15. juli 1996
2.0.8 25. juli 1996
2.0.9 26. juli 1996
2.0.10 27. juli 1996
2.0.11 5. august 1996
2.0.12 9. august 1996
2.0.13 16. august 1996
2.0.14 20. august 1996
2.0.15 25. august 1996
2.0.16 31. august 1996
2.0.17 2. september 1996
2.0.18 5. september 1996
2.0.19 11. september 1996
2.0.20 13. september 1996
2.0.21 20. september 1996
2.0.22 8. oktober 1996
2.0.23 18. oktober 1996
2.0.24 30. oktober 1996
2.0.25 8. november 1996
2.0.26 22. november 1996
2.0.27 1. desember 1996
2.0.28 14. januar 1997
2.0.29 7. februar 1997
2.0.30 8. april 1997
2.0.31 17. oktober 1997
2.0.32 18. november 1997
2.0.33 16. desember 1997
2.0.34 4. juni 1998
2.0.35 13. juli 1998
2.0.36 16. november 1998
2.0.37 14. juni 1999
2.0.38 25. august 1999
2.0.39 9. januar 2001
2.0.40 8. februar 2004 7 551

Versjon 2.1[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner Merknader
2.1 2.1.0 30. september 1996 735 736 6 033 1 727 Utviklingsversjon

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.1 2.1.0 30. september 1996 6 033 Utviklingsversjon
2.1.1 3. oktober 1996
2.1.2 8. oktober 1996
2.1.3 10. oktober 1996
2.1.4 15. oktober 1996
2.1.5 18. oktober 1996
2.1.6 29. oktober 1996
2.1.7 1. november 1996
2.1.8 9. november 1996
2.1.9 12. november 1996
2.1.10 15. november 1996
2.1.11 18. november 1996
2.1.12 22. november 1996
2.1.13 23. november 1996
2.1.14 1. desember 1996
2.1.15 12. desember 1996
2.1.16 18. desember 1996
2.1.17 22. desember 1996
2.1.18 29. desember 1996
2.1.19 31. desember 1996
2.1.20 2. januar 1997
2.1.21 14. januar 1997
2.1.22 23. januar 1997
2.1.23 26. januar 1997
2.1.24 28. januar 1997
2.1.25 2. februar 1997
2.1.26 7. februar 1997
2.1.27 26. februar 1997
2.1.28 3. mars 1997
2.1.29 10. mars 1997
2.1.30 26. mars 1997
2.1.31 3. april 1997
2.1.32 5. april 1997
2.1.33 10. april 1997
2.1.34 14. april 1997
2.1.35 15. april 1997
2.1.36 23. april 1997
2.1.37 14. mai 1997
2.1.38 15. mai 1997
2.1.39 18. mai 1997
2.1.40 22. mai 1997
2.1.41 28. mai 1997
2.1.42 29. mai 1997
2.1.43 16. juni 1997
2.1.44 7. juli 1997
2.1.45 17. juli 1997
2.1.46 19. juli 1997
2.1.47 24. juli 1997
2.1.48 4. august 1997
2.1.49 11. august 1997
2.1.50 14. august 1997
2.1.51 19. august 1997
2.1.52 3. september 1997
2.1.53 4. september 1997
2.1.54 6. september 1997
2.1.55 9. september 1997
2.1.56 20. september 1997
2.1.57 25. september 1997
2.1.58 15. oktober 1997
2.1.59 17. oktober 1997
2.1.60 25. oktober 1997
2.1.61 31. oktober 1997
2.1.62 3. november 1997
2.1.63 12. november 1997
2.1.64 15. november 1997
2.1.65 18. november 1997
2.1.66 26. november 1997
2.1.67 29. november 1997
2.1.68 30. november 1997
2.1.69 1. desember 1997
2.1.70 3. desember 1997
2.1.71 4. desember 1997
2.1.72 9. desember 1997
2.1.73 19. desember 1997
2.1.74 20. desember 1997
2.1.75 22. desember 1997
2.1.76 24. desember 1997
2.1.77 2. januar 1998
2.1.78 6. januar 1998
2.1.79 13. januar 1998
2.1.80 21. januar 1998
2.1.81 24. januar 1998
2.1.82 26. januar 1998
2.1.83 30. januar 1998
2.1.84 31. januar 1998
2.1.85 4. februar 1998
2.1.86 11. februar 1998
2.1.87 17. februar 1998
2.1.88 21. februar 1998
2.1.89 7. mars 1998
2.1.90 18. mars 1998
2.1.91 26. mars 1998
2.1.92 2. april 1998
2.1.93 7. april 1998
2.1.94 9. april 1998
2.1.95 10. april 1998
2.1.96 14. april 1998
2.1.97 18. april 1998
2.1.98 24. april 1998
2.1.99 1. mai 1998
2.1.100 8. mai 1998
2.1.101 9. mai 1998
2.1.102 14. mai 1998
2.1.103 21. mai 1998
2.1.104 5. juni 1998
2.1.105 7. juni 1998
2.1.106 13. juni 1998
2.1.107 25. juni 1998
2.1.108 2. juli 1998
2.1.109 17. juli 1998
2.1.110 21. juli 1998
2.1.111 25. juli 1998
2.1.112 28. juli 1998
2.1.113 1. august 1998
2.1.114 3. august 1998
2.1.115 6. august 1998
2.1.116 19. august 1998
2.1.117 20. august 1998
2.1.118 26. august 1998
2.1.119 27. august 1998
2.1.120 5. september 1998
2.1.121 9. september 1998
2.1.122 16. september 1998
2.1.123 28. september 1998
2.1.124 4. oktober 1998
2.1.125 9. oktober 1998
2.1.126 24. oktober 1998
2.1.127 7. november 1998
2.1.128 12. november 1998
2.1.129 19. november 1998
2.1.130 26. november 1998
2.1.131 3. desember 1998
2.1.132 22. desember 1998
2.2.0 pre1 28. desember 1998
2.2.0 pre2 31. desember 1998
2.2.0 pre3 1. januar 1999
2.2.0 pre4 3. januar 1999
2.2.0 pre5 6. januar 1999
2.2.0 pre6 9. januar 1999
2.2.0 pre7 13. januar 1999
2.2.0 pre8 19. januar 1999
2.2.0 pre9 21. januar 1999 13 077

Versjon 2.2[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner Merknader
2.2 2.2.0 25. januar 1999 1 676 182 13 080 4 599 Porteringer til 64-biter RISC: Power, DEC Alpha, PA-RISC,
SPARC64, UltraSPARC. Støtte for internettprotokollen IP v.6
og filsystemet ext2.

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.2 2.2.0 25. januar 1999 13 080 Porteringer til 64-biter RISC: Power, DEC Alpha, PA-RISC,
SPARC64, UltraSPARC. Støtte for internettprotokollen IP v.6
og filsystemet ext2
2.2.1 28. januar 1999
2.2.2 23. februar 1999
2.2.3 9. mars 1999
2.2.4 23. mars 1999
2.2.5 29. mars 1999
2.2.6 16. april 1999
2.2.7 28. april 1999
2.2.8 11. mai 1999
2.2.9 13. mai 1999
2.2.10 14. juni 1999
2.2.11 9. august 1999
2.2.12 26. august 1999
2.2.13 20. oktober 1999
2.2.14 4. januar 2000
2.2.15 4. mai 2000
2.2.16 7. juni 2000
2.2.17 4. september 2000
2.2.18 11. desember 2000
2.2.19 25. mars 2001
2.2.20 2. november 2001
2.2.21 20. mai 2002
2.2.22 16. september 2002
2.2.23 29. november 2002
2.2.24 5. mars 2003
2.2.25 17. mars 2003
2.2.26 25. februar 2004 19 530

Versjon 2.3[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner Merknader
2.3 2.3.0 11. mai 1999 1 763 358 13 804 4 721 Utviklingsversjon

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.3 2.3.0 11. mai 1999 13 804 Utviklingsversjon
2.3.1 14. mai 1999
2.3.2 15. mai 1999
2.3.3 17. mai 1999
2.3.4 30. mai 1999
2.3.5 2. juni 1999
2.3.6 10. juni 1999
2.3.7 21. juni 1999
2.3.8 22. juni 1999
2.3.9 30. juni 1999
2.3.10 8. juli 1999
2.3.11 21. juli 1999
2.3.12 28. juli 1999
2.3.13 9. august 1999
2.3.14 19. august 1999
2.3.15 25. august 1999
2.3.16 1. september 1999
2.3.17 7. september 1999
2.3.18 10. september 1999
2.3.19 4. oktober 1999
2.3.20 9. oktober 1999
2.3.21 11. oktober 1999
2.3.22 15. oktober 1999
2.3.23 22. oktober 1999
2.3.24 27. oktober 1999
2.3.25 1. november 1999
2.3.26 7. november 1999
2.3.27 12. november 1999
2.3.28 12. november 1999
2.3.29 24. november 1999
2.3.30 7. desember 1999
2.3.31 8. desember 1999
2.3.32 14. desember 1999
2.3.33 14. desember 1999
2.3.34 21. desember 1999
2.3.35 29. desember 1999
2.3.36 4. januar 2000
2.3.37 6. januar 2000
2.3.38 8. januar 2000
2.3.39 11. januar 2000
2.3.40 21. januar 2000
2.3.41 28. januar 2000
2.3.42 1. februar 2000
2.3.43 10. februar 2000
2.3.44 12. februar 2000
2.3.45 14. februar 2000
2.3.46 17. februar 2000
2.3.47 21. februar 2000
2.3.48 27. februar 2000
2.3.49 2. mars 2000
2.3.50 7. mars 2000
2.3.51 11. mars 2000
2.3.99 pre1 15. mars 2000
2.3.99 pre2 19. mars 2000
2.3.99 pre3 24. mars 2000
2.3.99 pre4 11. april 2000
2.3.99 pre5 12. april 2000
2.3.99 pre6 26. april 2000
2.3.99 pre7 11. mai 2000
2.3.99 pre8 12. mai 2000
2.3.99 pre9 23. mai 2000 20 882

Versjon 2.4[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner1 Merknader
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

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.4 2.4.0 4. januar 2001 24 379 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.1 30. januar 2001
2.4.2 22. februar 2001
2.4.3 30. mars 2001
2.4.4 28. april 2001
2.4.5 6. mai 2001
2.4.6 4. juli 2001
2.4.7 20. juli 2001
2.4.8 11. august 2001
2.4.9 16. august 2001
2.4.10 23. september 2001
2.4.11 9. oktober 2001
2.4.12 11. oktober 2001
2.4.13 24. oktober 2001
2.4.14 5. november 2001
2.4.15 23. november 2001
2.4.16 26. november 2001
2.4.17 21. desember 2001
2.4.18 25. februar 2002
2.4.19 3. august 2002
2.4.20 28. november 2002
2.4.21 13. juni 2003
2.4.22 25. august 2003
2.4.23 28. november 2003
2.4.24 5. januar 2004
2.4.25 18. februar 2004
2.4.26 14. april 2004
2.4.27 7. august 2004
2.4.28 17. november 2004
2.4.29 19. januar 2005
2.4.30 4. april 2005
2.4.31 1. juni 2005
2.4.32 18. november 2005
2.4.33.0 13. august 2006
2.4.33.1 19. august 2006
2.4.33.2 22. august 2006
2.4.33.3 31. august 2006
2.4.33.4 11. november 2006
2.4.33.5 14. desember 2006
2.4.33.6 18. desember 2006
2.4.33.7 23. desember 2006
2.4.34.0 23. desember 2006
2.4.34.1 3. februar 2007
2.4.34.2 24. mars 2007
2.4.34.3 22. april 2007
2.4.34.4 22. april 2007
2.4.34.5 6. juni 2007
2.4.34.6 22. juli 2007
2.4.35.0 26. juli 2007
2.4.35.1 15. august 2007
2.4.35.2 8. september 2007
2.4.35.3 24. september 2007
2.4.35.4 17. november 2007
2.4.35.5 17. desember 2007
2.4.36.0 1. januar 2008
2.4.36.1 16. februar 2008
2.4.36.2 24. februar 2008
2.4.36.3 19. april 2008
2.4.36.4 7. mai 2008
2.4.36.5 1. juni 2008
2.4.36.6 6. juni 2008
2.4.36.7 7. september 2008
2.4.36.8 19. oktober 2008
2.4.36.9 10. november 2008
2.4.37.0 2. desember 2008 38 735
2.4.37.1 19. april 2009
2.4.37.2 7. juni 2009
2.4.37.3 20. juni 2009
2.4.37.4 26. juni 2009
2.4.37.5 14. august 2009
2.4.37.6 13. september 2009
2.4.37.7 7. november 2009
2.4.37.8 31. januar 2010
2.4.37.9 1. februar 2010
2.4.37.10 6. september 2010
2.4.37.11 18. desember 2010   Siste underversjon

Versjon 2.5[rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner Merknader
2.5 2.5.0 23. november 2001 3 833 603 29 405 9 893 Utviklingsversjon

Underversjoner[rediger kilde]

Versjon Underversjon Lansert Størrelse i Kb Merknader
2.5 2.5.0 23. november 2001 9 893 Utviklingsversjon
2.5.1 17. desember 2001
2.5.2 15. januar 2002
2.5.3 30. januar 2002
2.5.4 11. februar 2002
2.5.5 20. februar 2002
2.5.6 8. mars 2002
2.5.7 18. mars 2002
2.5.8 14. april 2002
2.5.9 22. april 2002
2.5.10 24. april 2002
2.5.11 29. april 2002
2.5.12 1. mai 2002
2.5.13 3. mai 2002
2.5.14 6. mai 2002
2.5.15 9. mai 2002
2.5.16 18. mai 2002
2.5.17 21. mai 2002
2.5.18 25. mai 2002
2.5.19 29. mai 2002
2.5.20 3. juni 2002
2.5.21 9. juni 2002
2.5.22 17. juni 2002
2.5.23 19. juni 2002
2.5.24 20. juni 2002
2.5.25 5. juli 2002
2.5.26 16. juli 2002
2.5.27 20. juli 2002
2.5.28 24. juli 2002
2.5.29 27. juli 2002
2.5.30 1. august 2002
2.5.31 11. august 2002
2.5.32 27. august 2002
2.5.33 31. august 2002
2.5.34 9. september 2002
2.5.35 16. september 2002
2.5.36 18. september 2002
2.5.37 20. september 2002
2.5.38 22. september 2002
2.5.39 27. september 2002
2.5.40 1. oktober 2002
2.5.41 7. oktober 2002
2.5.42 12. oktober 2002
2.5.43 16. oktober 2002
2.5.44 19. oktober 2002
2.5.45 31. oktober 2002
2.5.46 4. november 2002
2.5.47 11. november 2002
2.5.48 18. november 2002
2.5.49 22. november 2002
2.5.50 27. november 2002
2.5.51 10. desember 2002
2.5.52 16. desember 2002
2.5.53 24. desember 2002
2.5.54 2. januar 2003
2.5.55 9. januar 2003
2.5.56 10. januar 2003
2.5.57 13. januar 2003
2.5.58 14. januar 2003
2.5.59 17. januar 2003
2.5.60 10. februar 2003
2.5.61 15. februar 2003
2.5.62 17. februar 2003
2.5.63 24. februar 2003
2.5.64 5. mars 2003
2.5.65 17. mars 2003
2.5.66 24. mars 2003
2.5.67 7. april 2003
2.5.68 20. april 2003
2.5.69 5. mai 2003
2.5.70 27. mai 2003
2.5.71 14. juni 2003
2.5.72 17. juni 2003
2.5.73 22. juni 2003
2.5.74 2. juli 2003
2.5.75 10. juli 2003 40 969

Versjon 2.6[rediger | rediger kilde]

Versjon Underversjon Lansert Antall linjer i
kildekoden
Størrelse i Kb Datamaskiner1 Merknader
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 3.0–[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

Noter[rediger | rediger kilde]

Type numrering
  1. ^ I november 2016 ble Linuxkjernen kjørt på 498 av verdens 500 kraftigste superdatamaskiner, rangert på listen TOP500 (de to andre benyttet AIX og IBM POWER7).[4][5] Dette tallet har økt jevnt. I juni 1998 ble Linuxkjernen benyttet på 1 av de 500 raskeste superdatamaskinene; i juni 2000 var dette tallet økt til 28, i juni 2005 til 318, i juni 2010 til 456 og i juni 2015 til 489.[4] På topp i november 2016 var den kinesiske superdatamaskinen Sunway TaihuLight ved National Supercomputer Center, i Wuxi, Jiangsu, med en ytelse på 93 petaflops; datamaskinen benyttet 40,960 stk 260-kjerners SW26010 64-biter RISC mikroprosessorer. Den kjører Sunway RaiseOS 2.0.5 som er basert på Linuxkjernen. På 2.-plass var den kinesiske superdatamaskinen Tianhe-2 med en ytelse på 33.86 petaflops; datamaskinen benyttet 32,000 Intel Xeon E5-2692 12C sammen med 2.200 GHz 48,000 Intel Xeon Phi 31S1P. Den kjører Kylin Linux. På 3.-plass var Titan - Cray XK7 fra Oak Ridge National Laboratory i Oak Ridge, Tennessee, USA. Maskinen har en ytelse på 17.5 petaflops og består av 560,640 prosessorkjerner med 2.2GHz AMD Opteron 6274 16C. Det kjører operativsystemet Cray Linux Environment.
  2. ^ En Linuxdistribusjon er et operativsystem som består av Linuxkjernen, et pakkesystem, programvareverktøy og biblioteker, et vindussystem (som regel vindussystemet X eller Wayland), en vindusbehandler og et skrivebordsmiljø. Nettstedet DistroWatch presenterte den 13. april 2017 en liste over 853 Linuxdistribusjoner, aktive så vel som tidligere.[7] Det store antall distribusjoner kan grupperes i «familier», som er utgått fra distribusjonene Slackware, Debian, Ubuntu, Fedora, Red Hat Enterprise Linux, Gentoo, SUSE Linux, Arch Linux og Mandriva Linux.
  3. ^ Eksempler på slike enheter er iPod og iPhone fra Apple Computer, med iPodLinux og iPhone Linux (iOS fra Apple er derimot basert på Mac OS X). Andre eksempler er Android, WebOS, Tizen, Sailfish OS, H5OS, Maemo, Openmoko Linux og Ångström, så vel som de tidligere operativsystemene Moblin, MeeGo og Firefox OS. I 2013 var Android det mest utbredte operativsystemet i hele verden.

Referanser[rediger | rediger kilde]

  1. ^ a b Index of /pub/linux/kernel/v1.0, kernel.org, besøkt 2. august 2016
  2. ^ Bovet 2005, side 1
  3. ^ Bovet 2005, side 7
  4. ^ a b c «TOP500 Supercomputer Sites: Operating system Family / Linux». Top500.org. Besøkt 2. september 2016. 
  5. ^ a b «Sublist Generator». Top500.org. Besøkt 2. september 2016. 
  6. ^ «README». Linux kernel source tree, git.kernel.org. Besøkt 1. august 2016. 
  7. ^ Search Distributions, DistroWatch, 13. april 2017
  8. ^ Linux TV, linuxtv.org, 26. mai 2016, besøkt 3. august 2016
  9. ^ PVR recording software, Kodi, 4. februar 2016
  10. ^ Richardson, Marjorie (1. november 1999). «Interview: Linus Torvalds». Linux Journal. Besøkt 2. august 2016. 
  11. ^ a b Linux, history-computer.com, 2007
  12. ^ a b c d e f Corbet 2012, side 9
  13. ^ a b Love 2015
  14. ^ a b c d Corbet 2012, side 10
  15. ^ «The Linux Foundation Releases Linux Development Report». Linux Foundation. 18. februar 2015. Besøkt 1. august 2016. 
  16. ^ Corbet 2012
  17. ^ Don Marti: Linux contributor base broadens, Computerworld, 2. juli 2007
  18. ^ a b Linux kernel coding style, kernel.org, Documentation, 28. juli 2016
  19. ^ Jake Edge (25. november 2008). «Character devices in user space». LWN.net. Besøkt 7. mai 2015. 
  20. ^ Jonathan Corbet (2. mai 2007). «UIO: user-space drivers». LWN.net. Besøkt 7. mai 2015. 
  21. ^ Jonathan Corbet (24. februar 2003). «Driver porting: the preemptible kernel». LWN.net. Besøkt 7. mai 2015. 
  22. ^ Kroah-Hartman, Greg. «The Linux Kernel Driver Interface». 
  23. ^ a b Nguyen, Binh (30. juli 2004). «Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy». The Linux Documentation Project. Besøkt 28. november 2012. 
  24. ^ Bovet, Daniel P.; Cesati, Marco (oktober 2000). «Chapter 10: Process Scheduling». Understanding the Linux Kernel. O'Reilly. ISBN 0-596-00002-2. Arkivert fra originalen 21. september 2014. Besøkt 15. oktober 2011. 
  25. ^ Santhanam, Anand (23. september 2003). «Towards Linux 2.6, A look into the workings of the next new kernel». IBM Global Services. Arkivert fra originalen 27. september 2013. Besøkt 15. oktober 2011. 
  26. ^ a b Bar, Moshe (1. april 2000). «The Linux Scheduler». Linux Journal. Belltown Media, Inc. Besøkt 14. april 2012. 
  27. ^ Molnár, Ingo (13. april 2007). «[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]». Besøkt 14. april 2012. 
  28. ^ The Open Group Base Specifications Issue 6, The IEEE and The Open Group, IEEE Std 1003.1, 2004 Edition, IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)
  29. ^ McKenney, Paul (10. august 2005). «A realtime preemption overview». LWN.net. Besøkt 5. februar 2012. 
  30. ^ «OSADL Project: Realtime Linux». OSADL. Besøkt 5. februar 2012. 
  31. ^ Bergmann, Arnd (5. mars 2011). «BKL: That's all, folks». Linux Kernel Organization, Inc. Besøkt 20. februar 2012. 
  32. ^ Larabel, Michael (24. januar 2014). «The Linux 3.14 Kernel Already Has Many Exciting Features». Phoronix. Besøkt 3. februar 2014. 
  33. ^ «Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling». 30. mars 2014. Besøkt 2. april 2014. 
  34. ^ Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Operating Systems: Three Easy Pieces (Chapter: Paging), Arpaci-Dusseau Books, http://pages.cs.wisc.edu/~remzi/OSTEP/vm-paging.pdf 
  35. ^ Demand paging, www.linux-tutorial
  36. ^ Frédéric Haziza: Paging & Segmentation, Uppsala universitet, våren 2007
  37. ^ «The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"». Besøkt 14. oktober 2011. 
  38. ^ http://ftp.kernel.org/pub/linux/utils/kernel/modutils/
  39. ^ http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/
  40. ^ «Sysctl/kernel.txt». Besøkt 4. januar 2013. 
  41. ^ Kees Cook (28. november 2012). «Clean module disabling». outflux.net. Besøkt 12. desember 2013. 
  42. ^ David A. Wheeler: 3. Shared Libraries, Program Library HOWTO, version 1.20, 11. april 2003
  43. ^ Michael Larabel: Linux 4.1 Brings Many Potentially Risky x86/ASM Changes, phoronix.com, 13. april 2015
  44. ^ Michael Larabel: More Of The Linux Kernel's x86 Assembly Code Gets Rewritten In C, phoronix.com, 18. juni 2015
  45. ^ Kubbilun, Ingo A. (2. juni 2004). «Linux kernel patch for Intel Compiler» (tysk). Pyrillion.org. Arkivert fra originalen 22. juli 2011. Besøkt 12. november 2010. 
  46. ^ timothy (26. februar 2009). «High Performance Linux Kernel Project — LinuxDNA». Slashdot Linux. Dice Holdings. Besøkt 30. oktober 2010. 
  47. ^ Ryan, Justin (25. februar 2009). «LinuxDNA Supercharges Linux with the Intel C/C++ Compiler». Linux Journal. Belltown Media, Inc. Besøkt 30. oktober 2010. 
  48. ^ Lelbach, Bryce (25. oktober 2010). «Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)». Arkivert fra originalen 7. september 2015. 
  49. ^ Larabel, Michael (12. april 2014). «Linux 3.15 Can Almost Be Compiled Under LLVM's Clang». Phoronix. Besøkt 10. juni 2014. 
  50. ^ Larabel, Michael. «Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel». Phoronix. Besøkt 20. november 2014. 
  51. ^ Edge, Jake (7. mai 2013). «LFCS: The LLVMLinux project». LWN.net. Besøkt 3. mars 2015. 
  52. ^ Möller, Jan-Simon (2. februar 2014). «LLVMLinux: The Linux Kernel with Dragon Wings». LLVM Project. Besøkt 3. mars 2015. 
  53. ^ Deucher, Alex (7. oktober 2014). «AMD's New Unified Open Source Driver». X.Org Foundation. Besøkt 21. januar 2015. 
  54. ^ «Huawei KunLun EulerOS 2.0 Operating System Passes UNIX Certification». Huawei. Besøkt 29. oktober 2016. 
  55. ^ Peng Shen. «Huawei Conformance Statement: Commands and Utilities V4». The Open Group. Besøkt 29. oktober 2016. 
  56. ^ «The Open Brand Register of Certified Products». The Open Group. 29. mai 2014. Besøkt 29. mai 2014. 
  57. ^ Xie Ruohong. «Inspur Conformance Statement». The Open Group. Besøkt 8. desember 2015. 
  58. ^ Greg Kroah-Hartman. «The Linux Kernel Driver Interface». Besøkt 10. april 2015. 
  59. ^ «About mac80211». Linux Kernel Organization, Inc. Besøkt 8. juni 2014. 
  60. ^ «Report on ABI changes in the Linux kernel». Andrey Ponomarenko's ABI laboratory. 17. mars 2016. 
  61. ^ Torvalds, Linus Benedict (26. august 1991). «What would you like to see most in minix?». 
  62. ^ a b c Torvalds, Linus (januar 1999). «The Linux Edge». Open Sources: Voices from the Open Source Revolution. O'Reilly. ISBN 1-56592-582-3. Besøkt 13. oktober 2013. 
  63. ^ James Plafke: Linux drops support for Intel’s 386 processors, but does it really matter?, ExtremeTexh, 13. desember 2012
  64. ^ Wang, David (6. mai 2010). «Android Now Running On iPhone 3G». TechHive. IDG. Besøkt 11. juli 2010. 
  65. ^ Kroah-Hartman, Greg (2. februar 2010). «Android and the Linux kernel community». Besøkt 3. februar 2010. «This means that any drivers written for Android hardware platforms, can not get merged into the main kernel tree because they have dependencies on code that only lives in Google's kernel tree, causing it to fail to build in the kernel.org tree. Because of this, Google has now prevented a large chunk of hardware drivers and platform code from ever getting merged into the main kernel tree. Effectively creating a kernel branch that a number of different vendors are now relying on.» 
  66. ^ Meyer, David (3. februar 2010). «Linux developer explains Android kernel code removal». ZDNet. CBS Interactive. Besøkt 3. februar 2010. 
  67. ^ «Chapter 03: maemo Platform Overview». maemo Technology Overview. Nokia. 2008. Arkivert fra originalen 16. juni 2008. Besøkt 9. april 2010. 
  68. ^ a b CONFIG_FIREWIRE: New FireWire stack, EXPERIMENTAL, Linux kernel driver database
  69. ^ Marius Nestor: [http://news.softpedia.com/news/linux-kernel-4-6-officially-released-introduces-orangefs-usb-3-1-ssp-support-504088.shtml Linux Kernel 4.6 Officially Released, Introduces OrangeFS, USB 3.1 SSP Support. GO Linux 4.6 kernel is now available for download], softpedia, 15. mai 2016
  70. ^ Linux 2.6.31, kernelnewbies.org, 9. september 2009
  71. ^ Mookhey, K. K.; Burghate, Nilesh (1. juli 2005). Linux: Security, Audit and Control Features. USA: ISACA. s. 14. ISBN 1-893209-78-4. Besøkt 31. desember 2010. 
  72. ^ Hatch, Brian (15. juli 2008). Hacking Exposed Linux: Linux Security Secrets and Solutions. McGraw-Hill Osborne Media. s. 524. ISBN 0-07-226257-5. Besøkt 31. desember 2010. 
  73. ^ Jaeger, Trent (7. oktober 2008). Operating System Security. Morgan and Claypool Publishers. s. 122. ISBN 1-59829-212-9. Besøkt 31. desember 2010. 
  74. ^ Andrews, Jeremy (16. juli 2008). «Security Bugs and Full Disclosure». KernelTrap. Arkivert fra originalen 19. juli 2008. Besøkt 31. desember 2010. 
  75. ^ Spengler, Brad (16. juli 2008). «Linux's unofficial security-through-coverup policy». Besøkt 31. desember 2010. 
  76. ^ Bradford, John (8. mars 2003). «Re: what's an OOPS». Besøkt 30. oktober 2010. 
  77. ^ «kerneloops(8) - Linux man page». Linux.die.net. Besøkt 30. oktober 2010. 
  78. ^ «Features/ABRTF12». FedoraProject. 3. august 2009. Besøkt 30. oktober 2010. 
  79. ^ «Kerneloops.org». Kerneloops.org. Besøkt 5. mars 2014. 
  80. ^ «Linux kernel 4.0, Section 1.2. Live patching». 26. april 2015. Besøkt 27. april 2015. 
  81. ^ Jonathan Corbet (25. februar 2015). «A rough patch for live patching». LWN.net. Besøkt 27. april 2015. 
  82. ^ «kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree)». 11. februar 2015. Besøkt 27. april 2015. 
  83. ^ Mauerer, Wolfgang (2010). Professional Linux Kernel Architecture. John Wiley & Sons. 
  84. ^ Jones, M. Tim (17. februar 2009). «Anatomy of ext4». IBM Developer Works. Besøkt 8. februar 2012. 
  85. ^ Mauerer, Wolfgang (2010). Professional Linux Kernel Architecture. John Wiley & Sons. 
  86. ^ ChangeLog-2.4.15, Index of /pub/linux/kernel/v2.4, kernel.org, 23. november 2001
  87. ^ Theodore Yue Tak Ts'o, Badari Pulavarty, Suparna Bhattacharya: Directory indexing, State of the Art: Where we are with the Ext3 filesystem, IBM Linux Technology Center, 26. juni 2005
  88. ^ Michael Larabel: EXT3 File-System Driver To Be Removed From The Linux Kernel, Phoronix, 15. juli 2015
  89. ^ a b «XFS Overview». Silicon Graphics International Corp. 2. juli 2013. Besøkt 2. juli 2013. 
  90. ^ a b 1.2. A Brief History of XFS, XFS User Guide, A guide for XFS filesystem users and administrators, Edition 0, Silicon Graphics Inc., 2006
  91. ^ «A mini-FAQ for JFS». JFS for Linux project. 
  92. ^ «Comparison of JFS1 and JFS2 on AIX». IBM. 
  93. ^ «Interview With the People Behind JFS, ReiserFS & XFS». 
  94. ^ Michael Larabel (30. mars 2016). «Reiser4 Now Available For Linux 4.5 Kernel». Phoronix. 
  95. ^ Michael Larabel (23. februar 2015). «KDBUS & Other Features You Won't Find In The Linux 4.0 Kernel». Phoronix. 
  96. ^ a b Mathur, Avantika; Cao, MingMing; Bhattacharya, Suparna; Dilger, Andreas; Tomas, Alex; Vivier, Laurent (2007). «The new ext4 filesystem: current status and future plans» (PDF). Proceedings of the Linux Symposium. Ottawa, ON, CA: Red Hat. Besøkt 15. januar 2008. 
  97. ^ Hal Pomeranz (28. mars 2011). «Understanding EXT4 (Part 3): Extent Trees». SANS Digital Forensics and Incident Response Blog. 
  98. ^ Oracle Corporation: Oracle Linux 7 with Q&A with Wim Coekaerts, 2014
  99. ^ Amanda McPherson: A Conversation with Chris Mason on BTRfs: the next generation file system for Linux, Linux Foundation, 22. juni 2009
  100. ^ Valerie Henson: Chunkfs: Fast file system check and repair, 31. januar 2008
  101. ^ McPherson, Amanda (22. juni 2009). «A Conversation with Chris Mason on BTRfs: the next generation file system for Linux». Linux Foundation. Arkivert fra originalen 24. juni 2012. Besøkt 1. september 2009. 
  102. ^ SysadminGuide, wiki.kernel.org, 11. juni 2016
  103. ^ Kernel Newbies: Linux 2.6.29, 23. mars 2009
  104. ^ Kernel Newbies: Linux 3.10, 30. juni 2013
  105. ^ a b 1.1. Btrfs: Automatic defragmentation, scrubbing, performance improvements, Linux 3.0, kernelnewbies.org, 22. juli 2012
  106. ^ 5.5 Resizing a Btrfs File System, Oracle® Linux Administrator's Solutions Guide for Release 6, 2016
  107. ^ Btrfsck, wiki.kernel.org, 6. juli 2015
  108. ^ Compression, wiki.kernel.org, 15. juli 2015
  109. ^ Btrfs: add support for inode properties, git.kernel.org, 7. januar 2014
  110. ^ Changelog, wiki.kernel.org, 5. oktober 2016
  111. ^ Large File Support in Linux, SUSE Storage Administration Guide, 14. mars 2016
  112. ^ Btrfs design, wiki.kernel-org, 11. januar 2015
  113. ^ a b Yamagata, Hiroo (3. august 1997). «The Pragmatist of Free Software». HotWired. Arkivert fra originalen 10. februar 2007. Besøkt 21. februar 2007. 
  114. ^ Torvalds, Linus. «Release Notes for Linux v0.12». The Linux Kernel Archives. Besøkt 21. februar 2007. 
  115. ^ Martens, China (28. juli 2006). «Linux creator Torvalds still no fan of GPLv3». InfoWorld. IDG. Besøkt 15. februar 2015. 
  116. ^ Corbet, Jonathan (31. januar 2006). «GPLv3 and the kernel». LWN.net. Besøkt 21. februar 2007. 
  117. ^ Torvalds, Linus (8. september 2000). «Linux-2.4.0-test8». Besøkt 21. februar 2007. 
  118. ^ 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
  119. ^ 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. 
  120. ^ (en) Linus Benedict Thorvalds (5. oktober 1991). ««Free minix-like kernel sources for 386-AT»». comp.os.minix. Besøkt 29. oktober 2009. 
  121. ^ (en) Linus Benedict Thorvalds (februar 1992). ««Release notes for Linux v0.12»». www.kernel.org. Besøkt 29. oktober 2009. 
  122. ^ (en) David D. Summers (19. januar 1992). ««Troubles with partions»». Besøkt 29. oktober 2009. 
  123. ^ (en) Allan B. Clegg (31. mars 1992). ««It's here!»». Besøkt 29. oktober 2009. 
  124. ^ (en) Chris Lawrence (1. mai 1997). «Linux/m68k: Linux on Motorola's 68000 Processor». Linux Journal. Besøkt 29. oktober 2009. 
  125. ^ (en) Joseph Pranevich (26. januar 1999). «The Wonderful World of Linux 2.2 -- 'revised millennium penguin' version». Linux Today. Besøkt 29. oktober 2009. 
  126. ^ (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.