Linux-udviklere blåstempler dansk værktøj til fejlfinding i C-kode

Et danskudviklet fejlfindingsværktøj til C-kode er nu blevet integreret med udviklergrenen af Linux-kernen. En klar blåstempling, siger dansk forsker på projektet.

Udviklerne af Linux-kernen kan nu få hjælp af et dansk stykke software til at finde og rette fejl i styresystemets millioner af kodelinjer.

Det danskudviklede værktøj til automatiseret fejlfinding i C-kode, Coccinelle, er 14. juni blevet integreret i Linux-kernens særlige kildetræ for udviklere efter at have vist sit værd gennem mere end 600 fejlrettelser til koden i Linux-kernen.

»Det ser vi som en klar blåstempling fra udviklerne af Linux-kernen, og det betyder nok, at flere udviklere vil begynde at bruge Coccinelle fremover,« siger adjunkt ved Institut for Datalogi på Aalborg Universitet, Rene Rydhof Hansen.

Han har deltaget i forskningssamarbejdet om Coccinelle, som primært er udviklet af lektor ved Datalogisk Institut på Københavns Universitet, Julia Lawall, i et samarbejde med franske forskere.

Ikke direkte inklusion i kernen

Integrationen med Linux-kernen betyder ikke, at selve Coccinelle-koden nu er blevet inkluderet i kernen.

»Dét ville i princippet betyde, at alle ændringer til Coccinelle skulle godkendes af Linus Torvalds (den oprindelige udvikler af og øverste myndighed for Linux-kernen, red.),« forklarer Rene Rydhof Hansen.

I stedet er der tale om, at de såkaldte Make-filer, der angiver, hvordan Linux-kernen skal oversættes, nu har fået tilføjet funktionalitet, som gør det muligt for en kerne-udvikler at køre Coccinelle på et udviklersnapshot af kernen.

Coccinelle består af cirka 60.000 linjer OCaml-kode og kan bruges til automatisk fejlfinding og generering af patches, der kan udbedre fejlene i koden.

Linux-kernen er et projekt under løbende udvikling, hvor et hav af udviklere konstant bringer ny kode til og optimerer og udvider den eksisterende kodebase.

Hvis for eksempel en C-funktion omskrives til at tage to argumenter i stedet for ét, skal ændringen også gennemføres alle de steder, hvor funktionen kaldes.

Ændringen kan i princippet automatiseres med værktøjer som sed, der kan gennemsøge og foretage ændringer i eksempelvis kildekodefiler. Men hvis det nye argument til den pågældende C-funktion afhænger af konteksten, bliver det straks mere kompliceret at skrive sig ud af med eksempelvis sed.

Semantisk patching afløser simpel søg-erstat

For at løse problemet benytter Coccinelle sig af såkaldt semantisk patching.

Dermed er fejlrettelserne ikke reduceret til simpel søg-erstat eller lignende manipulationer på tekststrenge, men derimod baseret på, at Coccinelle kan genkende strukturer i C-programmer.

»Det unikke ved Coccinelle, at man et langt stykke hen ad vejen skriver en patch i C, men at det samtidig minder om det patch-format, Linux-udviklerne kender,« siger Rene Rydhof Hansen.

For at patche koden skriver programmøren derfor en patch i en fil, der gives med som input til Coccinelle-programmet sammen med de kildekodefiler, der skal patches.

Tanken er, at fundamentale ændringer i C-kode i store systemer som Linux-kernen skal kunne foretages fra centralt hold, hvorefter der frigives en patch, som andre udviklere kan bruge til at implementere samme ændring.

Hvis der for eksempel ændres i USB-API'et i Linux-kernen, kan den ansvarlige kerneudvikler skrive og gennemteste en Coccinelle-patch, som så kan frigives til de producenter, der skriver devicedrivere til kameraer, eksterne harddiske og anden USB-hardware.

Dansk Linux-udvikler: Godt værktøj til 'pedelarbejde'

Ifølge Rene Rydhof Hansen er Coccinelle stadig en forskningsprototype, men sådan behøver det ikke blive ved med at være.

»Det er som udgangspunkt et meget snævert specialistværktøj, men vi har lige nu nogle enkelte brugere af Coccinelle i industrien, og man kan sagtens forestille sig, at det kunne fungere som en engine i andre, mere brugervenlige værktøjer,« siger Rene Rydhof Hansen.

Den danske Linux-kerneudvikler Jens Axboe er bekendt med eksistensten af Coccinelle, selvom han ikke bruger værktøjet i sit eget arbejde med Linux-kernen.

Men værktøjet har uden tvivl sin berettigelse til at finde og patche de mest udbredte fejl og mangler i C-kode, siger han.

»De fleste patches skabt gennem Coccinelle falder ind under det, jeg vil kalde for 'pedel-arbejde' - altså at tjekke eksisterende kode igennem for typiske fejl og mangler,« skriver Jens Axboe i en e-mail til Version2.

Han afviser ikke, at han selv vil tage Coccinelle i brug fremover.

»Det er smart til ændringer, som for eksempel tilføjer eller fjerner parametre fra en meget brugt funktion, så jeg kunne sagtens finde på at bruge det i fremtiden,« fortæller Jens Axboe.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (7)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Jonas Hansen

Interessant værktøj.

Men et "fejlfindingstool" er det vist ikke. Compiler warnings fungerer fint til at finde fejlagtige funktionsargumenter.

Det her værktøj patcher API-kald.

Kernen er et ret cool sted at håndhæve sådan en disciplin da en API ændring jo ofte går ud over gud og hvermand.

  • 0
  • 0
Torben Mogensen Blogger

Coccinelle blev udviklet specielt til at håndtere ændringer i driver API'er. Når deres ændres i API'et, skal tusindvis af drivere skrives om til at håndtere ændringen, og de er ofte skrevet af mange forskellige mennesker. Så at kunne ændre driverne automatisk og systematisk til at passe til den nye API er en enorm fordel.

  • 0
  • 0
Jens Axboe

Men et "fejlfindingstool" er det vist ikke. Compiler warnings fungerer fint til at finde fejlagtige funktionsargumenter.

Det er ikke kun brugt til at finde og ændre argumenter til funktioner, det er også flittigt brugt til at finde feks glemte unlocks, dobbelte locks, forkert allokerings maske ved alloc under lock, checks for NULL som beviseligt ikke er NULL, etc. Jeg kunne blive ved. Så det er i høj grad også et "fejlfindings tool" udover at det er handy til at være sikker på at en API ændring dækker hele kilden.

  • 0
  • 0
Log ind eller Opret konto for at kommentere
IT Company Rank
maximize minimize