Det fungerer ikke, det der med at spise elefanten én bid ad gangen.
I hvert fald når elefanten hedder software-fejl i gammel kode, som skal vedligeholdes.
Det synes Matthew Parkinson, som er forsker hos Microsoft, med en fortid som datalog på Cambridge-universitetet i England.
Han mener, at fremgangsmåden med at fikse enkelte fejl én af gangen i en stor kodebase ikke skalerer. Det fortalte han i et foredrag afholdt i sidste uge, arrangeret af UK Research and Innovation, som er et britisk partnerskab af universiteter, forskningsorganisationer, regering med mere.

Som man kan se på slidet til højre, stiger antallet af CVE-sårbarheder i Microsofts produkter år for år. Der er en mere end lineær stigning, og det skyldes ikke mindst, at firmaet forvalter en stor mængde gammel kode, skrevet i C og C++.
70 procent af sårbarheder er usikker hukommelse
Omkring 70 procent af de sårbarheder, Microsoft udstyrer med et CVE-nummer, skyldes problemer med usikker hukommelse. Det tal har ligget stabilt i de seneste 12 år.
Når Microsoft øger sin kodebase og benytter mere open source-software i sin kode, bliver dette problem ikke bedre, men værre.
Andre producenter, der også arbejder med C og C++, oplever det samme. Men de nye it-kæmper, som Google, Facebook og Amazon, har ikke helt samme problemer som Microsoft, hvis kode går mange tiår tilbage.
Der findes hukommelsessikre sprog som C# og Java, men C og C++ kan nogle tricks, som de sikre sprog ikke kan tilbyde i helt samme omfang.
C++ har nemlig dyder, der gør det attraktivt og undertiden helt uomgåeligt. Sproget er hurtigt, det kan køre med begrænset hukommelse og diskforbrug, det er et modent sprog, det har forudsigelig afvikling, og dets platform-uafhængighed er næsten uden sidestykke.
Endelig kræver det ikke nødvendigvis installation af andre biblioteker eller komponenter. Men som nævnt fører det også til fejl, der ofte handler om håndtering af hukommelse.
Microsoft har eksperimenteret med Rust til nye komponenter. Og det sprog byder på de fordele, som C og C++ har, men på en sikker facon. Men man har også kig på helt nye initiativer.
Dansk islæt
Firmaet kan ikke bare lægge den gamle kode bag sig, men ser i stedet på, hvordan koden kan gøres mere sikker.
Der findes nogle simple kneb til at rette fejl. Det kan eksempelvis være compilere, der initialiserer alle variable i kode skrevet i C og C++, beretter Matthew Parkinson i foredraget.
En anden fremgangsmåde er at se på sprogdesign og hvad Matthew Parkinson kalder for ‘compartmentalisation’.
Det vil sige at skære den gamle kode i bidder og putte dem i kasser, så sårbarhederne er skærmet af. Det kræver nyt sprogdesign, og det er her, projekt Verona kommer ind i billedet.
Det er et samarbejde mellem Microsoft og Cambridge-universitetet, og foredraget i sidste uge er første gang, Matthew Parkinson løfter sløret for projektet.
Han karakteriserer det som ‘et nyt sprog til sikker infrastruktur-programmering.’ Med i projektet er danske Mads Torgersen, der er den nuværende chefdesigner bag C# og tidligere datalog på Aarhus Universitet. Han har har bidraget til Verona med ideer til, hvorledes et godt sprog designes, fortæller Matthew Parkinson.
Læs også: Nej til null: Her er nyhederne i C# 8
Regioner i stedet for Rust
Problemfeltet hedder system-programmering, og det kan karakteriseres ved finkornet kontrol i forhold til resurser og følsomhed i forhold til latency, altså den tid, det tager at udføre en proces.
Det foregår tæt på maskinen, uden en abstraktion over hukommelsen, og uden typesikkerhed. Disse to forhold er usikre som udgangspunkt.
Løsningen er ifølge Matthew Parkinson at sige farvel til fælles adgang fra tråde til at ændre hukommelse, ‘samtidigt ejerskab’, der er en ny model til asynkron koordinering samt ‘lineære regioner’, som er et nyt bud på hukommelseshåndtering. De ikke så nemme koncepter er illustreret i grafikken øverst i denne artikel.
»Ejerskabsmodellen i Verona er baseret på ‘regioner,’ grupper af objekter. Det er ikke som i Rust, hvor den er baseret på et enkelt objekt. I C ++ har du pointers, og det er baseret på objekter, og det er stort set pr. objekt. Men det er ikke, hvordan jeg tror om data og programmer. Jeg tænker på en datastruktur som en samling af objekter. Og den samling af objekter har et livsforløb,« forklarer Matthew Parkinson.
»Så ved at tage ejerskab på niveauet for ejerskab af objekter kommer vi meget tættere på det abstraktionsniveau, som folk bruger, og det giver os muligheden for at opbygge datastrukturer uden at gå uden om sikkerheden.«
Der er endnu ingen offentlige eksempler på Verona, men koden vil blive frigivet som open source i løbet af de kommende uger, siger Matthew Parkinson.