Files
shturman/docs/tech-stack.md
T
kk0t9 3d13bb5827 docs: tech-stack + контракты ipc/data-model (+ ревью-фиксы)
- tech-stack: Rust-first (один прод-рантайм; Python — dev-only), полный стек, крейты
- architecture: ассистент Python→Rust для консистентности; boot-порядок
  (Broker+App-Host до Shell); потолок частоты сигналов ~10–20 Гц
- contracts/ipc: реестр D-Bus (сервисы ядра/апов, соглашения, портал-брокеринг)
  + открытые вопросы из self-review
- contracts/data-model: VSS-aligned каталог сигналов, OBD-PID маппинг, DTC-модель;
  добавлен MIL-статус (PID 0x01) для killer-фичи, состояние машины, расход-estimate

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:01:36 +03:00

86 lines
5.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.
# Технический стек
> Канонический список технологий Штурмана с обоснованием — источник правды по
> «на чём пишем». Архитектурные *решения* — в [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** (`cage` kiosk) · Panfrost/Mesa | один композитор — shell |
| **Аудио/видео plane** | **PipeWire** + WirePlumber | микрофон, TTS, медиа, BT-аудио |
| **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`) | ELM327 на старте; `python-OBD` — только в симуляторе |
| **Wake-word** | openWakeWord / Porcupine | кастомная RU-фраза |
| **VAD** | Silero VAD | через ONNX Runtime |
| **STT** | Vosk · Silero | офлайн, RU; через биндинги / `ort` |
| **TTS** | Silero | офлайн, RU |
| **LLM онлайн** | GigaChat · YandexGPT | HTTP, provider-agnostic, 152-ФЗ |
| **LLM офлайн** | llama.cpp / Ollama | квантованная мелкая модель |
| **Карты (фаза 2)** | 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` |
> Список крейтов уточняется при проектировании доменов; здесь — опорные.
---
## Журнал решений (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 |