Toistettava käännös

Toistettava käännös tarkoittaa tietotekniikassa determinististä tietokoneohjelman käännöstä.

Lähdekoodin käännöksen on aina tuotettava identtiset tulokset ja useiden kolmansien osapuolien on voitava varmistaa ja tulla yhteiseen johtopäätökseen ”oikeasta” tuloksesta. Tämä tarkoittaa kolmea asiaa:
 käännösjärjestelmän on oltava deterministinen: tulokseen ei lisätä käännöksen ajankohtaa ja tuloste on aina tehtävä samassa järjestyksessä
 käännöstyökalut ja käännösympäristö on voitava joko kirjata ylös tai määrittää etukäteen
 käyttäjien on voitava tehdä mahdollisimman oikeanlainen käännösympäristö, suorittaa käännös ja tarkistaa, että tulos vastaa alkuperäistä

Tuotettavaan käännökseen voivat vaikuttaa käännöskomennot, työkalut (kuten kääntäjä, linkkeri ja kirjastojen versiot) ja käännösympäristö. Toistettavuudella on merkitystä tietoturvaan kuten takaovien havaitsemiseen kuten Ken Thompsonin tunnetussa artikkelissa Reflections on Trusting Trust on osoitettu.

Toistettavuudella voidaan varmistaa, että esimerkiksi jakelun kautta tuleva käännös vastaa alkuperäisen kehittäjän ohjelmaa. Jakelupaketit voivat sisältää korjauksia ohjelmointivirheisiin ja tietoturvaan ja menetelmä on usein automatisoitu. Kehittäjälle ja jakelijalle mahdollinen korruptoitumisen havaitseminen on tärkeää.
Kääntäjät voivat lisätä käännöksen aikana ylimääräistä tietoa kuten väliaikaisten tiedostojen nimet tai tiedostopolkuja virheenjäljitykseen käytettävään tietoon, joka aiheuttaa peräkkäisten käännöksien olevan erilaisia vaikka lähdekoodi ei muutu käännösten välillä.

Käännösjärjestelmät kuten Bazel, Gitian ja Meson pyrkivät deterministiseen toistettavuuteen.

Reproducible Builds -projekti kehittää työkaluja erikseen tuotettujen pakettien vertailuun, korjaa työkalujen ongelmia ja työskentelee kehittäjien kanssa korjatakseen ongelmia, jotka voivat haitata toistettavuutta. Projekti on liittynyt Software Freedom Conservancy -järjestöön ja siihen liittyvät muut projektit kuten coreboot, Debian, Fedora, FreeBSD, NetBSD, openSUSE ja OpenWrt. Linux Foundation on rahoittanut projekteja, jotka tähtäävät toistettavaan käännettävyyteen.

Historia 
Vuonna 1992 GCC-kääntäjään aloitettiin ristiinkääntäjätuki, joka ei vielä ollut täysin toistettava tuolloin.

Debian-projekti on pyrkinyt koko jakelun toistettavaan käännökseen. Vuonna 2013 projektin alkaessa 24 % Debianissa olevista ohjelmista kääntyi toistettavasti. Maaliskuussa 2018 93 % Debian 10 (Buster) -julkaisun paketeista oli käännettävissä toistettavasti.

Lähteet

Aiheesta muualla 
 You think you’re not a target? A tale of three developers… 

Tietoturva
Ohjelmistotuotanto