Bootstrappable builds: от нуля до современного Linux без готовых бинарников

Bootstrappable Builds: How and Why

На FOSSY 2026 Тимоти Сэмпл рассказал о bootstrappable builds — подходе, при котором весь пользовательский Linux собирается из крошечного начального кода, а не из готовых бинарников. Это отличается от reproducible builds и защищает от атак в духе «Reflections on Trusting Trust» Кена Томпсона, когда вредоносный код скрыт в компиляторе. Сэмпл объяснил, как такие проекты, как GNU Guix и live-bootstrap, сокращают цепочку сборки до 256 байт, и обсудил методы преодоления проблем самодостаточных инструментов, включая «археологические раскопки» и создание специальных компиляторов вроде mrustc.

«Мы, по сути, создаём C-компиляторы с помощью закваски Денниса Ритчи, привезённой из Bell Labs».
  1. 0xDEAFBEAD

    Наверняка с помощью ИИ можно пойти в обратном направлении и использовать программное обеспечение для обратной разработки, чтобы восстановить что-то вроде исходного кода, и автоматически проверять различия в функциональности. Тогда вам нужно доверять только вашему ПО для реверс-инжиниринга (и, полагаю, вашей системной среде и т.д.). Было бы это проще?

  2. robalni

    Я работаю над проектом, который будет похож на целую среду, загружаемую с самого маленького возможного начала. Я подумал, что hex-в-бинарный конвертер, такой как hex0, слишком похож на машинный код, и я хотел, чтобы всё было исходным кодом, поэтому я выбрал вместо этого начать с суперпростого интерпретируемого языка, описанного на английском, и пользователь должен написать для него интерпретатор самостоятельно, любым способом. Так я соединяю человека с компьютером с помощью человеческого языка, что, как мне показалось, лучше и легче для понимания. Этот суперпростой интерпретируемый язык затем собирает суперпростой ассемблер для RISC-V. Здесь я придумал хороший приём, когда функции в ассемблере вызываются через указатели, что делает их заменяемыми во время работы ассемблера. Так что как только ассемблер скомпилирует лучшую версию одной из своих собственных функций, эта функция заменяется на лучшую версию, пока ассемблер работает, и он продолжает компилировать остальной код, который затем может использовать новые возможности. Так он развивается без необходимости перезапуска.

  3. moring

    > Программа hex0 предоставляет способ превратить строку шестнадцатеричного текста в бинарный файл с этими байтами.

    Я воспользуюсь этим, чтобы спросить об объяснении основной идеи: чем шестнадцатеричный текст лучше бинарного блоба? Оба требуют детальных знаний для понимания; оба нуждаются в инструменте для отображения (чтение ASCII или бинарного), любой из которых может быть скомпрометирован в смысле «доверие доверию».

    Мне кажется, что действительно важными аспектами начального «семени» являются его размер (больше — сложнее проверить) и то, что используемый язык (будь то Lisp, бинарный машинный код или что-то ещё) имеет строго определённую семантику.

    (Ортогонально этому, вы хотели бы хранить всё, семя и остальное, на носителе, который не может ничего от вас скрыть, и использовать его как источник. Но это применимо ко всем подходам.)

  4. lrvick

    Мы с самого первого дня полностью загружали наш 100% детерминированный, подписанный кворумом, нативный для LLVM/musl и контейнеров дистрибутив именно таким образом, благодаря невероятной работе этой команды. Bootstrappable builds открыли stagex, который открывает удалённо аттестуемые загрузки, позволяющие проследить цепочку доверия от живой загрузки сервера вплоть до hex0.

    https://stagex.tools

    https://codeberg.org/stagex

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

    https://caution.co/

  5. andrewchambers

    Хотелось бы увидеть, как кто-то попробует автоматизировать цепочку загрузки от работающего компилятора C89 до Rust.

    На данный момент я думаю, что современные LLM способны помочь в этих невероятных подвигах загрузки, так как они могут выдавать невероятно долгое время сборки в течение нескольких дней/недель.

    Я очень оптимистичен насчёт детерминированных сборок в целом.

Ещё за этот день

2026-08-28