Korduvdatavus on tarneahela omadus: samad deklareeritud sisendid peavad andma sama artefakti. VPN-kliendi puhul seob see väide allalaaditud paigaldaja lähtekoodi ja tööriistaketiga, mille saab igaüks uuesti ehitada. Teenuse kohta, millega klient ühendub, ei ütle see midagi.

Kasulik küsimus on seega kitsas ja vastatav. Kas projekt avaldab protseduuri, ja kas sinu konkreetne artefakt vastab sellele?

Kus ehitus lakkab olemast deterministlik

Kompilaatorid põimivad ajatempleid, absoluutseid teid ja ehitushostide nimesid, kui neile pole seda keelatud. Arhiivid registreerivad failide järjekorra ja muutmise ajad, linkijad muudavad väljundit tööriistaketi versiooni järgi ning paralleelne pakkimine võib plokke ümber järjestada. Ükskõik milline neist teeb kaks sama lähtekoodi ehitust baitides erinevaks, ilma et midagi kurjakuulutavat juhtuks. Determinism ehitatakse ehitusse sisse, seda ei pärita kunagi vaikimisi.

Projekt, mis väidab korduvdatavust, peab nimetama rakendatava normaliseerimise: fikseeritud ajatemplid, kaardistatud teed, sorditud arhiivikirjed, kinnitatud kompilaatori ja sõltuvuste versioonid. Ilma selle loendita ei saa kõrvalekallet tõlgendada, sest lubatud variatsiooni ruum on määratlemata.

Deklareeritud sisendid peavad samuti olema täielikud. Hoidla URL ilma sildita ei ole revisjon, hashita lukustusfail ei ole sõltuvuste hulk ning ehitusskript, mis laadib tööriista käitusajal alla, omab sisendit, mida keegi ei saa kinnitada. Iga lünk muutub hiljem erinevuseks. Enne millegi võrdlemist lõpetage loend, sest puudulik loend ei saa ebaõnnestuda viisil, mis midagi tähendab.

InputHow it driftsWhat pins it
SourceBranch moves after releaseCommit hash in the build metadata
ToolchainCompiler patch level differsContainer image digest
PackagingArchive order and mtimes varyNormalised archive settings

Mida võrdlus tegelikult kontrollib

Sõltumatu osapool ehitab deklareeritud keskkonnas uuesti ja võrdleb väljundit avaldatud artefaktiga. Bitikaupa identsus on tugev vorm; dokumenteeritud normaliseerimissamm, kus registreeritud erinevus pööratakse tagasi ja tulemused seejärel kattuvad, on nõrgem, kuid siiski kasulik vorm.

Võrdlus puudutab binaarfaili. Allkiri vastab teisele küsimusele: see seob väljalaske võtmega ja võtme identiteediga, ning projektil võivad olla kehtivad allkirjad artefaktidel, mida keegi pole ümber ehitanud. Kaks kontrolli kuhjuvad, selle asemel et teineteist asendada.

sha256sum wireguard-installer.msi
gpg --verify wireguard-installer.msi.sig wireguard-installer.msi

Käivitage mõlemad enne paigaldamist ja võrrelge räsi sellega, mis on avaldatud sama väljalaske ja platvormi jaoks. Tarnija lehega kattuv räsi tõestab, et allalaadimine saabus tervelt; ümberehitatud binaarfail, mis kattub tarnija avaldatud räsiga, tõestab midagi tugevamat selle kohta, kuidas see tehti.

Miks kõrvalekalle ei ole rikkumise tõestus

Enamik kõrvalekaldeid tuleb sisendist, mida keegi ei kontrollinud. Teistsugune kompilaatori paigaväljalase, silumissümbolitesse lekkinud ehitustee, sortimisjärjekorda muutnud lokaat või pärast võrdlust rakendatud pakkimissamm annavad kõik ausast tööst erineva räsi.

Seetõttu tuleb kõrvalekallet lugeda dokumenteeritud protseduuri vastu enne, kui sellest saab lugu. Kui protseduur kinnitab kõik ja erinevus jääb seletamata, on see tõeline leid, mida tasub projektile esitada. Kui protseduur vaikib pakkimisest, võib erinevus olla täiesti oodatav.

Sümmeetria loeb ka siin: vastavus ei tõesta, et lähtekood on defektideta, vaid ainult et binaarfail vastab sellele. Hästi auditeeritud kood ja korduvdatav kood on erinevad omadused ning projekt võib omada üht ilma teiseta.

Mida väide ütleb rakenduse taga oleva teenuse kohta

Klient on programm sinu seadmes; teenus on serverid, kontosüsteemid ja säilituspoliitikad mujal. Korduvdatavus piirab esimest ega ütle teise kohta midagi, ükskõik kui hoolikalt paigaldajat kontrollitakse.

Lõpp-punkti konfiguratsioon võib samuti pärast paigaldamist muutuda, kaugseadete või teenusepakkuja juhitava profiili kaudu. Need muudatused saabuvad võrgu kaudu ja neid ei kata ükski räsi, mille arvutasite enne ühendamist.

Lugege väidet selle tegelikus ulatuses ja seejärel kontrollige eraldi kõrvalküsimust: mida teenusepakkuja registreerib ja millise jurisdiktsiooni all ta päringutele vastab. Kontrollitud binaarfail ja kontrollimata teenus võivad eksisteerida kõrvuti ning täpselt see on juhtum, mille tarneahela kontroll on mõeldud nähtavaks tegema, mitte parandama.

Seotud artiklid