**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:

1. 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ä
2. käännöstyökalut ja käännösympäristö on voitava joko kirjata ylös tai määrittää etukäteen
3. 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
-------

1. 1 2 3  Reproducible builds *reproducible-builds.org*. Viitattu 22.12.2020. (englanniksi)
2. ↑  Reproducible builds *kernel.org*. Viitattu 22.12.2020. (englanniksi)
3. 1 2  Jake Edge: Reproducible builds *lwn.net*.  12.4.2017. Viitattu 22.12.2020. (englanniksi)
4. ↑  Ken Thompson: Reflections on Trusting Trust (PDF) *users.ece.cmu.edu*.  elokuu 1984. Viitattu 22.12.2020. (englanniksi)
5. 1 2 3 4  Emily Ratliff: How Combining Two Completely Separate Open Source Projects Can Make Us All More Secure *securityweek.com*.  4.4.2016. Viitattu 22.12.2020. (englanniksi)
6. ↑  Joseph Devietti: Introduction to Reproducible Builds *cloudseal.io*.  15.5.2019.  Arkistoitu 29.11.2019. Viitattu 23.12.2020. (englanniksi)
7. ↑
8. ↑
9. ↑
10. ↑  Reproducible Builds joins the Software Freedom Conservancy *reproducible-builds.org*.  8.11.2018. Viitattu 23.12.2020. (englanniksi)
11. ↑  Who is involved? *reproducible-builds.org*. Viitattu 23.12.2020. (englanniksi)
12. 1 2 3  Tom Yates: Toward a fully reproducible Debian *lwn.net*.  15.6.2018. Viitattu 22.12.2020. (englanniksi)
13. ↑  Supply Chain Integrity: The Role of Verified Reproducible Builds *bankinfosecurity.com*.  26.1.2021. Viitattu 22.3.2021. (englanniksi)
14. ↑  John Gilmore: SOURCE\_PREFIX\_MAP and Occam's Razor *lists.reproducible-builds.org*.  24.1.2017. Viitattu 22.12.2020. (englanniksi)
15. ↑

Aiheesta muualla
----------------

* You think you’re not a target? A tale of three developers… (englanniksi)