Skip to content

Whitepaper ​

Tento dokument podrobně zkoumá architekturu návrhu WSL Dashboard, volbu technologií a základní logiku implementace klíčových funkcí a má poskytnout pohled do technické hloubky pro vývojáře a pokročilé uživatele.

1. Přehled architektury ​

WSL Dashboard používá klasickou architekturu UI řízené reaktivně + asynchronní úlohy na pozadí a díky systému typů a modelu vlastnictví jazyka Rust zajišťuje bezpečnost paměti a vysoký výkon při souběhu.

Hlavní komponenty ​

  • Frontend (UI): deklarativní rozhraní založené na Slint. Vlákno UI zajišťuje vykreslování a interakci s uživatelem.
  • Backend (Runtime): asynchronní běhové prostředí založené na Tokio. Zajišťuje distribuci a spouštění systémových příkazů (CLI), souborové I/O a síťové naslouchání.
  • Komunikace: vlákno UI a asynchronní úlohy komunikují efektivně a bezpečně z hlediska souběhu prostřednictvím Channel (MPSC) a Shared State (Arc/Mutex/RwLock).

2. Důvody volby technologií ​

Proč Rust? ​

  • Výkon: abstrakce s nulovými náklady, kompilace do nativního strojového kódu, bez GC trhání.
  • Bezpečnost paměti: v době kompilace se eliminují přetečení vyrovnávací paměti a datové soupeření — to je klíčové pro nástroje zasahující do nízkoúrovňových operací systému (např. migrace disků, konfigurace sítě).
  • Velikost binárky: statické propojení všech závislostí vytváří jediný přenosný spustitelný soubor.

Proč Slint + Skia? ​

  • Deklarativní syntaxe: popis rozhraní je oddělen od logiky, kód se snadno udržuje.
  • Vykreslování Skia: přímé využití akcelerace GPU (přes engine Skia), poskytuje text s přesností pod úroveň pixelů a plynulé animace.
  • Nízká režie: ve srovnání s Electronem nebo WPF je běhová režie Slintu minimální.

3. Klíčové technické implementace ​

3.1 Zjišťování a parsování instancí WSL ​

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

  • Nízkoúrovňové dekódování: vlastní efektivní kodek zajišťuje správné parsování výstupu v prostředích Windows s různými místními nastaveními.
  • Synchronizace stavu: dvojitý synchronizační mechanismus — periodické dotazování + operacemi spouštěná synchronizace.

3.2 Migrace obrazu disku (VHDX Move) ​

Funkce migrace využívá import/export mechanismus WSL, ale s vysokou mírou abstrakce a atomickým zpracováním.

  • Transakční záruky: před zahájením migrace aplikace pomocí zámku (Mutex) uzamkne cílovou distribuci, aby souběžné operace nepoškodily data.
  • Automatická registrace: po dokončení migrace aplikace automaticky přesměruje cestu VHDX a znovu zaregistruje distribuci; uživatel nemusí zasahovat ručně.

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

Síťová funkce není jen jednoduché volání netsh interface portproxy.

  • Správa životního cyklu pravidel: aplikace automaticky zjišťuje stávající pravidla brány firewall. Když uživatel vytvoří přesměrování, aplikace pomocí Windows API nebo CLI synchronně vytvoří pravidlo pro příchozí výjimku.
  • Automatické získávání IP: parsováním výsledku wsl hostname -I automaticky mapuje virtuální síťové IP mezi hostitelem a instancemi.

3.4 Integrace USBIP ​

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

  • Zpracování zvýšení oprávnění: vázání vyžaduje oprávnění správce; logika na pozadí elegantně zprostředkovává žádost o zvýšení oprávnění UAC.
  • Stavový stroj: interně se udržuje stavový stroj připojení USB zařízení, aby byl proces Attach/Detach sledovatelný.

3.5 Monitorování prostředků a odlehčení ​

Aplikace monitoruje vlastní spotřebu prostředků voláním nativních API Windows (např. GetProcessMemoryInfo).

  • Extrémní odlehčení: v tichém režimu na liště aplikace aktivně uvolňuje nepotřebné prostředky UI. Pro standardní znakové sady, jako je angličtina, může paměť klesnout až na 10MB; pro složité znakové sady, jako je čínština/japonština/korejština, je kvůli načítání větších vykreslovacích mezipamětí písem spotřeba kolem 38MB.

4. Metriky optimalizace výkonu ​

MetrikaCíl/měřeníZpůsob optimalizace
Rychlost spuštění< 500 mspředkompilované rozhraní Slint, méně runtime parsování.
Základní paměť (lišta)~10MBminimalizace frekvence dotazování na pozadí, uvolňování vykreslovacích mezipamětí podle potřeby.
Vytížení CPU (v klidu)< 0,1 %model řízený událostmi Windows, bez prázdného smyčkového dotazování.
Snímková frekvence vykreslování60 FPSakcelerace GPU ve Skia, antialiasing s přesností pod úroveň pixelů.

5. Logika distribuce úloh na pozadí ​

Pro plynulost UI se všechny časově náročné operace (např. export VHDX) distribuují jako asynchronní úlohy:

  1. Zapouzdření požadavku: vlákno UI zapouzdří uživatelskou operaci jako zprávu Command.
  2. Zprávový kanál: přes tokio::sync::mpsc se odešle zpracovateli úloh na pozadí.
  3. Zpětné předání stavu: po dokončení úlohy na pozadí se UI aktualizuje přes callback nebo sdílený stav. Tento návrh zajišťuje, že i při zpracování záloh o velikosti GB rozhraní okamžitě reaguje na klikání uživatele.

6. Bezpečnostní aspekty ​

  • Atomické operace: pro klíčové odinstalace a migrace instancí je implementováno předběžné ověření.
  • Správa zvýšení oprávnění UAC: oprávnění se vyžaduje pouze v nezbytných případech (např. vázání USB zařízení), v souladu s principem minimálních oprávnění.
  • Lokální úložiště: konfigurace se ukládá pouze lokálně do ~\.wsldashboard; žádná synchronizace do cloudu, ochrana soukromí uživatele.