Toistettava käännös tarkoittaa tietotekniikassa determinististä tietokoneohjelman käännöstä.[1][2]
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.[1] Tämä tarkoittaa kolmea asiaa:[1]
Tuotettavaan käännökseen voivat vaikuttaa käännöskomennot, työkalut (kuten kääntäjä, linkkeri ja kirjastojen versiot) ja käännösympäristö.[3] Toistettavuudella on merkitystä tietoturvaan kuten takaovien havaitsemiseen kuten Ken Thompsonin tunnetussa artikkelissa Reflections on Trusting Trust on osoitettu.[3][4]
Toistettavuudella voidaan varmistaa, että esimerkiksi jakelun kautta tuleva käännös vastaa alkuperäisen kehittäjän ohjelmaa.[5] Jakelupaketit voivat sisältää korjauksia ohjelmointivirheisiin ja tietoturvaan ja menetelmä on usein automatisoitu.[5] Kehittäjälle ja jakelijalle mahdollinen korruptoitumisen havaitseminen on tärkeää.[5] 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ä.[6]
Käännösjärjestelmät kuten Bazel, Gitian ja Meson pyrkivät deterministiseen toistettavuuteen.[7][8][9]
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.[5] Projekti on liittynyt Software Freedom Conservancy -järjestöön ja siihen liittyvät muut projektit kuten coreboot, Debian, Fedora, FreeBSD, NetBSD, openSUSE ja OpenWrt.[10][11][12] Linux Foundation on rahoittanut projekteja, jotka tähtäävät toistettavaan käännettävyyteen.[13]
Vuonna 1992 GCC-kääntäjään aloitettiin ristiinkääntäjätuki, joka ei vielä ollut täysin toistettava tuolloin.[14]
Debian-projekti on pyrkinyt koko jakelun toistettavaan käännökseen.[15] Vuonna 2013 projektin alkaessa 24 % Debianissa olevista ohjelmista kääntyi toistettavasti.[12] Maaliskuussa 2018 93 % Debian 10 (Buster) -julkaisun paketeista oli käännettävissä toistettavasti.[12]