Microsoft släpper egen C-version
Checked C heter en ny version av programspråket C och Microsoft släpper den nu som öppen källkod. Ambitionen är att minska risken för säkerhetshål orsakade av programmerarmisstag.
Ett av problemen med de maskinnära mjukvaruutvecklarnas favoritspråk C är att det erbjuder många möjligheter för programmerarmisstag att slinka igenom oupptäckta, medan de i andra språk skulle fångats av kompilatorn eller stoppat programmet under körningen.
Checked C ska åtgärda en del av dessa felmöjligheter, bland annat adressering utanför reserverat minnesutrymme och felaktig konvertering mellan olika datatyper.
Då kända sårbarheterna Shellshock, Heartbleed och Sandworm skulle enligt Microsoft ha stoppats av de extrakontroller som det är möjligt att göra i Checked C.
När programmeraren deklarerar en pekare – en variabel som lagrar minnesadresser – kan hen samtidigt ange vilken minnesområde som pekaren får referera till. När programmet körs blir det därmed möjligt att kontrollera att dessa gränser inte överträds.
Det här är inte första försöket att skapa en säkrare version av C. Microsofts eget språk C# stakar ut gränser för pekare på samma sätt, men språket har inte adopterats i samma utsträckning som C. Dessutom är kontrollerna obligatoriska i C# medan de är ett fritt tillval i Checked C eftersom det ibland av exempelvis prestandaskäl är nödvändigt att jobba utan skyddsnät av det slaget.
Microsoft hoppas att det faktum att det bara krävs minimalt med arbete för att skriva om ett C-program till ett Checked C-program, ska övertala utvecklare att använda det.
Microsoft har fått blodad tand genom att det tidigare med viss framgång har lyckats lansera Typescript, en variant av det populära webbläsarspråket Javascript.
Här är en funktion i Checked C som adderar två 2 x 2-matriser. Skillnaden mot C är nyckelordet ”checked”.
void add(int a checked[2][2], int b checked[2][2])
{
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
a[i][j] += b[i][j];
}
}
Här finns en definition av språket Checked C (pdf-länk)