Skip to content

Whitepaper

Tento dokument poskytuje podrobný pohled na architektonický návrh, technologické volby a podkladovou implementační logiku klíčových funkcí WSL Dashboard, určený pro vývojáře a pokročilé uživatele hledající technickou perspektivu.

1. Přehled architektury

WSL Dashboard přijímá klasickou architekturu reaktivní UI-řízené + asynchronní backend úlohy, využívající Rustův systém typů a model vlastnictví k zajištění bezpečnosti paměti a vysokého výkonu souběhu.

Klíčové komponenty

  • Frontend (UI): Postaven na deklarativním rozhraní Slint. UI vlákno je zodpovědné za vykreslování a interakci s uživatelem.
  • Backend (Runtime): Postaven na asynchronním runtime Tokio. Zodpovědný za odesílání a provádění systémových příkazů (CLI), I/O souborů a síťových posluchačů.
  • Komunikace: UI vlákno a asynchronní úlohy komunikují efektivně a bezpečně pro vlákna prostřednictvím Channels (MPSC) a Sdíleného stavu (Arc/Mutex/RwLock).

2. Technologické odůvodnění

Proč Rust?

  • Výkon: Abstrakce s nulovými náklady, kompilace do nativního strojového kódu, žádné GC pauzy.
  • Bezpečnost paměti: Eliminuje přetečení bufferu a datové závody v době kompilace — kritické pro nástroj, který pracuje na úrovni systému (migrace disků, konfigurace sítě).
  • Velikost binárního souboru: Staticky propojuje všechny závislosti a vytváří jeden přenositelný spustitelný soubor.

Proč Slint + Skia?

  • Deklarativní syntax: Odděluje popis UI od logiky, udržuje codebase čistý a udržovatelný.
  • Skia vykreslování: Využívá přímo GPU akceleraci (prostřednictvím Skia enginu), poskytuje sub-pixelovou čitelnost textu a plynulé animace.
  • Nízké režie: Ve srovnání s Electronem nebo WPF je runtime stopa Slintu minimální.

3. Klíčové technické implementace

3.1 Detekce a parsování WSL instancí

Aplikace získává stav instancí v reálném čase voláním wsl.exe --list --verbose a parsováním jeho výstupu (zpracování UTF-16 kódování).

  • Nízkoúrovňové dekódování: Vlastní, efektivní enkodér/dekodér zajišťuje správné parsování výstupu napříč Windows prostředími s různými regionálními nastaveními.
  • Synchronizace stavu: Používá duální synchronizační mechanismus kombinující časový polling s aktualizacemi spouštěnými operacemi.

3.2 Migrace diskových obrazů (VHDX přesun)

Migrační funkce využívá WSL mechanismus import/export, ale s vysokou úrovní abstrakce a atomicity.

  • Transakční záruka: Před zahájením migrace aplikace uzamkne cílovou distribuci prostřednictvím Mutexu, aby zabránila souběžným operacím způsobujícím poškození dat.
  • Automatická registrace: Po dokončení migrace aplikace automaticky přesměruje VHDX cestu a znovu zaregistruje distribuci — žádný manuální zásah není potřeba.

3.3 Přesměrování portů a automatizace brány firewall

Síťová funkce přesahuje jednoduché volání netsh interface portproxy.

  • Správa životního cyklu pravidel: Aplikace automaticky detekuje existující pravidla brány firewall. Když uživatel vytvoří přesměrovávací pravidlo, současně vytvoří příchozí výjimku prostřednictvím Windows API nebo CLI.
  • Automatické rozlišení IP: Parsováním výstupu wsl hostname -I automaticky mapuje virtuální síťové IP mezi hostitelem a instancí.

3.4 USBIP integrace

Využívá rozhraní příkazového řádku usbipd-win.

  • Správa zvýšení oprávnění: Operace bindu vyžadují administrátorská oprávnění. Backend implementuje elegantní předávání požadavků na zvýšení UAC.
  • Stavový automat: Udržuje interní stavový automat připojení USB zařízení pro zajištění úplné sledovatelnosti operací Attach/Detach.

3.5 Monitorování zdrojů a minimální stopa

Aplikace monitoruje vlastní využití zdrojů voláním nativních Windows API (např. GetProcessMemoryInfo).

  • Extrémní efektivita: V tichém režimu tray aplikace proaktivně uvolňuje nepotřebné UI zdroje. Pro standardní znakové sady (např. angličtina) může být využití paměti nízké jako 10MB; pro složité znakové sady (např. CJK) je přibližně 38MB kvůli věšímu cache vykreslování písem.

4. Výkonnostní benchmarky

MetrikaCíl / NaměřenoOptimalizační přístup
Doba spuštění< 500msPředkompilované Slint rozhraní, minimalizace runtime parsování.
Základní paměť (tray)~10MBMinimalizovaná frekvence polling pozadí, uvolnění render cache na vyžádání.
Využití CPU (nečinný)< 0.1%Windows model řízený událostmi, žádné busy-loop polling.
Obnovovací frekvence vykreslování60 FPSSkia GPU akcelerace, sub-pixelové anti-aliasing vykreslování.

5. Logika odesílání backend úloh

Pro zajištění UI odezvy jsou všechny časově náročné operace (např. export VHDX) odesílány jako asynchronní úlohy:

  1. Zapouzdření požadavku: UI vlákno zapouzdří akce uživatele do zpráv Command.
  2. Kanál zpráv: Odesílá je do handleru úloh pozadí prostřednictvím tokio::sync::mpsc.
  3. Stavový callback: Jakmile úloha pozadí dokončí, aktualizuje UI prostřednictvím callbacku nebo sdíleného stavu. Tento design zajišťuje, že i při zpracování úlohy zálohování o velikosti několika gigabajtů zůstane rozhraní plně odezvové na vstup uživatele.

6. Bezpečnostní úvahy

  • Atomické operace: Pro kritické operace zrušení registrace instance a migrace je implementována předběžná validace.
  • Správa zvýšení UAC: Zvýšená oprávnění jsou vyžadována pouze v případě potřeby (např. připojení USB zařízení), v souladu s principem nejnižších privilegií.
  • Lokální úložiště: Konfigurace je ukládána pouze do lokálního adresáře ~\.wsldashboard bez jakékoliv cloud synchronizace, chrání soukromí uživatele.