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 без任何形式同步 в хмарі, захищаючи приватність користувача.