remi-jacquaint-0uoz5nC-guM-unsplash

Rostig kod är bra kod!

Det minnessäkra språket Rust är skapat för att bygga snabba program utan säkerhetshål.

Sedan tidernas begynnelse (alltså ca 1970) har C, och senare C++, använts för att bygga både små program och stora system. Språken är snabba och fungerar på i princip vilken elektrisk apparat som helst. Allt från operativsystem och datorspel ner till displayen på din tvättmaskin är ofta skrivet i C och/eller C++. Men nu kanske detta är på väg att ändras?

En majoritet av alla säkerhetshål som upptäcks (och även utnyttas av hackers) är inte de vi oftast pratar om. DDoS, Phishing, XSS, SQL Injection osv. kan orsaka stora skador för den som drabbas och när attackerna lyckas kan det bli stora rubriker. Men dessa är ändå i minoritet. De flesta säkerhetshål kommer istället från felaktig minneshantering i program. Detta vill skaparna av Rust ändra på.

Minnessäker kod

Den 24 februari 2024 skickade vita huset ut en rapport där de rekommenderade användningen av minnessäkra programmeringsspråk. Det här är alltså inte längre en smal diskussion mellan utvecklare utan ett ämne som USA:s regering ger sig in i. Men vad handlar det om då?

Alla datorprogram, stora som små, behöver minne. I minnet lagras olika variabler och datamängder. Program som körs på samma maskin har då lagrat information i samma minne men med olika adresser. Här kan det dock lätt bli tokigt. Säg att ett program sparar en lista med 20 datapunkter i minnet. Sedan försöker programmet läsa informationen på plats 21. Här kan då ditt program läsa data som egentligen tillhör ett helt annat program. Något förenklat var det i princip detta som hände 2014 när "Heartbleed" upptäcktes där bland annat miljoner patientjournaler i USA stals.

Det är här som de minnessäkra språken, som t ex Rust, kommer in.

Skulle jag kunna låna en kopp minne?

För att undvika att programmets minne används felaktigt kommer Rusts kompilator gå igenom all kod och säkerställa att allt minne hanteras korrekt. Detta görs genom att varje del av programmets minne måste ägas av en specifik funktion. En annan funktion kan ta över ägandeskapet men då kan inte den första funktionen längre läsa eller skriva till det minnet längre. Så fort minne inte längre ägs av en funktion så försvinner det automatiskt. Funktioner kan dessutom låna minne av varandra. Detta måste då programmeras korrekt så minnet kan hanteras på ett säkert sätt.

Allt detta hanteras av Rusts kompilator, mer specifikt av kompilatorns "Borrow checker". Har du gjort en miss någonstans eller glömt att deklarera att i just det här fallet så ska minnet lånas ut hit eller dit så kommer ditt program inte att kompilera. Detta kommer att hända ofta som ny Rust-utvecklare! Det är inte ovanligt att utvecklare klagar på att de behöver brottas med Borrow-checkern men även om det kan vara frustrerande beror det ju på att det upptäckts kod som kan leda till buggar eller säkerthetshål.

Det går självklart att göra allt detta korrekt i C och C++ men det kräver mycket tid och erfarenhet (även erfarna utvecklare gör fel ibland!). Med Rust får du allt detta från ruta ett!

Säkert, check! Men annars då?

Det finns många minnessäkra språk. Till exempel Java, C# och Python som är betydligt mer populära än Rust. Så varför byta till Rust?

Språken ovan har alla en sak gemensamt: De kräver en speciell runtime för att ens kunna köras. För att köra ett program skrivet i Java måste du ha Java-plattformen installerad. Den plattformen hanterar minnesallokering och tar bort minne som inte längre används så du som utvecklare inte behöver tänka på det. Beroende på var koden ska köras är det inte säkert att plattformen finns eller ens kan installeras. Rust kan, precis som C/C++, köras i princip var som helst.

Rust är dessutom är väldigt trevligt språk att programmera i. Rust ärver många egenskaper från funktionell programmering vilket gör att state-hantering är betydligt enklare att arbeta med. Andra godbitar som pattern-matching, traits och total avsaknad av null gör att koden som skrivs blir lätt att läsa, förstå och återanvända. Rusts egna linter "Clippy" hjälper dig att skriva korrekt och strukturerad kod. Att det dessutom finns en stort bibliotek av färdiga paket att inkludera i din kod är som grädde på moset.

Detta är förstås en högst subjektiv åsikt men det är många som håller med! Data från Stack Overflows enkät från 2024 visar att Rust är det mest hyllade språket idag.

Så, vad väntar du på? Läs mer om språket och hur du kommer igång på Rusts hemsida!