Arranque de cero: cómo las compilaciones bootstrappables eliminan los binarios no confiables

Bootstrappable Builds: How and Why

En FOSSY 2026, Timothy Sample explicó el concepto de compilaciones bootstrappables, un método para construir sistemas completos desde un código fuente mínimo sin depender de binarios precompilados. A diferencia de las compilaciones reproducibles, que verifican que un binario coincide con su código fuente, las bootstrappables buscan eliminar la necesidad de confiar en artefactos preexistentes, cerrando así la puerta a ataques como el descrito por Ken Thompson en 'Reflections on Trusting Trust'. Sample detalló los desafíos, como la lentitud de las cadenas de compilación de Rust, y destacó proyectos como GNU Guix y live-bootstrap, que reducen la semilla inicial a unos pocos cientos de bytes.

Básicamente estamos haciendo compiladores de C con el iniciador de Dennis Ritchie traído de Bell Labs.
  1. 0xDEAFBEAD

    Seguramente con la IA debería ser posible ir en la dirección opuesta, y usar software de ingeniería inversa para reconstruir algo parecido al código fuente original, y comprobar automáticamente si hay diferencias de funcionalidad. Así solo tendrías que confiar en tu software de ingeniería inversa (y en tu entorno de sistema, supongo). ¿Sería eso más fácil?

  2. robalni

    Estoy trabajando en un proyecto que será como un entorno completo arrancado desde el principio más pequeño posible. Pensé que un conversor de hexadecimal a binario como hex0 era demasiado parecido a código máquina, y quería que todo fuera código fuente, así que elegí empezar con un lenguaje interpretado super simple que se describe en inglés y se supone que el usuario escribe un intérprete para él mismo de la manera que quiera. De esta manera conecto al humano con la computadora usando el lenguaje del humano, lo cual me pareció que se sentía mejor y era más fácil de entender. Este lenguaje interpretado super simple luego construye un ensamblador RISC-V super simple. Aquí se me ocurrió una técnica bonita donde las funciones del ensamblador se llaman a través de punteros, lo que las hace reemplazables mientras el ensamblador está en ejecución. Así que en cuanto el ensamblador ha compilado una versión mejor de una de sus propias funciones, esa función se reemplaza con la versión mejor mientras el ensamblador está en ejecución y continúa compilando el resto del código que puede entonces usar las nuevas características. Así evoluciona sin tener que reiniciar.

  3. moring

    > El programa hex0 proporciona una manera de convertir una cadena de texto hexadecimal en un binario con esos bytes.

    Usaré esto para pedir una explicación sobre la idea fundamental: ¿En qué es mejor el texto hex que un blob binario? Ambos necesitan conocimiento detallado para entenderlos; ambos necesitan una herramienta para mostrarlos (leyendo ASCII o binario), cualquiera de las cuales podría estar comprometida en un sentido de 'confiar en la confianza'.

    Me parece que los aspectos realmente importantes de la 'semilla' inicial son su tamaño (más grande es más difícil de verificar) y que el lenguaje utilizado (ya sea Lisp, código máquina binario o lo que sea) tenga una semántica rigurosamente definida.

    (De manera ortogonal, querrías almacenar todo, la semilla y el resto, en un medio que no pueda ocultarte nada, y usarlo como fuente. Pero eso se aplica a todos los enfoques).

  4. lrvick

    Hemos arrancado completamente desde el código fuente nuestra distribución 100% determinista, firmada por quórum, nativa de LLVM/musl y nativa de contenedores desde el primer día gracias al increíble trabajo de este equipo. Las compilaciones bootstrappables desbloquearon stagex, que desbloquea arranques atestiguables de forma remota que pueden recorrer la cadena de confianza desde un arranque de servidor en vivo hasta hex0.

    https://stagex.tools

    https://codeberg.org/stagex

    https://distrust.co/blog/enclaveos.html

    https://caution.co/

  5. andrewchambers

    Me encantaría ver a alguien intentar automatizar la cadena de arranque desde un compilador C89 funcional hasta Rust.

    En este punto creo que los LLMs actuales pueden ayudar en estas increíbles hazañas de arranque, ya que pueden soportar los tiempos de compilación increíblemente largos durante varios días/semanas.

    Soy muy optimista sobre las compilaciones deterministas en general.

Más de este día

2026-08-28