# Linux

## Vad det är

Linux är en fri, Unix-liknande systemkärna: det program som startar först, styr hårdvaran, fördelar
processortid och minne mellan alla andra program och avgör vilka av dem som får röra vilken fil
eller nätverksport. I vardagligt tal har ordet vidgats till att täcka hela operativsystemet som
byggs upp runt kärnan, och en del skriver GNU/Linux om helheten, för att ge erkännande åt
GNU-verktygen som oftast följer med.

Linus Torvalds började skriva kärnan 1991, som en Unix-klon från grunden, och sedan dess har ett
löst nätverk av utvecklare som samarbetar över internet byggt vidare på den. Målet är att följa
standarderna POSIX och Single UNIX Specification, så program som har skrivits för ett Unix-liknande
system går oftast att bygga på Linux med små ändringar. Kärnan började på 32-bitars Intel 386 och
körs i dag på en lång rad arkitekturer med 32 och 64 bitar. Koden är licensierad under GPL, enbart
version 2, med en uttrycklig anmärkning om att program som bara anropar kärnan inte omfattas av
licensen. Den anmärkningen är skälet till att proprietär programvara kan köras på Linux utan någon
licensfråga.

För att någon ska kunna logga in behövs mer än kärnan. Ett fungerande system behöver också ett
C-bibliotek, ett skal, en tjänstehanterare, en pakethanterare och tusentals program, och de projekt
som sätter ihop allt detta till något som går att installera kallas distributioner. Debian, Ubuntu,
Red Hat Enterprise Linux och de distributioner som byggs från dess källkod, SUSE, Fedora och Alpine
är distributioner. Var och en levererar sitt eget bygge av kärnan, sina egna standardinställningar
och sitt eget löfte om hur länge den ska fortsätta att rätta säkerhetsproblem.

Konkurrenterna beror på uppgiften. På servrar vägs Linux mot Windows Server och mot BSD-familjen,
FreeBSD och OpenBSD, som är kompletta Unix-liknande system som utvecklas i ett stycke i stället för
att sättas ihop av delar. På bärbara datorer möter Linux Windows och macOS.

## Varför det spelar roll

För ett företag som kör programvara på egna servrar eller i ett moln är operativsystemet för det
mesta valt innan någon frågar. Webbservrar, databaser, containermotorer och övervakningsverktyg
byggs för Linux först och testas hårdast där. Beslutet som återstår är snävare, och det är värt att
fatta rätt.

Valet mellan Linux och Windows Server avgörs av programvaran, inte av systemet. En verksamhet som är
byggd på Active Directory, IIS eller äldre .NET-applikationer har verkliga skäl att stanna på
Windows. Nästan allt annat i en modern webbstack, från PostgreSQL och Nginx till Kubernetes,
förutsätter Linux, och även Microsoft SQL Server finns i en utgåva för Linux.

Kostnadsfrågan är enkel. Kärnan och gemenskapsdistributioner som Debian och Ubuntu kostar ingenting
att installera på hur många maskiner som helst, och det finns inget antal licenser att revidera;
Windows Server säljs under en kommersiell licens. Med Linux går pengarna till människor och, om du
vill ha en, till en supportprenumeration från en leverantör som Canonical, Red Hat eller SUSE.

Containrar knyter ihop det ännu hårdare. En containeravbildning är ett användarutrymme för Linux som
har packats i en fil, och att köra en sådan innebär att köra vanliga processer på en Linux-kärna. På
en Mac eller en bärbar dator med Windows startar containerverktygen därför först en liten virtuell
Linux-maskin, och Apples eget verktyg `container` kör varje container i en egen lättviktig virtuell
maskin. Att välja containrar är att välja Linux, vad utvecklarnas bärbara datorer än kör.

Det som verkligen skiljer två Linux-servrar åt är distributionen och hur länge den underhålls.
Kärnprojektet ger ut en ny huvudversion (mainline) var nionde till tionde vecka och håller ett fåtal
grenar med långtidsstöd (longterm) vid liv i flera år; grenen 6.12 beräknas t.ex. få rättningar till
december 2028. Distributionerna bygger sitt eget underhåll ovanpå, och en distributions kärna stöds
av distributionen, inte av kärnutvecklarna. Välj distribution efter dess stödperiod och efter den
kompetens som teamet redan har.

En regel i kärnprojektet gör uppgraderingarna mindre riskabla än takten antyder: en ändring som får
program som tidigare fungerade att sluta fungera räknas som en regression, och regressioner rättas,
ofta genom att ändringen dras tillbaka. Det är därför program som byggdes för länge sedan fortsätter
att köras på nya kärnor.

Priset för all denna valfrihet är att ”vi kör Linux” säger väldigt lite. Två distributioner skiljer
sig åt i pakethanterare, brandväggsverktyg, nätverkskonfiguration och utgivningsrytm, och ett team
som kan den ena får lära om delar av den andra.

## Så ser det ut i praktiken

Den närmaste bilden är en enda värd på 464 MB som kör en git-forge, en databas och en webbserver,
där larmet för slut på minne eller disk är ett
[dödmansgrepp på en timer](/sv/portfolio/built-dead-mans-switch-monitoring-115/).
Var femtonde minut, med slumpmässig förskjutning, mäter ett skript tillgängligt minne och ledigt
diskutrymme och pingar en extern tjänst bara så länge båda ligger över sina tröskelvärden, så
tystnaden är larmet. Skriptet hade hela tiden läst rätt siffra, tillgängligt minne, medan sex
variabelnamn runt omkring sa ”free”. Eftersom kärnan använder outnyttjat minne som cache ligger det
lediga minnet på en frisk Linux-maskin nära noll: mot ett tröskelvärde på tio procent skulle en
läsare ha sett tolv megabyte ledigt på maskinen med 464 MB, och en ”rättning” på ett enda tecken
skulle ha förvandlat ett fungerande larm till ett som löser ut permanent. Namnen rättades, och sidan
anger gränsen rakt ut: dödmansgreppet bevisar att maskinen är frisk, inte att webbplatsen svarar.

Ett steg längre ut samlade företagets
[första dashboard för observerbarhet](/sv/portfolio/developed-and-launched-the-company-s-first-observability-9/)
in CPU, RAM, HDD, temperatur och andra mätvärden från Linux-servrar på distans via SSH, och
övervakade Docker-containrar på samma sätt. En andra version gick över till Grafana och Prometheus.
Den visades på en stor tv-skärm på kontoret, med larm när tröskelvärden överskreds, och teamen kunde
upptäcka och lösa incidenter 40 % snabbare.

I en hel serverpark blev åtkomsten något som skrevs ned i stället för något som någon kom ihåg.
[Över 1 000 RBAC-regler](/sv/portfolio/enhanced-data-security-by-implementing-1-000-rbac-14/)
täckte utvecklarmiljöer, applikationsinstanser, PostgreSQL, MS SQL och Linux-servrarna och
tillämpades med Ansible, så att varje miljö blev likadan. Utvecklare kom bara åt sina tilldelade
servrar. Risken för obehörig åtkomst minskade med 85 %, och automatiseringen kortade
uppsättningstiden med 60 % jämfört med manuellt arbete.

## Var det går fel

**Dashboarden visar nästan fullt minne på en server som är helt frisk.** Linux ser oanvänt minne som
slöseri och fyller det med cachad fildata, som kärnan lämnar tillbaka i samma ögonblick som ett
program ber om det. Siffran ”free” räknar bara minne som inte gör någonting alls, så den glider mot
noll på varje maskin som har något att göra. Siffran som svarar på frågan ”klarar den här servern
mer arbete?” är MemAvailable, kärnans egen uppskattning av hur mycket nya program skulle kunna
använda utan att swappa. Larma på den:

```sh
grep -E '^(MemFree|MemAvailable):' /proc/meminfo
```

**En tjänst försvinner, och förklaringen står i kärnans logg och inte i tjänstens egen.** Som
standard låter Linux program reservera mer minne än maskinen har, i kalkylen att mycket av det
aldrig kommer att användas. När kalkylen slår fel och minnet verkligen tar slut väljer OOM-killern
(out-of-memory killer) ut en process, oftast en stor, och avslutar den. Applikationen får ingen
chans att skriva något; spåret finns i kärnans logg, som `journalctl -k` visar. Ge varje tjänst ett
eget minnestak, via `MemoryMax=` i systemd eller en gräns för containern, så att ett program som
skenar stoppas innan kärnan måste välja, och bevaka tillgängligt minne i stället för att vänta på
att något dödas.

**En felrapport om kärnan som skickas uppströms blir obesvarad.** Maskinen kör distributionens
kärna, som bär på distributionens egna patchar, och kärnutvecklarna stöder bara sina egna utgåvor.
Kommandot `uname -r` visar versionen, och allt efter bindestrecket, som i `6.8.0-45-generic`,
markerar ett bygge från en distribution. Rapportera problemet till distributionen först, eller
återskapa det på en aktuell kärna från kernel.org innan du tar det uppströms.

**Säkerhetsrättningarna slutar komma medan servern fortsätter som förut.** Varje utgåva av en
distribution och varje kärna med långtidsstöd har ett slutdatum, och maskinen själv säger ingenting
om det. Långtidsgrenarna 5.10 och 5.15 beräknas t.ex. nå sitt i december 2026. Håll slutdatumet för
stödet i samma förteckning som serverns namn, och planera uppgraderingen en utgåva i förväg i
stället för vid tidsgränsen.

## Läs mer

- [About Linux Kernel](https://www.kernel.org/linux.html) — kärnprojektets egen korta beskrivning av
  vad Linux är och varför den som är ny vill ha en distribution.
- [Releases](https://www.kernel.org/category/releases.html) — huvudversioner, stabila kärnor och
  kärnor med långtidsstöd, med det beräknade slutet för varje långtidsgren.
- [The /proc Filesystem](https://docs.kernel.org/filesystems/proc.html) — där MemFree, MemAvailable
  och de andra minnesräknarna definieras.
- [Overcommit Accounting](https://docs.kernel.org/mm/overcommit-accounting.html) — de tre lägena för
  överallokering av minne och vad vart och ett lovar ett program.
- [Reporting regressions](https://docs.kernel.org/admin-guide/reporting-regressions.html) — regeln
  om ”inga regressioner” och hur du rapporterar ett fel så att det räknas.
- [Linux kernel licensing rules](https://docs.kernel.org/process/license-rules.html) — enbart
  GPL-2.0, och anmärkningen om systemanrop som lämnar program ovanpå kärnan fria.

<https://engineer.company/sv/glossary/linux/>
