A reproducibilidade é unha propiedade da cadea de subministración: as mesmas entradas declaradas deben producir o mesmo artefacto. Para un cliente VPN, esa afirmación liga o instalador que descargaches co código fonte e as ferramentas que calquera pode recompilar. Non di nada sobre o servizo ao que se conecta o cliente.

A pregunta útil é, polo tanto, estreita e ten resposta. Publica o proxecto un procedemento, e coincide con el o teu artefacto concreto?

Onde unha compilación deixa de ser determinista

Os compiladores incrustan marcas de tempo, rutas absolutas e nomes dos equipos de compilación, salvo que se lles indique o contrario. Os arquivos rexistran a orde dos ficheiros e as horas de modificación, os ligadores varían a súa saída coa versión do conxunto de ferramentas, e a compresión en paralelo pode reordenar bloques. Calquera desas cousas fai que dúas compilacións do mesmo código fonte difiran en bytes sen que ocorra nada sinistro. O determinismo incorpórase ao deseño da compilación, nunca se herda por defecto.

Un proxecto que afirma reproducibilidade debe nomear a normalización que aplica: marcas de tempo fixas, rutas asignadas, entradas de arquivo ordenadas e versións fixadas do compilador e das dependencias. Sen esa lista, unha discrepancia non se pode interpretar, porque o espazo de variación lexítima non está definido.

As entradas declaradas tamén teñen que estar completas. Un URL de repositorio sen etiqueta non é unha revisión, un ficheiro de bloqueo sen hash non é un conxunto de dependencias, e un script de compilación que descarga unha ferramenta en tempo de execución ten unha entrada que ninguén pode fixar. Cada oco convértese despois nunha diferenza. Completa a lista antes de comparar nada, porque unha lista incompleta non pode fallar dun xeito que signifique algo.

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

Que comproba realmente a comparación

Unha parte independente recompila na contorna declarada e compara a saída co artefacto publicado. A identidade bit a bit é a forma forte; un paso de normalización documentado, no que unha diferenza rexistrada se inviste e os resultados coinciden despois, é a forma máis feble pero aínda útil.

A comparación refírese ao binario. Unha sinatura responde a outra pregunta: asocia unha versión cunha chave e unha chave cunha identidade, e un proxecto pode ter sinaturas válidas sobre artefactos que ninguén recompilou. As dúas comprobacións súmanse en lugar de substituírse.

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

Executa ambas antes de instalar e compara o hash co publicado para a mesma versión e plataforma. Un hash que coincide coa páxina do provedor demostra que a descarga chegou intacta; un binario recompilado que coincide co hash publicado do provedor demostra algo máis forte sobre como se fixo.

Por que unha discrepancia non é proba de manipulación

A maioría das discrepancias proveñen dunha entrada que ninguén controlou. Unha versión de parche distinta do compilador, unha ruta de compilación que se filtrou nos símbolos de depuración, unha configuración rexional que cambiou a orde de clasificación ou un paso de empaquetado aplicado despois da comparación producen todos un hash distinto do traballo honesto.

Por iso unha discrepancia debe lerse contra o procedemento documentado antes de converterse nunha historia. Se o procedemento fixa todo e a diferenza segue sen explicación, é un achado real que merece exporse ao proxecto. Se o procedemento cala sobre o empaquetado, a diferenza pode ser totalmente esperada.

A simetría tamén conta aquí: unha coincidencia non demostra que o código fonte estea libre de defectos, só que o binario se corresponde con el. O código ben auditado e o código reproducible son propiedades distintas, e un proxecto pode ter unha sen a outra.

Que di a afirmación sobre o servizo detrás da aplicación

O cliente é un programa no teu dispositivo; o servizo son servidores, sistemas de contas e políticas de retención noutro lugar. A reproducibilidade limita o primeiro e non di nada sobre o segundo, por moito coidado con que se verifique o instalador.

A configuración do punto final tamén pode cambiar tras a instalación, mediante axustes remotos ou un perfil controlado polo provedor. Eses cambios chegan pola rede e non quedan cubertos por ningún hash que calculases antes de conectarte.

Le a afirmación no seu alcance real e despois comproba por separado a pregunta contigua: que rexistra o provedor e baixo que xurisdición responde ás solicitudes. Un binario verificado e un servizo non verificado poden coexistir, e ese é exactamente o caso que unha comprobación da cadea de subministración está deseñada para facer visible, non para corrixir.

Artigos relacionados