Заметки по сборке ядра 🧠
(Инструментация с учетом RTT, не переписывание ядра)
NawderOS не заменяет ядро Linux.
Он слегка инструментаризует его.
В этом документе описывается где находятся хуки, согласованные с RTT, что они наблюдают и что они намеренно не делают.
Если вы можете собрать пользовательское ядро Linux, вы можете собрать NawderOS 🙂
Философия дизайна#
Перед тем как касаться кода, несколько основных правил:
- Мы наблюдаем, мы не контролируем
- Мы излучаем сигналы, мы не навязываем политику
- Мы предпочитаем точки отслеживания логике
- Мы сохраняем патчи маленькими и читаемыми
RTT — это о согласованности во времени — а не о добавлении хитрых поведений в ядро.
Поддерживаемая базовая версия ядра#
NawderOS в настоящее время нацеливается на:
- Linux 6.x (предпочтительно LTS)
- Исходный код ядра Vanilla
- Не требуются зависимости вне дерева
Если вы можете собрать стандартное ядро, вы уже на 90% на правильном пути.
Где NawderOS подключается 🔧#
NawderOS касается только нескольких стратегических мест:
1️⃣ Путь загрузки (init/)#
Цель: Проверка выравнивания подложки
- Запись версии ядра, хеша конфигурации и параметров загрузки
- Выдача значка
SUBSTRATE_BASELINE - Без ветвлений, без путей сбоя
🙂 Это отвечает на вопрос: “Что мы на самом деле загрузили?”
2️⃣ Границы планировщика (kernel/sched/)#
Цель: Обернуть проверки переходов контекста
- Наблюдать за переключениями задач
- Собирать минимальные метаданные (PID, состояние, временная метка)
- Выдавать
WRAP_CHECKзначки только при аномалиях
🙂 Нам не важно, кто выполняет — нам важно, когда переходы отклоняются.
3️⃣ Границы доступа к памяти (mm/)#
Цель: Наблюдение за коридором валидации
- Подключение к существующей логике ошибок или границ
- Обнаружение доступа вне объявленных коридоров
- Выдача
CORRIDOR_BREACHзначков
🙂 Это не защита памяти — это осведомленность о памяти.
4️⃣ Жизненный цикл модуля (kernel/module/)#
Цель: Обнаружение дрейфа Substrate
- Наблюдать за загрузкой/выгрузкой модуля
- Сравнивать с заявленными ожиданиями
- Выдавать
SUBSTRATE_DRIFTзначки в случае несоответствия
🙂 “Система изменилась под нашими ногами?”
Как выдаются значки 🏷️#
Значки — это события, а не журналы.
Первоначальные реализации могут использовать:
trace_printk- точки трассировки
- или простой кольцевой буфер
Поздние версии могут предоставлять:
/proc/nawderian- интеграцию
tracefs - коллекторы пользовательского пространства
Правила эмиссии значков#
- Только добавление
- Без блокировок
- Без побочных эффектов
- Без политических решений
Если эмиссия значка может привести к сбою системы, не эмитируйте его 😄
Что NawderOS не делает ❌#
Чтобы все было разумно:
- Нет перехвата системных вызовов
- Нет изменения планировщика
- Нет изменений в выделении памяти
- Нет обеспечения безопасности
- Нет настройки производительности
Это инструментирование, а не вмешательство.
Минимальная стратегия патчей 🧩#
Хороший патч ядра NawderOS должен:
- Затрагивать как можно меньше файлов
- Быть читаемым за одно сидение
- Удаляться без повреждения ядра
- Компилироваться без ошибок с отключенным RTT
Если ваш патч кажется «умным», вероятно, его слишком много.
Этапы сборки (Высокий уровень)#
- Клонировать ванильное ядро Linux
- Применить набор патчей NawderOS
- Включить флаги RTT в
.config - Собрать ядро как обычно
- Загрузить и наблюдать за выводом значка
Подробные команды находятся в INSTALLATION.md.
Отладка и безопасность 🛟#
Если что-то пойдет не так:
- Отключите RTT хуки через конфигурацию
- Пересоберите ядро
- Загрузите чистую систему
NawderOS никогда не должен препятствовать загрузке системы.
Почему это важно#
RTT становится реальным, когда:
- предположения видимы
- сдвиг наблюдаем
- согласованность можно обсуждать без догадок
Этот уровень ядра не решает ничего.
Он позволяет вам видеть, что происходит.
А видеть — это первый шаг 🙂