# Технический стек > Канонический список технологий Штурмана с обоснованием — источник правды по > «на чём пишем». Архитектурные *решения* — в [architecture.md](architecture.md); > здесь — конкретные технологии и крейты. Статус: **v1 (на ревью).** Связано с: [architecture.md](architecture.md) · [principles.md](principles.md) (#11 отзывчивость, #12 лицензии) · [dev-environment.md](dev-environment.md) --- ## Язык: Rust-first, один прод-рантайм **Всё, что мы шипим, — на Rust.** Core, SDK, shell и весь прикладной слой, включая ассистента. - **Почему:** один тулчейн, минимальный footprint (важно на RK3588 и 16 ГБ-dev), единый sandbox-профиль, безопасность памяти, перформанс (принцип #11 — отзывчивость). - **ML без Python в проде:** STT/TTS/VAD — через **ONNX Runtime** (крейт `ort`) и нативные биндинги (Vosk, llama.cpp); облачные LLM — обычный HTTP. PyTorch в прод не тащим. - **Python — только в dev:** прототипы, Vehicle Simulator, скрипты, CI-утилиты. - **Escape-hatch:** если у конкретной ML-возможности нет вменяемого Rust-пути — она шипится **изолированным Python-sidecar процессом** (архитектура позволяет: всё и так отдельные процессы на D-Bus + sandbox). Это исключение, не правило. - **SDK язык-агностичен для плагинов:** транспорт — D-Bus, поэтому сторонний плагин можно писать на любом языке. Биндинги: **Rust — first-class**, другие (Python…) — по мере нужды экосистемы. --- ## Полный стек | Слой / концерн | Выбор | Примечание | |----------------|-------|------------| | **Языки (прод)** | **Rust** | единственный шипимый рантайм | | **Языки (dev)** | Python | прототипы, Vehicle Simulator, скрипты — не в проде | | **UI** | **Slint** | декларативный, GPU-ускоренный, Rust-native | | **Графика** | **Wayland** — shell = кастомный композитор на `smithay` (Rust) · Panfrost/Mesa | `cage` не годится (single-app) — только ранний bring-up | | **Аудио/видео plane** | **PipeWire** + WirePlumber (+ `module-echo-cancel` — AEC) | микрофон, TTS, медиа, BT-аудио; политика ducking — домен H | | **IPC (control plane)** | **D-Bus** | низкополосное управление и события | | **Песочница** | **bubblewrap** + systemd-hardening | апы/плагины; WASM-тир — позже | | **OS base** | Armbian/Debian (RK3588), ядро ближе к mainline | read-only rootfs + overlay | | **Init / lifecycle** | **systemd** | ядро; апы/плагины — App-Host | | **CAN/OBD (read-only)** | **SocketCAN** (`socketcan`) + **ISO-TP** (`can-isotp`/`CAN_ISOTP`) для нативного OBD | ELM327 (мульти-протокол, прячет ISO-TP) на старте; `python-OBD` — в симуляторе | | **Wake-word** | **openWakeWord** | RU-фраза «Штурман»; Porcupine отвергнут (проприетарный, #12) | | **VAD** | Silero VAD | через ONNX Runtime | | **STT** | Vosk · Silero | офлайн, RU; через биндинги / `ort` | | **TTS** | Silero | офлайн, RU | | **LLM онлайн** | GigaChat · YandexGPT | HTTP, provider-agnostic, 152-ФЗ | | **LLM офлайн** | llama.cpp / Ollama | квантованная мелкая модель | | **Карты (v4)** | MapLibre + Valhalla/OSRM | офлайн | | **Dev VM** | Lima (vz-backend) | ARM64, нативная виртуализация | | **CI** | GitHub Actions, ARM64-Linux | совпадает с таргетом | | **Сборка / оркестрация** | Cargo (workspace) + `justfile` | | | **Лицензия / гигиена** | **MIT** · `cargo-deny` | без AGPL-заразы (принцип #12) | --- ## Ключевые крейты (Rust) | Концерн | Крейт | |---------|-------| | D-Bus | `zbus` | | UI | `slint` | | Async-рантайм | `tokio` | | SocketCAN | `socketcan` | | ONNX-инференс (STT/TTS/VAD) | `ort` (ONNX Runtime) | | Локальная LLM | биндинги `llama.cpp` | | STT (Vosk) | `vosk` | | HTTP (облачные LLM) | `reqwest` | | Сериализация | `serde` | | Логи/трейсинг | `tracing` | | Аудио-декод (медиа) | `symphonia` (MP3/AAC/FLAC/Vorbis/WAV/ALAC) + `audiopus` (Opus) | > Список крейтов уточняется при проектировании доменов; здесь — опорные. --- ## Журнал решений (stack) | Решение | Выбор | Дата | |---------|-------|------| | Язык прод-рантайма | **Rust-first, один рантайм** (Python — dev-only; sidecar как escape-hatch) | 2026-06-16 | | ML в проде | ONNX Runtime (`ort`) + нативные биндинги, без PyTorch | 2026-06-16 | | SDK для плагинов | язык-агностичен (D-Bus); Rust — first-class | 2026-06-16 |