Сеть гостей: с 5,7 секунды до 2,8 — и две идеи, которые не выдержали замеров
Posted interrupts, one-shot-таймер, модерация прерываний приёма, offload, отображённые кольца — с замерами на железе; halt polling и задача для NIC не помогли.
x86-64 · arm64 · C++20 · Rust
nos — ядро операционной системы для x86-64 и arm64 на C++20, Rust и ассемблере. Оно загружается в QEMU, в облаках на KVM, на Apple Silicon и на выделенных серверах — и вырастает в облачный узел, который запускает гостевые Linux под собственным гипервизором на Rust.
$ ./scripts/qemu-arm64.sh
…
rust_test: passed
SoftIrq: initialized
part: 0 partitions on 1 disks
MountRootFs: mounted ramfs on / (rw)
nanofs: bad magic 0x0
MountRootFs: mounted procfs on /proc (ro)
tcp: initialized, up to 64 connections
udpshell: started on port 9000
boot: complete
_ _ ___ ____
| \ | |/ _ \/ ___|
| \| | | | \___ \
| |\ | |_| |___) |
|_| \_|\___/|____/
DHCP auto on eth0...
DHCP ip: 10.0.2.15
DNS resolver started, server: 10.0.2.3
$ █Linux написан на C — прекрасном языке, который оставляет программисту каждую проверку границ, каждое время жизни объекта и каждую блокировку, и так на десятках миллионов строк. Уязвимости в нём больше не приходят поодиночке.
CVE ядра Linux опубликовано в 2026 году к 22 октября — больше, чем за весь 2025-й (5 675)
из них — только за август и сентябрь; за весь первый квартал было 644
уязвимостей ядра Linux CISA добавило в 2026 году в каталог эксплуатируемых в реальных атаках
Искусственный интеллект сделал поиск ошибок дешёвым. В мае Линус Торвальдс написал, что непрекращающийся поток отчётов от ИИ сделал список рассылки по безопасности почти неуправляемым. В августе исправление, где ИИ-система указана соавтором, закрыло Vghost (CVE-2026-74580): устаревший кэш в vhost давал локальному пользователю root, а за виртуальным IOMMU позволял гостю писать за границы в процесс QEMU на хосте — сквозь тот самый слой, который гипервизор и должен держать закрытым.
≈ 90 000 строк
Около 90 000 строк кода на всё ядро с драйверами, сетевым стеком и файловыми системами и на гипервизор — не десятки миллионов. Его можно прочитать целиком, и его куда проще верифицировать.
63% Rust · 1,7% из них unsafe
63% кода — на Rust, и лишь 1,7% его строк лежат внутри unsafe-блоков: они сосредоточены в крейтах, которые касаются железа и C ABI, и пересчитываются при каждом изменении. Запись за границы, use-after-free и гонки данных в остальном коде просто не написать: в логике гипервизора — 4 места с unsafe на 18 929 строк.
4 фаззера на хосте, в CI
Четыре фаззера собирают для хоста исходники самого ядра — устройства и цикл исполнения гипервизора, сетевой стек, файловые системы, C++ под ASan и UBSan — и гоняются в CI на каждое изменение, а между изменениями идут долгие кампании.
UBSan · RUSTUB · W^X
Сборки с UBSan и проверками unsafe загружаются в CI на обеих архитектурах, у каждой подсистемы свой гейт, а нарушенный инвариант — это паника с указанием места, а не тихое зависание.
Linux никуда не уходит — он становится гостем. Меняется хост под ним, единственный слой, который не имеет права упасть: достаточно маленький, чтобы его проверить, и устроенный так, что целые классы его ошибок невозможно написать.
Источники: NVD: CVE от CNA kernel.org, например за сентябрь 2026 · linux-cve-announce · каталог CISA KEV · Линус Торвальдс, 17 мая 2026 · исправление Vghost (Assisted-by: tencentos-corvus-ai) · Tencent Zhuque Lab о Vghost · nos: scripts/sloc.py, scripts/unsafe-count.py
Ни неопределённого поведения, ни порчи памяти, ни гонок, ни взаимоблокировок, ни тихих отказов: каждое решение здесь выбирается прежде всего ради этого.
Разрабатывается в эмуляторах и облаках, проверяется на реальных машинах — у двух из них нет никакой консоли, кроме сети.
От ядра, которое загружается на серверах, к облачному узлу на голом железе: без Linux на хосте, с гостевыми Linux под гипервизором на Rust и с живым обновлением под ними.
nos загружается на реальных серверах и остаётся управляемым.
Новый код — на Rust, unsafe заперт в нескольких маленьких крейтах.
Слой переносимости и arm64 под QEMU и HVF — раньше гипервизора.
Гипервизор на Rust на AMD-V и VT-x загружает гостевые Linux.
HTTP API создаёт и удаляет виртуальные машины и открывает их консоли.
Ядро хоста заменяется под работающими гостями быстрее чем за 100 мс.
Posted interrupts, one-shot-таймер, модерация прерываний приёма, offload, отображённые кольца — с замерами на железе; halt polling и задача для NIC не помогли.
Очистка регистров, заполнение RSB, IBPB, IBRS, BHI_DIS_S, VERW: что гипервизор nos делает вокруг каждого VM exit, сколько это стоит и что ещё открыто.
Третий этап по git log: за месяц hv.ko прошёл путь от включения AMD-V до Alpine, Debian и многопроцессорных Linux-гостей на железе AMD и Intel.