montana/_internal-private/MontanaOS-archived-20260521/ROADMAP.md
2026-05-26 21:14:51 +03:00

102 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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: примерно три-четыре месяца от запуска проекта до первого подписанного публичного релиза.