8.2 KiB
MontanaOS — Дорожная карта
Дата: 2026-05-06 Привязка к спецификации: MontanaOS v0.2 Целевой первый релиз: подписанный образ под Pixel 9 Pro XL
Список поддерживаемых устройств — раздел 4 спецификации, не дублируется здесь.
Фаза 0. Скаффолдинг проекта
Текущая фаза.
- Структура репозитория
- Спецификация версии 0.2 (после прохода критика)
- Карта Безопасности процесса узла
- Файлы ролей: архитектор, критик
- Эскизы патчей ядра и сервисных файлов
- Скелеты скриптов сборки
- Окружение сборки на отдельной машине Debian 12
- Зеркало GrapheneOS source
Длительность: один день.
Фаза 1. Ванильная сборка GrapheneOS
Цель: собрать неизменённый образ GrapheneOS из исходников и прошить на тестовое устройство.
- Определение действующей ветки GrapheneOS под целевое устройство (через
git ls-remoteupstream) - Запись зафиксированных хэшей в MONTANAOS_VERSIONS.lock (создание из шаблона)
- Полная синхронизация дерева исходников
- Полная сборка образов: загрузчик, 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.history
- Публикация подписанных образов на хабе Монтаны
- Канал обновлений по воздуху через стандартный движок GrapheneOS
- Закрытие открытого вопроса 8.4 (поведение цепочки подписи после ротации ключа)
- Закрытие открытого вопроса 8.7 (минимальный объём постоянной памяти после первого тестнета)
- Документация прошивки для конечных пользователей
Длительность: две недели.
Фаза 7. Защищённый элемент Titan M2 как аппаратный модуль безопасности
Опциональная фаза, не входит в первый релиз. Использование Titan M2 для прямого подписания блоков. Требует драйвера в пользовательском пространстве.
- Закрытие открытого вопроса 8.2 (фаза, начиная с которой Titan M2 обязателен)
Итог по срокам
Реалистичная оценка для команды из одного-двух разработчиков с опытом AOSP: примерно три-четыре месяца от запуска проекта до первого подписанного публичного релиза.