# MontanaOS — Дорожная карта Дата: 2026-05-06 Привязка к спецификации: MontanaOS v0.2 Целевой первый релиз: подписанный образ под Pixel 9 Pro XL Список поддерживаемых устройств — раздел 4 спецификации, не дублируется здесь. ## Фаза 0. Скаффолдинг проекта Текущая фаза. - [x] Структура репозитория - [x] Спецификация версии 0.2 (после прохода критика) - [x] Карта Безопасности процесса узла - [x] Файлы ролей: архитектор, критик - [x] Эскизы патчей ядра и сервисных файлов - [x] Скелеты скриптов сборки - [ ] Окружение сборки на отдельной машине Debian 12 - [ ] Зеркало GrapheneOS source Длительность: один день. ## Фаза 1. Ванильная сборка GrapheneOS Цель: собрать неизменённый образ GrapheneOS из исходников и прошить на тестовое устройство. - [ ] Определение действующей ветки GrapheneOS под целевое устройство (через `git ls-remote` upstream) - [ ] Запись зафиксированных хэшей в [MONTANAOS_VERSIONS.lock](MONTANAOS_VERSIONS.template) (создание из шаблона) - [ ] Полная синхронизация дерева исходников - [ ] Полная сборка образов: загрузчик, vendor, system - [ ] Прошивка через fastboot на тестовое устройство - [ ] Проверка цепочки проверенной загрузки с пользовательским ключом - [ ] Закрытие открытого вопроса 8.3 (стратегия повторной синхронизации после применения патчей) Длительность: одна-две недели. ## Фаза 2. Патчи ядра и системы инициализации - [ ] Эмпирическая проверка: достаточно ли подъёма жёсткого лимита блокировки памяти через систему инициализации - [ ] Закрытие открытого вопроса 8.1 (нужен ли патч ядра пользовательской блокировки памяти) - [ ] При необходимости — применение патча ядра, создание SELinux-политики `montana_node.te` - [ ] Тест-критерий: непривилегированный процесс класса montana_main блокирует восемь мегабайт памяти под нагрузкой час без подкачки - [ ] Тест-критерий: попытка `ptrace` на процесс узла из любого другого домена завершается отказом доступа - [ ] Закрытие требований Карты Безопасности процесса узла, пункты 3 и 5 Длительность: две-четыре недели. ## Фаза 3. Встраивание узла Монтаны - [ ] Сборка двоичного файла узла под целевую платформу aarch64-linux-android (закрытие открытого вопроса 8.10) - [ ] Упаковка двоичного файла в системный образ MontanaOS - [ ] Сервисная запись в системе инициализации с правильным классом, capabilities, oom_score_adj, rlimit core - [ ] Сторожевой таймер с проверкой Dumpable и VmLck - [ ] Тест-критерий: узел стартует автоматически, переживает принудительное убийство процесса, не вытесняется системой при нехватке памяти - [ ] Закрытие требований Карты Безопасности, пункты 1, 2, 4, 6, 7 Длительность: две-три недели. ## Фаза 4. Первичная настройка туннеля - [ ] Чтение списка генезис-серверов из основной спецификации Монтаны (без дублирования адресов в MontanaOS) - [ ] Мастер первой загрузки: выбор точки выхода + явное согласие на публикацию устройства в сети - [ ] Семантика смены сети согласно разделу 5.5 спецификации - [ ] Закрытие открытого вопроса 8.6 (смена генезис-сервера после первой загрузки) - [ ] Тест-критерий: входящие соединения на порт восемь тысяч четыреста сорок четыре проходят к узлу через выбранный генезис-сервер Длительность: одна-две недели. ## Фаза 5. Приложение статуса и батарейная диагностика - [ ] Системное приложение «Статус Монтаны» по разделу 5.6 спецификации - [ ] Пороги предупреждений по температуре процессора: жёлтый 70°C, красный 80°C (закрывает дефект 7-1 критика v0.1) - [ ] Лимит зарядки восемьдесят процентов как рекомендуемая настройка GrapheneOS, не как требование MontanaOS - [ ] Закрытие открытого вопроса 8.8 (минимальный образ или среда исполнения Android) Длительность: три-четыре недели. ## Фаза 6. Релизный конвейер - [ ] Воспроизводимая сборка: два независимых билда дают побайтово идентичный образ, включая имя файла - [ ] Генерация корневого релизного ключа на изолированной машине (раздел 7.3 спецификации) - [ ] Генерация первого промежуточного релизного ключа, подпись корневым - [ ] Заполнение файлов [MONTANAOS_RELEASE_KEY.pub](MONTANAOS_RELEASE_KEY.pub) и [MONTANAOS_RELEASE_KEY.history](MONTANAOS_RELEASE_KEY.history) - [ ] Публикация подписанных образов на хабе Монтаны - [ ] Канал обновлений по воздуху через стандартный движок GrapheneOS - [ ] Закрытие открытого вопроса 8.4 (поведение цепочки подписи после ротации ключа) - [ ] Закрытие открытого вопроса 8.7 (минимальный объём постоянной памяти после первого тестнета) - [ ] Документация прошивки для конечных пользователей Длительность: две недели. ## Фаза 7. Защищённый элемент Titan M2 как аппаратный модуль безопасности Опциональная фаза, не входит в первый релиз. Использование Titan M2 для прямого подписания блоков. Требует драйвера в пользовательском пространстве. - [ ] Закрытие открытого вопроса 8.2 (фаза, начиная с которой Titan M2 обязателен) ## Итог по срокам Реалистичная оценка для команды из одного-двух разработчиков с опытом AOSP: примерно три-четыре месяца от запуска проекта до первого подписанного публичного релиза.