Taustalla on Linux-maailman vanha ongelma. Suuri osa järjestelmäohjelmistoista on kirjoitettu C:llä, mutta Rust tarjoaa paremman suojan monia muistiturvallisuusvirheitä vastaan. Koko olemassa olevan C-koodin kirjoittaminen käsin uudelleen olisi kuitenkin hidasta, kallista ja riskialtista.
Canonicalin mukaan perinteiset C:stä Rustiin kääntävät työkalut pystyvät käsittelemään paljon koodia, mutta lopputulos säilyttää usein C:n rakenteet liian kirjaimellisesti. Rust-koodi saattaa kääntyä, mutta käyttää edelleen runsaasti unsafe-toimintoja ja vaatia paljon käsityötä.
Kielimallit taas osaavat tuottaa pienistä kokonaisuuksista siistiä ja Rustille luontevaa koodia, mutta niiden ongelmana ovat suuret ohjelmistovarastot ja ennen kaikkea luotettavuus. Hyvältä näyttävä Rust-koodi ei vielä tarkoita, että ohjelma toimisi täsmälleen kuten alkuperäinen C-versio.
Siksi Canonical ei aio jättää muunnosta pelkän tekoälyn varaan. Kehitteillä oleva järjestelmä jakaa ensin suuren koodivaraston sopiviin osiin niin, että tyyppien, riippuvuuksien ja ohjelman toiminnan kannalta tärkeä konteksti säilyy. Sen jälkeen kielimalli muuntaa C-koodin Rustiksi.
Seuraavassa vaiheessa uusi Rust-versio tarkistetaan alkuperäistä C-koodia vastaan. Menetelmissä on tarkoitus käyttää muun muassa fuzz-testausta ja formaalimpia vastaavuuden tarkistusmenetelmiä. Jos validointi epäonnistuu, järjestelmä yrittää paikantaa ongelman ja korjata käännöstä automaattisesti.
Canonical korostaa, että tekoälyn tuottamaa koodia pitää tässä prosessissa käsitellä epäluotettavana, kunnes sen on osoitettu säilyttävän alkuperäisen ohjelman toiminta.
Kolmivuotista tutkimushanketta rahoittavat Canonical ja UK Research and Innovation. Työtä johtaa Bristolin yliopiston professori Meng Wang.
Parhaassa tapauksessa hankkeen tuloksena syntyisi järjestelmä, joka pystyy muuntamaan satojatuhansia C-koodirivejä sisältäviä ohjelmistovarastoja Rustiksi suhteellisen vähällä käsityöllä ja samalla osoittamaan, että uusi versio käyttäytyy kuten alkuperäinen.




















