Skip to content

Dokumentacja techniczna

Ten dokument提供 dogłębne spojrzenie na projekt architektury, wybór technologii i podstawową logikę implementacji kluczowych funkcji w WSL Dashboard, przeznaczony dla deweloperów i zaawansowanych użytkowników poszukujących perspektywy technicznej.

1. Przegląd architektury

WSL Dashboard采用 klasyczną architekturę reaktywny UI驱动 + asynchroniczne zadania backendowe,利用 system typów i model własności Rusta do garantowania bezpieczeństwa pamięci i wysokiej wydajności współbieżności.

Kluczowe komponenty

  • Frontend (UI): Zbudowany na deklaratywnym interfejsie Slint. Wątek UI负责 za renderowanie i interakcję użytkownika.
  • Backend (Runtime): Zbudowany na asynchronicznym runtime Tokio.负责 zaDispatch i wykonywanie poleceń系统owych (CLI), I/O plików i监听owników sieciowych.
  • Komunikacja: Wątek UI i zadania asynchroniczne komunikują się有效地 i bezpiecznie przez wątki przez Channels (MPSC) i Shared State (Arc/Mutex/RwLock).

2. Uzasadnienie technologii

Dlaczego Rust?

  • Wydajność:抽象零成本, kompilacja do natywnego kodu maszynowego, bez暂停 GC.
  • Bezpieczeństwo pamięci: Eliminuje缓冲区溢出 i wyścigi danych w czasie kompilacji — kluczowe dla narzędzia działającego na poziomie系统u (migracja dysków, konfiguracja sieci).
  • Rozmiar binarny: Statycznie łączy所有依存, aby wyprodukować单文件 przenośny plik wykonywalny.

Dlaczego Slint + Skia?

  • Składnia deklaratywna: Oddziela描述 UI od logiki, utrzymując codebase czysty i łatwy w utrzymaniu.
  • Renderowanie Skia: Wykorzystuje直接加速 GPU (通过 silnik Skia), zapewniając清晰ść tekstu na poziomie subpikseli i masłogładkie animacje.
  • Niski narzut: W porównaniu z Electron lub WPF, narzut runtime Slint jest minimalny.

3. Kluczowe implementacje techniczne

3.1 Wykrywanie i parsowanie instancji WSL

Aplikacja pobiera状态 instancji w czasie rzeczywistym, wywołując wsl.exe --list --verbose i parsując jego输出 (obsługując kodowanie UTF-16).

  • Niskopoziomowe dekodowanie: Niestandardowy,高效 encoder/decoder zapewnia正确的 parsowanie输出 na不同 środowiskach Windows z不同的 ustawieniami区域.
  • Synchronizacja状态: Używa mechanizmu双重同步 łączącego定期轮询 z aktualizacjami触发owymi operacjami.

3.2 Migracja obrazu dysku (VHDX Move)

Funkcja migracji利用 mechanizm importu/eksportu WSL, ale z wysokim poziomem抽象 i atomowości.

  • Gwarancja transakcyjna: Przed rozpoczęciem migracji aplikacja blokuje docelową dystrybucję通过 Mutex, aby zapobiec并发nym operacjom powodującym uszkodzenie danych.
  • Automatyczna rejestracja: Po zakończeniu migracji aplikacja automatycznie przekierowuje ścieżkę VHDX i重新rejestruje dystrybucję —无需 interwencji ręcznej.

3.3 Przekierowanie portów i automatyzacja zapory

Funkcja sieciowa超越 prostego wywołania netsh interface portproxy.

  • Zarządzanie cyklem życia reguł: Aplikacja automatycznie wykrywa istniejące reguły zapory. Gdy użytkownik tworzy regułę przekierowania,同时 tworzy regułę wyjątku przychodzącego通过 Windows API lub CLI.
  • Automatyczna解析 IP: Parsując输出 wsl hostname -I, automatycznie mapuje虚拟 adresy IP sieci między主机 a instancją.

3.4 Integracja USBIP

Wykorzystuje interfejs linii poleceń usbipd-win.

  • Obsługa podniesienia uprawnień: Operacja powiązywania wymaga uprawnień administratora. Backend实现优雅ne przekazywanie żądań podniesienia UAC.
  • Maszyna stanu: Utrzymuje wewnętrzną maszynę stanu连接owania urządzeń USB, aby确保 pełną可追溯ność operacji Attach/Detach.

3.5 Monitorowanie zasobów i minimalne占用

Aplikacja monitoruje własne zużycie zasobów, wywołując natywne Windows API (np. GetProcessMemoryInfo).

  • Ekstremalna efektywność: W trybie cichej tacki aplikacja主动 zwalnia niepotrzebne zasoby UI. Dla标准owych zestawów znaków (np. angielski), zużycie pamięci może być tak niskie jak 10MB; dla złożonych zestawów znaków (np. CJK), wynosi大约 38MB z powodu较大的必要nego缓存 renderowania czcionek.

4. Benchmarki wydajności

MetrykaCel / ZmierzonyPodejście optymalizacji
Czas uruchomienia< 500ms预kompilowany interfejs Slint, minimalizacja parsowania runtime.
Pamięć bazowa (tacka)~10MBZminimalizowana频繁ość轮询 tła, zwalnianie缓存 renderowania na żądanie.
Użycie CPU (idle)< 0.1%Model驱动 zdarzeń Windows, bez忙-loop pollingu.
Klatki renderowania60 FPS加速 GPU Skia, renderowanie subpikselowe antyaliasingowe.

5. Logika dispatch zadań backendowych

Aby确保响应 UI,所有 czasochłonne operacje (np. eksport VHDX) są dispatchowane作为 asynchroniczne zadania:

  1. Enkapsulacja żądania: Wątek UI封装 actions użytkownika jako消息 Command.
  2. Kanał消息: Wysyła je do处理nika zadań tła通过 tokio::sync::mpsc.
  3. Callback状态: Gdy zadanie tła zakończy się, aktualizuje UI通过 callback lub stan共享. To zapewnia, że即使 podczas przetwarzania wielogigabajtowego zadania备份, interfejs pozostaje完全 responsywny na输入 użytkownika.

6. Uwagi dotyczące bezpieczeństwa

  • Operacje atomowe: Walidacja przed lotem jest implementowana dla krytycznych operacji wyrejestrowania i migracji instancji.
  • Zarządzanie podnoszeniem UAC: Podniesione uprawnienia są要求仅 w必要nym przypadku (np. powiązywanie urządzenia USB),遵循 zasady最小nych uprawnień.
  • Przechowywanie lokalne: Konfiguracja jest zapisywana仅 w lokalnym katalogu ~\.wsldashboard bez任何形式同步 w chmurze, chroniąc prywatność użytkownika.