Архитектура движка
Подсистемы, управление жизненным циклом и модель вызова Axion Engine.
01 Архитектура движка
Axion Engine — Rust-ядро платформы. Управляет WebView, жизненным циклом приложений, capabilities, permissions, IPC, workspace, storage, background-задачами и пакетами. Engine не зависит от конкретного UI — поверх него можно построить Flutter-оболочку, Qt-интерфейс или полностью нативный клиент.
1.1Место Engine в Axion
Axion — это Application Runtime, а не UI-фреймворк. Внешние оболочки общаются с Engine через Axion Protocol или напрямую через Rust API:
┌─────────────────────────────────────────┐
│ Custom Shells (Flutter / Qt / Native) │
└──────────────────┬──────────────────────┘
│ Axion Protocol
┌────────▼────────┐
│ Axion Engine │
└────────┬────────┘
│ Platform Abstraction
┌──────────┼──────────┐
│ │ │
Desktop Mobile ...
Win/Mac/Linux Android/iOS
1.2Подсистемы
Engine состоит из нескольких подсистем, каждая из которых решает свою задачу:
| Подсистема | Ответственность |
|---|---|
| Runtime | Запуск, остановка, приостановка приложений; управление жизненным циклом |
| WebView | Рендеринг интерфейса приложения; бridge window.axion |
| Capabilities | Регистр доступных возможностей (filesystem, network, process…) |
| Permission Broker | Проверка и подтверждение прав (default deny) |
| IPC Broker | Межприложенческое взаимодействие через именованные методы |
| Package Manager | Установка, обновление, удаление .axn-пакетов |
| Workspace | Логический каталог проекта |
| Storage / Secrets | Персистентное хранилище; защищённое хранилище ключей |
| Platform Layer | Абстракция над ОС: Windows, macOS, Linux, Android, iOS |
1.3Модель вызова
JavaScript-код приложения не обращается к ОС напрямую. Каждый вызов проходит через цепочку:
JavaScript (window.axion)
↓
JS Bridge
↓
Axion Protocol
↓
Capability Broker ← проверка: заявлена ли capability в manifest
↓
Permission Broker ← проверка: разрешил ли пользователь
↓
Native Runtime
↓
Operating System
Например, await axion.fs.readFile('main.js') — это не прямой доступ к файловой системе, а запрос к Engine, который проверяет filesystem.read в capabilities и затем выполняет чтение через workspace.
AXION_PERMISSION_NEEDED ticket=... capability=.... Страница показывает промпт, и после выбора «Разрешить» вызов повторяется — уже успешно.1.4Жизненный цикл
Engine полностью контролирует состояния приложения:
- Installed — пакет распакован, manifest валиден;
- Launching — проверка capabilities, создание Runtime;
- Running — WebView загрузил entry HTML;
- Suspended — приложение свёрнуто, ресурсы освобождены;
- Stopped — остановка по запросу или при сбое.
Переходы отражаются событиями app.resumed / app.suspended. Клиент может вызвать engine.suspend(run_id) или engine.resume(run_id) через Axion Protocol.