惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
I
Intezer
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Hacker News: Ask HN
Hacker News: Ask HN
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
云风的 BLOG
云风的 BLOG
博客园_首页
V2EX - 技术
V2EX - 技术
T
Threat Research - Cisco Blogs
腾讯CDC
宝玉的分享
宝玉的分享
博客园 - 叶小钗
罗磊的独立博客
S
Securelist
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
博客园 - 司徒正美
W
WeLiveSecurity
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
NISL@THU
NISL@THU
N
News and Events Feed by Topic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
IT之家
IT之家

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
OptimaOS: архитектура Rust-ядра, которое загружается на реальном железе
ANTON62 · 2026-04-27 · via Все публикации подряд на Хабре

Уровень сложностиСложный

Время на прочтение8 мин

Охват и читатели0

Обзор

Центральная идея: одно ядро, runtime-профили

Проблема, которую решает OptimaOS — фрагментация через форкинг. Android — форк Linux. Embedded-дистрибутивы — форки с кастомными патчами под каждый SoC. AI-стеки — отдельные кодовые базы. Каждый форк — это отдельный security-аудит, отдельная команда и свой накапливающийся регресс.

POST UEFI MODE. MM_OK INTR_OK SCHED_OK` — это на реальном x86_64, не в QEMU.

POST UEFI MODE. MM_OK INTR_OK SCHED_OK` — это на реальном x86_64, не в QEMU.

Архитектурная ставка: один kernel-core binary для всех сценариев, а профильные различия — это runtime policy, не fork кодовой базы.

Это зафиксировано в ADR-0002 как Single Kernel + Runtime Profile Overlays. Разделение жёсткое:

Ядро (механизмы) — не меняется ни для какой конфигурации:

  • Memory manager + MMU page tables (PML4 → PDPT → PD → PT)

  • Scheduler (процессы, потоки, SMP)

  • IPC-шина с типизированными endpoint’ами

  • Capability-граф с квотами и TTL

  • Syscall ABI (optima_syscall_v0)

  • Page fault handler

Профили (политика) — меняются runtime:

  • Policy rules: что какому процессу разрешено

  • Запуск и параметры userspace-сервисов

  • Параметры планировщика (latency-first для home, throughput-first для server)

  • Разрешённые syscall-паттерны

На практике: один бинарь ядра, при старте загружается policy-файл, policy-service применяет его поверх. Пересборки ядра нет. Это не идеально — часть server-оптимизаций, которые затрагивают kernel semantics, требует отдельного ADR и пересборки. Но это управляемый компромисс.

Устройство ядра

kernel-core — одна Rust workspace crate, ~33K строк. #[forbid(unsafe_code)] — не рекомендация, а запрет компилятора. Весь unsafe изолирован в HAL-слое (hardware/mod.rs) и явно аннотирован. Итого ~600 строк unsafe на всё ядро.

Память

memory.rs — базовый менеджер: mmap/munmap/protect с флагами PROT_READ/WRITE/EXEC.

mm.rs — полные x86_64 page tables. Структура классическая: PML4 (level 4) → PDPT → PD → PT → 4KB страница. Реализованы PageFlags, PageTableEntry, PageTable, PML4, PageTableAllocator (512 страниц) и VirtualMemoryManager. Memory isolation levels по ADR-0008: Level 1 (Capability IPC) — готово, Level 2 (MPU Regions) — stub, Level 3 (MMU Page Tables) — готово.

page_fault.rs — обработчик страничных ошибок через interrupt vector #14. Разбирает PageFaultErrorCode (P/W/U/RSVD/ID биты), собирает статистику, подключён к runtime IDT.

Demand paging и Copy-on-Write — базовые структуры есть, полная реализация в планах.

IPC

Process A ──send(endpoint_B, data)──> IpcBus ──enqueue──> Process B
                                         │
                                    capability check
                                    type check
                                    rate limit
                                    audit log

Каждый endpoint имеет owner PID и очередь сообщений (VecDeque<Message>). Сообщение несёт from_pid, payload и список передаваемых capabilities — так что capabilities можно делегировать через IPC без обхода системы разрешений.

Производительность (QEMU-surrogate): p50 = 900ns, p95 = 1700ns, p99 = 2500ns, throughput = 904k req/s. Под нагрузкой (4 concurrent senders, 64-byte messages) прирост латентности — менее 2x. На реальном железе цифры будут другими, сейчас замеряем.

Безопасность IPC не опциональная:

  • Capability check — отправитель обязан иметь право на endpoint

  • Type check — тип сообщения верифицируется

  • Session-level и per-method rate limiting

  • Audit log на границах доверия

Capabilities

Capability — это struct:

pub struct Capability {
    pub id: CapId,
    pub owner_pid: u64,
    pub resource: Resource,      // Endpoint(u64) | MemoryRegion(u64) | Process(u64)
    pub permission: Permission,  // read / write / manage
    pub quota: ResourceQuota,
    pub created_at: u64,
    pub expires_at: Option<u64>, // TTL для временных
    pub priority: QuotaPriority,
    pub violation_count: u32,
}

ResourceQuota задаёт лимиты: max_memory_bytes (1 GB default), max_ipc_per_second (10K/sec), max_threads (256), max_file_handles (1024), max_capabilities (512).

Поведение при нарушении квоты — не crash, а деградация приоритета: High → Normal → Low → Degraded. Это защита от DoS на уровне ядра. Временные capabilities (create_temporary_capability с TTL) автоматически инвалидируются — не нужен garbage collector разрешений.

API CapabilityManager: grant, grant_with_quota, create_temporary_capability, revoke, transfer, inspect, check_quota, check_ipc_rate_limit, degrade_priority, update_quota, is_expired. 23 теста покрывают все ветки, включая boundary values и quota combinations.

Планировщик

Task states: Ready / Running / Blocked / Terminated.

Context switch: сохранение регистров → загрузка CR3 нового потока (если другое адресное пространство) → TLB flush → восстановление регистров → переход на новый стек.

SMP поддержка через SmpManager с PerCpuData, CpuInfo (family/model/stepping/features) и IPI (Inter-Processor Interrupts): Halt, Init, Call, Resched.

Политика планировщика меняется профилем: home → Interactive (приоритет интерактивным задачам), server → Throughput (максимизация пропускной способности). Syscall-уровень: sys.spawn, sys.exit, sys.sleep, sys.yield.

Boot chain: двухслойная архитектура

ADR-0003 фиксирует модель Hybrid Staged Console Integration. На первый взгляд — усложнение, на деле — чёткое разделение ответственности.

Stage A (UEFI shim): transport + diagnostics. Публикует input-события, рендерит output frames от runtime. Команды не исполняет — никакой бизнес-логики.

Stage B (kernel-core runtime): единственная точка исполнения команд. Один parser/dispatcher для host и device контуров.

Граница между ними — console_proto=v1. Shim передаёт input events в runtime, рендерит output frames. Несовместимые изменения протокола — только через новый major и ADR.

UEFI-код работает в привилегированном режиме с доступом к boot services. Граница между boot и runtime должна быть явной и верифицируемой — иначе аудит системы становится принципиально сложнее. Строгое разделение позволяет верифицировать каждый слой независимо.

Жизненный цикл: BootInit → ShimReady → RuntimeAttach → Interactive → Degraded

Failure policy зафиксирована: при деградации input path система остаётся bootable в diagnostics-mode. Runtime state не ломается от transport-level ошибок.

BootData ABI v2: передаётся реальная карта памяти (region list), не только агрегаты. Self-check handoff (SELFCHK) + коды ошибок — верификация передачи состояния между bootloader и ядром.

Linux ABI: поэтапно

linux-compat реализует маппинг Linux syscall’ов на optima_syscall_v0. Зависит от kernel-core явно — это единственное такое исключение.

L1: clone, exit, nanosleep, mmap, munmap, sendmsg, recvmsg, сигналы (минимум), epoll (минимум).

L2-A: fd lifecycle (open/close/read/write), dup/dup2, poll/epoll_wait.

L2-B: signal masks, pending queue.

L2-C: epoll_ctl(DEL/MOD), расширенная epoll-семантика.

129 тестов, 100% pass. Linux bridge API помечен как draft — это не стабильный публичный ABI. Стабильность будет объявлена отдельно.

Каждый новый syscall — расширение attack surface. Поэтому поэтапно, и каждый этап закрывается compatibility matrix тестами.

Userspace-сервисы

Сервисы не зависят от kernel-core как от библиотеки. Общение — только через typed IPC + capabilities.

Сервис

Что делает

policy-service

Применяет policy overlays, управляет runtime-правилами

device-manager

Управление устройствами, IOMMU домены

filesystem-service

Файловая система в userspace

network-service

Сетевой стек в userspace

profile-service

Управление профильными overlays

Такая структура — прямое следствие микроядерной архитектуры. Crash в filesystem-service не уронит ядро. Компрометация network-service не даёт доступ к capability-графу.

xHCI USB host controller driver реализован полностью и работает в QEMU.

Безопасность в ядре

Здесь не список фич, а архитектурные инварианты.

Capability-граф вместо root. Глобального root нет. Каждое действие требует явного capability с проверкой owner PID.

Typed IPC. Нельзя отправить неверный тип сообщения — это проверяется в ядре, не в userspace.

Quota-based DoS protection. Процесс, превышающий лимиты, деградирует по приоритету — не падает и не блокирует систему.

Tamper-evident audit log. Hash chain integrity для всех security-событий: AUTHZ_DENY, CAPABILITY_GRANT, CAPABILITY_REVOKE, IPC_AUTH_FAIL, POLICY_BYPASS_ATTEMPT, KERNEL_PANIC, SERVICE_CRASH_RECOVERY.

Crypto-service (stub). Криптография вынесена в отдельный userspace-сервис. Ядро знает только про capabilities. PqcAlgorithm enum — ML-KEM-512/768/1024 и ML-DSA-44/65/87. CryptoManager с генерацией ключей, KEM операциями, подписями, ротацией, перешифрованием legacy-файлов. 18 тестов, полная архитектура. Для production нужна интеграция с liboqs.

pub enum PqcAlgorithm {
    MlKem512, MlKem768, MlKem1024,  // NIST Level 1/3/5
    MlDsa44, MlDsa65, MlDsa87,      // NIST Level 2/3/5
}

pub struct CryptoManager {
    keys: Vec<CryptoKey>,
    policy: CryptoPolicy,  // AllAllowed | PqcOnly | PqcMinimumLevel
    stats: CryptoStats,
}

Потенциал этой архитектуры в том, что миграция с ECDSA на ML-KEM — это обновление одного userspace-бинарника без пересборки ядра. В монолитном ядре это потребует обновления ядра, lsass, защищённых процессов и замены прошивок.

Лицензия: GPL-3 + dual licensing

Изначально в плане была MIT/Apache. В итоге выбрана GPL-3 плюс отдельная коммерческая лицензия — dual licensing.

Почему GPL-3, а не MIT:

Copyleft на уровне ядра работает иначе, чем в обычных библиотеках. Если кто-то берёт kernel-core, модифицирует и встраивает в устройство — GPL-3 обязывает публиковать изменения. Именно это защищает от сценария, который проект пытается решить: форк без обратного вклада. MIT не защищает — вендор возьмёт ядро, добавит тысячу патчей под свой SoC и навсегда уйдёт в закрытую ветку.

Ещё одно отличие GPL-3 от GPL-2 — anti-tivoization (Section 3). GPLv2 позволяет производителю залочить hardware через secure boot так, что пользователь не может запустить модифицированное ядро на своём же устройстве. GPL-3 это запрещает. Для проекта, который целится в Edge и IoT, это не абстракция.

GPL-3 содержит явный патентный грант — распространяя код, вы предоставляете получателям права на патенты, которые могут быть нарушены этим кодом. MIT такой защиты не даёт.

Почему при этом нужна коммерческая лицензия:

GPL-3 закрывает путь компаниям, которые хотят встроить OptimaOS в проприетарный продукт без обязательства публиковать изменения. Это реальный барьер для части потенциальных пользователей — особенно в промышленных и embedded-сценариях, где исходный код прошивки не принято публиковать. Dual licensing решает это: community получает GPL-3, коммерческие пользователи платят за право не публиковать изменения.

Схема стандартная: так работают Qt, MySQL, MongoDB.

CLA для контрибьюторов:

Dual licensing требует единого правообладателя — иначе нельзя выдавать коммерческую лицензию на чужой код. Поэтому все контрибьюторы подписывают CLA (Contributor License Agreement): они сохраняют авторские права на свой код, но предоставляют проекту право перелицензировать его в том числе под коммерческой лицензией. Без CLA, принятого до первого внешнего патча, dual licensing становится юридически невозможным.

Это зафиксировано в CONTRIBUTING.md и README.md до публичного открытия репозитория.

Текущий статус

Компонент

Статус

Kernel-core (memory + MMU, scheduler, IPC, capability, syscall)

Рабочий прототип

Home / Server профили

Готово

Linux ABI L1 + L2 (129 тестов)

Готово

Page tables x86_64 (PML4→PT, page fault handler)

Реализовано

xHCI USB host controller

Полная реализация (QEMU)

UEFI bootloader + BootData v2 ABI

Готово

Boot на реальном x86_64

Работает

Hardware interrupts (PIC/PIT/IDT, hardware ticks)

Работает

Scheduler в post-UEFI hardware runtime

Работает

GUI framework (Desktop, Start Menu, File Browser)

Базовая реализация

Crypto-service (PQC)

Stub, полная архитектура

Physical security (IOMMU, MemoryZeroize)

Stub, полная архитектура

On-device smoke harness (task execution)

В процессе

847 тестов, 100% pass.

P0 performance baseline (QEMU, февраль 2026):

  • IPC p95 ≤ 25 µs, context-switch p95 ≤ 35 µs

  • Throughput ≥ 30k req/s, tail p99 ≤ 80 ms

Реальные числа с железа — следующая точка данных.

Планы

Ближайшее — реальный task execution на железе. Scheduler показывает модель (TASK1…TASK4, RUN/RDY/SLP), но не запускает реальные задачи. Следующий шаг — task execution с IPC между процессами на физическом устройстве. Это закрывает on-device smoke harness.

Декомпозиция kernel-модулей. runtime_scheduler.rs уже вынесен, runtime_arch.rs начат. Hardware bring-up показал, где границы нечёткие — это исправляется.

Linux L2 completion. L2-C реализован, следующий рубеж — signalfd/eventfd. После стабилизации — Android Binder IPC на optima_syscall_v0 в backlog.

Публикация кода. Репозиторий подготовлен: LICENSE (GPL-3.0), README, CONTRIBUTING, SECURITY, CODEOWNERS, .github templates. Публичный Git — после прохождения stable hardware milestone с реальным task execution.

Дальше — Win32 L3. Это самый сложный слой, далёкая перспектива. Но архитектура уже рассчитана под него.

Глобальная цель: проверить гипотезу — один kernel binary, работающий с разными профилями на десктопе, сервере и Edge-устройстве без деградации производительности. Boot chain на реальном железе — первая точка данных. Реальный task execution — следующая.

Код на Github выложил — https://github.com/dev993848/optimaos

P.S. Сразу говорю к разработке, написанию документации и статьи, наравне со мной, приложили руку такие иностранные партнеры как Claude и Codex, а также наши китайские друзья DeepSeek, Qwen, GLM и другие)