Флагман · ParanoidBSD

Операционная система, где полномочия держат в руках, а не подразумевают

Почти любой взлом устроен одинаково: программа дотягивается до того, до чего не должна. ParanoidBSD — операционная система, построенная так, чтобы это было невозможно. Каждой программе выдаётся только то, что ей нужно, а всё остальное не просто запрещено — оно недосягаемо. Основана на HardenedBSD, переписана на современном C++, а оригинал лежит рядом, чтобы каждое изменение можно было с ним сверить.

ЯзыкC / C++23
БазовыйHardenedBSD 15-STABLE
Рабочий столKDE Plasma 6
Последняя отправканедавно
Звёзды—
Устройство репозитория
pbsd/Модули C++23 — ядро, порты пользовательского окружения, UDA, BIFROST, композитор, тема
hbsd/Исходники HardenedBSD 15-STABLE — оригинал, сохраняемый как спецификация
kde/Plasma 6, KWin и фреймворки для волны рабочего стола
tools/Инвентаризация, детерминированные проходы переписывания, агентный перенос, вспомогательные средства Clang
docs/Спецификации, модель безопасности, статус миграции, происхождение
scripts/Управляющий скрипт подсистемы Windows для Linux (WSL), сторожевой процесс, консоль прогресса
Простыми словами

Что это такое за минуту

Проблема

Операционная система лежит под всем остальным, что работает в организации. Большинство построено на коде, которому десятки лет, и любая программа может попросить что угодно — система решает уже потом, разрешить ли. Поэтому одна дыра в чём-то безобидном, например в коде, который рисует шрифт на экране, может закончиться кражей паролей.

Решение

ParanoidBSD меняет то, о чём программа вообще способна попросить. Вместо проверки прав после запроса каждой программе выдаётся короткий список того, к чему ей можно прикоснуться, и никакого способа назвать что-то ещё. Дыра в одной части перестаёт быть дорогой ко всему остальному.

Кому это нужно

Поставщики в обороне и госсекторе, от которых теперь требуют софт на более безопасных языках. Техника, которая годами стоит в поле и которую нельзя быстро обновить — заводские контроллеры, медицинские аппараты, оборудование коммунальных служб. Преподаватели и исследователи, которым нужна настоящая операционная система, достаточно небольшая, чтобы прочитать её целиком.

Безопасность не должна начинаться на уровне приложений. Она должна начинаться с операционной системы под ними. Дальше на этой странице — инженерия: что изменено, как это проверено и что ещё не сделано.
Проблема

Окружающие полномочия — это баг, который нельзя пропатчить

В обычном Unix процесс не владеет правом открыть /etc/master.passwd. Он просто просит, а ядро решает уже после, исходя из того, кем процесс себя объявляет. Любой процесс может назвать любой ресурс в системе. Пространство имён глобальное и окружающее; проверка приделана задним числом.

Именно поэтому одна ошибка разбора в отрисовщике шрифтов превращается в кражу учётных данных. Отрисовщику никогда не был нужен файл паролей — но в архитектуре ничто не помешало ему его запросить.

HardenedBSD здесь уже делает серьёзную работу: рандомизация размещения адресного пространства (ASLR), которая каждый раз загружает программу в другое место, так что атакующий не угадает, где что лежит; целостность потока управления (CFI), которая не даёт увести программу в код, для исполнения которого она не предназначалась; а рядом с ними меры из PaX, SafeStack и укреплённые распределители памяти. PBSD сохраняет всё это и меняет сам вопрос, который стоит ниже — от “разрешено ли это процессу?” к “есть ли у процесса дескриптор на это?”

Два способа ответить на один системный вызов

// Ambient authority — the traditional path
int fd = open("/etc/master.passwd", O_RDONLY);
// kernel walks a global namespace, then
// checks uid/gid/MAC after the fact

// Handle nucleus — the PBSD path
auto f = dir_handle.open("master.passwd", Rights::Read);
// there is no global namespace to walk.
// no handle, no name, no operation.

Иллюстративная форма различия, а не дословный перечень вызовов, которые программа делает в ядро — его интерфейса прикладного программирования, или API. Эталонная модель лежит в docs/.

Две модели полномочий бок о бок: при окружающих полномочиях процесс дотягивается до сокетов, exec и ptrace, а в файле паролей ему отказывают только после запроса; при ядре на дескрипторах назвать вообще можно только тот ресурс, на который у процесса есть дескриптор
прокрутите, чтобы увидеть всю схему →
Где происходит проверка. Слева запрос всегда доходит и оценивается уже после. Справа у трёх операций из четырёх нет имени, которым можно было бы попросить, так что и отказывать не в чем.
Интерактив

Проведите системный вызов через ядро

Выдайте процессу дескрипторы, выберите, что ему попробовать, и переключайтесь между двумя моделями полномочий. Вердикт и обоснование считаются прямо в вашем браузере — это учебная модель устройства, а не эмулятор ядра.

Ядро возможностей — монитор обращений

Процесс пытается…

Трассировка

Дескрипторы у процесса

Вердикт

Ожидание попытки
Выберите операцию, чтобы прогнать её через монитор.
Достижимо
0
Отказано
0

“Достижимо” считает, сколько из перечисленных операций этот процесс вообще может выполнить при текущей модели. При окружающих полномочиях достижимость определяется личностью процесса; при ядре — теми дескрипторами, которые у него реально есть.

Учебная модель устройства безопасности PBSD, написанная для этой страницы. Настоящее ядро лежит в pbsd/; спецификация — в docs/specs/.
Перенос

Четыре этапа и модель, которая никогда не удостоверяет себя сама

Перенести пользовательское окружение и ядро Berkeley Software Distribution (BSD) на C++23 вручную — это десять лет работы. Перенести, попросив языковую модель переписать файлы, — быстрый способ получить правдоподобный мусор. PBSD не делает ни того, ни другого.

Конвейер переноса ParanoidBSD: инвентаризация, детерминированные проходы, агентный цикл и барьер проверки, отклонённые файлы возвращаются в цикл
прокрутите, чтобы увидеть всю схему →
Как файл становится перенесённым файлом. Важна именно красная пунктирная ветка — работа, не прошедшая проверку, возвращается в цикл, а не засчитывается как прогресс.
Этап 1

Инвентаризация

tools/inventory_c_sources.py и clang_cxx23_port.py оценивают каждый файл на C по сложности и пишут c_inventory.csv. Об объёме работ ничего не угадывается.

Этап 2

Детерминированные проходы

run_todo_passes.py применяет безопасные механические переписывания на уровнях 0–4. Модель не участвует. Всё, от чего проход отказался, записывается в refusals.jsonl а не продавливается силой.

Этап 3

Агентный цикл

pbsd.py заполняет файлы-заглушки и отвергнутые файлы через DeepSeek Flash с эскалацией на Pro при максимальном усилии рассуждения — по умолчанию 48 воркеров Flash и 24 Pro. Именно это и финансирует Kickstarter.

Этап 4

Барьер проверки

Компиляция, ASan, UBSan, дифференциальное исполнение и сравнение на уровне промежуточного представления (IR) компилятора. Файл, который только компилируется, — непроверенный. Отказы попадают в agent_port_failures.jsonl.

Демон BSD показан дважды: слева оригинальный красный маскот, справа та же фигура, отрисованная голубым каркасом, между ними знак равенства
Проект на одной картинке. Тот же демон, та же форма, пересобранная в другом представлении — а знак равенства — это то, что нужно заслужить, файл за файлом, дифференциальной проверкой. BSD Daemon © Marshall Kirk McKusick.
Что должно означать “равно”

Перенос — это утверждение об эквивалентности

Сказать, что файл перенесён, значит сказать, что новый ведёт себя как старый. Это утверждение, а утверждениям нужны доказательства. Переписанный на C++23 файл, который компилируется, — это правдоподобно выглядящий каркас; это ещё не тот же самый демон.

Поэтому знак равенства и есть барьер. Дифференциальное исполнение запускает обе версии и сравнивает наблюдаемое поведение. Сверка IR проверяет, что для компилятора они значат одно и то же. Пока не пройдено ни то, ни другое, файл остаётся открытым в журнале миграции и не идёт в зачёт прогресса — как бы законченно он ни выглядел.

Правило, на котором всё это держится: модель не удостоверяет себя сама. Она предлагает; решают детерминированные инструменты. Каждое непререкаемое правило в репозитории существует ради того, чтобы эта граница оставалась целой — и поэтому же перенос нельзя просто ускорить, потратив больше на один только инференс.
Непререкаемые правила

Правила, которым репозиторий действительно подчиняется

Файл не готов, пока не пройдена дифференциальная проверка или сверка IR
«Компилируется» считается непроверенным. Перенесённый файл должен либо давать при дифференциальном исполнении наблюдаемое поведение, идентичное оригиналу из HardenedBSD, либо совпадать на уровне IR. Файлы, не прошедшие ни того, ни другого, остаются открытыми в журнале миграции и не входят в цифры прогресса.
Переносить точно — не “чинить” молча баги оригинала
Дерево HardenedBSD — это спецификация поведения. Если в оригинале есть дефект, перенос его воспроизводит, потому что дифференциальный тест не отличает исправление от регрессии. Улучшения делаются потом и записываются отдельно, чтобы изменение было видно и его можно было отревьюить, а не чтобы оно тонуло внутри перевода.
Сначала детерминированные инструменты; модели закрывают только остаток
Механические переписывания выполняют скрипты, которые ведут себя одинаково при каждом запуске. Модели применяются исключительно к остатку — заглушкам в инвентаре и файлам, от которых отказались детерминированные проходы. Так большая часть переноса остаётся воспроизводимой и проверяемой, а вывод модели ограничен теми местами, которые человеку всё равно пришлось бы писать руками.
C++ в ядре — freestanding: -fno-exceptions -fno-rtti
Ядро не может зависеть от hosted-среды выполнения C++. Никаких исключений, никакой информации о типах во время выполнения (RTTI), никаких путей стандартной библиотеки с выделением в куче на входе в ядро. Ограничения записаны в docs/specs/KERNEL_CXX_ABI.md чтобы участник мог понять, что допустимо в контексте ядра, не гадая.
У каждого модуля должна быть запись о происхождении, прежде чем он считается готовым
docs/PROVENANCE.md фиксирует, откуда взялся каждый модуль и под какой лицензией. Именно это делает заявление о лицензиях ниже проверяемым, а не декларативным — можно модуль за модулем посмотреть, какой код происходит из HardenedBSD, а какой является новой работой PBSD.
Лицензирование

Две лицензии, честно разделённые

Новый код PBSD — ядро, модули C++23, инструменты — предлагается на стандартных условиях Imortek: GNU Affero General Public License (AGPL-3.0+), бесплатно для личного использования, благотворительности, образования и организаций с доходом меньше 50 000 австралийских долларов (AUD) в год, с многоуровневой коммерческой лицензией выше этого порога.

Код, производный от HardenedBSD, остаётся под своей исходной лицензией BSD. Его нельзя перелицензировать, и Imortek этого не заявляет. docs/PROVENANCE.md — это запись о том, что к чему относится.

Полные условия лицензирования →
AGPL-3.0+ и коммерческая

Новая работа PBSD

pbsd/, tools/, scripts/, ядро возможностей, UDA, BIFROST, композитор и тема.

BSD (без изменений)

Производное от HardenedBSD

hbsd/ и каждый перенесённый файл, который к нему восходит. Исходные условия, исходное указание авторства.

Кому это нужно

Операционная система, в которую труднее влезть

Большинство взломов пользуется ошибкой одного и того же рода: программа дотягивается до памяти, которую трогать была не должна. ParanoidBSD пересобирает проверенную систему на языке, где такую ошибку сделать гораздо труднее, и выдаёт каждой программе только тот доступ, который ей действительно нужен.

01

Поставщики для оборонного и госсектора

Заказчики начинают требовать софт на языках, которые закрывают целые классы атак. Начинать заново с нуля — это десять лет. Здесь вместо этого переносится уже проверенная система и ведётся письменная запись по каждому изменённому файлу и по тому, как это изменение проверяли.

02

Оборудование, которое годами стоит в поле

Заводские контроллеры, медицинские аппараты, оборудование коммунальных служб. Когда всплывает уязвимость, выкатить обновление часто просто нельзя. Здесь ограничено, насколько далеко зайдёт тот, кто уже внутри, потому что ни одна программа не дотянется дальше того, что ей выдали.

03

Университеты и исследователи безопасности

Настоящая операционная система, достаточно небольшая, чтобы прочитать её целиком, и рядом лежит оригинал для сравнения. Годится для преподавания и для проверки идей на чём-то, что действительно работает.

Узнаёте здесь свою ситуацию? Сейчас всё это открыто для бета-тестирования, и отзывы тех, для кого это делается, действительно меняют систему. Стать бета-тестировщиком →
Kickstarter идёт · закрывается 12 ноября 2026

Перенос держится на вычислениях, которых у него нет

Детерминированные проходы бесплатны. Агентный цикл, который закрывает остаток — и проверочные прогоны, через которые он обязан пройти — нет. В этом вся просьба.