Toistettava käännös

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]

  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ö.[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]

  1. a b c Reproducible builds reproducible-builds.org. Viitattu 22.12.2020. (englanniksi)
  2. Reproducible builds kernel.org. Viitattu 22.12.2020. (englanniksi)
  3. a b 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. a b c d 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. https://bazel.build
  8. https://gitian.org
  9. https://mesonbuild.com/Reproducible-builds.html
  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. a b c 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. https://wiki.debian.org/ReproducibleBuilds

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]