Skip to content

Технічний документ

Цей документ提供 глибокий погляд на архітектурний дизайн, вибір технологій та底层 логіку реалізації ключових функцій WSL Dashboard, призначений для розробників та досвідчених користувачів, що шукають технічну перспективу.

1. Огляд архітектури

WSL Dashboard采用 класичну архітектуру реактивний UI驱动 + асинхронні backend-завдання,利用 систему типів та модель власності Rustа для гарантування безпеки пам'яті та високої продуктивності конкурентності.

Основні компоненти

  • Frontend (UI): Побудований на декларативному інтерфейсі Slint. Потік UI负责 за рендерення та взаємодію з користувачем.
  • Backend (Runtime): Побудований на асинхронному runtime Tokio.负责 за диспетчеризацію та виконання системних команд (CLI), файлового I/O та мережевих监听erів.
  • Комунікація: Потік UI та асинхронні завдання ефективно та безпечно через потоки через Channels (MPSC) та Shared State (Arc/Mutex/RwLock).

2. Обґрунтування технологій

Чому Rust?

  • Продуктивність:抽象零成本, компіляція в нативний машинний код, без暂停 GC.
  • Безпека пам'яті: Усуває缓冲区溢出 та гонки даних на етапі компіляції — критично для інструменту, що працює на рівні системи (міграція дисків, конфігурація мережі).
  • Розмір бінарного файлу: Статично пов'язує所有依存ності для створення单文件 портативного виконуваного файлу.

Чому Slint + Skia?

  • Декларативний синтаксис: Розділяє描述 UI від логіки, зберігаючи кодову базу чистою та легкою для підтримки.
  • Рендерення Skia: Використовує直接 GPU加速 (通过 рушій Skia), забезпечуючи субпіксельну清晰сть тексту та масляно-плавні анімації.
  • Низький наклад: Порівняно з Electron або WPF, наклад runtime Slint є мінімальним.

3. Ключові технічні реалізації

3.1 Виявлення та парсинг інстансів WSL

Додаток отримує状态 інстансів у реальному часі, викликаючи wsl.exe --list --verbose та парсячи його вивід (обробляючи кодування UTF-16).

  • Низькорівневе декодування: Спеціальний,高效 encoder/decoder забезпечує正确的 парсинг виводу на різних середовищах Windows з різними区域 налаштуваннями.
  • Синхронізація状态: Використовує механізм双重同步, що поєднує定期轮询 з оновленнями触发 операціями.

3.2 Міграція образу диску (VHDX Move)

Функція міграції利用 механізм імпорту/експорту WSL, але з високим рівнем抽象 та атомарності.

  • Транзакційна гарантія: Перед початком міграції додаток блокує цільовий дистрибутив через Mutex, щоб запобігти并发 операціям, що спричиняють пошкодження даних.
  • Автоматична реєстрація: Після завершення міграції додаток автоматично перенаправляє шлях VHDX та重新реєструє дистрибутив —无需 ручного втручання.

3.3 Перенаправлення портів та автоматизація брандмауера

Мережева функція超越 простого виклику netsh interface portproxy.

  • Управління життєвим циклом правил: Додаток автоматично виявляє існуючі правила брандмауера. Коли користувач створює правило перенаправлення, одночасно створює правило винятку вхідного через Windows API або CLI.
  • Автоматична解析 IP: Парсячи вивід wsl hostname -I, автоматично мапує віртуальні мережеві IP між хостом та інстансом.

3.4 Інтеграція USBIP

Використовує інтерфейс командного рядка usbipd-win.

  • Обробка підвищення прав: Операція прив'язки вимагає прав адміністратора. Backend реалізує优雅не перенаправлення запитів підвищення UAC.
  • Машина стану: Підтримує внутрішню машину стану підключення USB-пристроїв, щоб确保 повну可追溯ність операцій Attach/Detach.

3.5 Моніторинг ресурсів та мінімальне占用

Додаток моніторить власне споживання ресурсів, викликаючи нативні Windows API (напр. GetProcessMemoryInfo).

  • Екстремальна ефективність: У режимі тихого трею додаток主动 звільняє непотрібні ресурси UI. Для стандартних наборів символів (напр. англійська), споживання пам'яті може бути таким низьким, як 10MB; для складних наборів символів (напр. CJK), воно становить大约 38MB через більший必要ний кеш рендерення шрифтів.

4. Бенчмарки продуктивності

МетрикаЦіль / ВиміряноПідхід оптимізації
Час запуску< 500msПопередньо скомпільований інтерфейс Slint, мінімізація парсингу runtime.
Базова пам'ять (трей)~10MBМінімізована частота轮询 фону, звільнення кешу рендерення на вимогу.
Використання CPU (idle)< 0.1%Модель驱动 подій Windows, без忙-loop轮询.
Частота кадрів рендерення60 FPSСубпіксельне антиаліасингове рендерення Skia GPU.

5. Логіка диспетчеризації backend-завдань

Щоб确保 UI відгук,所有 часомісткі операції (напр. експорт VHDX) диспетчеризуються як асинхронні завдання:

  1. Інкапсуляція запиту: Потік UI封装 дії користувача як повідомлення Command.
  2. Канал повідомлень: Надсилає їх до обробника завдань фону через tokio::sync::mpsc.
  3. Callback стану: Коли завдання фону завершується, оновлює UI через callback або спільний стан. Цей дизайн确保, що навіть під час обробки багатогігабайтного завдання备份, інтерфейс залишається完全 відгукливим на输入 користувача.

6. Міркування безпеки

  • Атомарні операції: Попередня валідація реалізована для критичних операцій скасування реєстрації та міграції інстансів.
  • Управління підвищенням UAC: Підвищені права запитуються仅 за необхідності (напр. прив'язка USB-пристрою),遵循 принципу мінімальних привілеїв.
  • Локальне зберігання: Конфігурація зберігається仅 в локальному каталозі ~\.wsldashboard без任何形式同步 в хмарі, захищаючи приватність користувача.