Skip to content

Whitepaper

Tento dokument poskytuje podrobný pohľad na architektonický návrh, technologické voľby a podkladovú implementačnú logiku kľúčových funkcií WSL Dashboard, určený pre vývojárov a pokročilých používateľov hľadajúcich technickú perspektívu.

1. Prehľad architektúry

WSL Dashboard prijíma klasickú architektúru reaktívne UI-riadené + asynchrónne backend úlohy, využívajúc Rustov systém typov a model vlastníctva k zabezpečeniu bezpečnosti pamäte a vysokého výkonu súbehu.

Kľúčové komponenty

  • Frontend (UI): Postavený na deklaratívnom rozhraní Slint. UI vlákno je zodpovedné za vykresľovanie a interakciu s používateľom.
  • Backend (Runtime): Postavený na asynchrónnom runtime Tokio. Zodpovedný za odosielanie a vykonávanie systémových príkazov (CLI), súborového I/O a sieťových poslucháčov.
  • Komunikácia: UI vlákno a asynchrónne úlohy komunikujú efektívne a bezpečne pre vlákna prostredníctvom Kanálov (MPSC) a Zdieľaného stavu (Arc/Mutex/RwLock).

2. Technologické odôvodnenie

Prečo Rust?

  • Výkon: Abstrakcie s nulovými nákladmi, kompilácie do natívneho strojového kódu, žiadne GC pauzy.
  • Bezpečnosť pamäte: Eliminuje pretečenie buffera a dátové závody v dobe kompilácie — kritické pre nástroj, ktorý pracuje na úrovni systému (migrácia diskov, konfigurácia siete).
  • Veľkosť binárneho súboru: Staticky spája všetky závislosti a vytvára jeden prenosný spustiteľný súbor.

Prečo Slint + Skia?

  • Deklaratívna syntax: Oddeľuje popis UI od logiky, udržuje codebase čistý a udržiavateľný.
  • Skia vykresľovanie: Využíva priamo GPU akceleráciu (prostredníctvom Skia enginu), poskytuje sub-pixelovú čitateľnosť textu a plynulé animácie.
  • Nízke režie: V porovnaní s Electronom alebo WPF je runtime stopa Slintu minimálna.

3. Kľúčové technické implementácie

3.1 Detekcia a parsovanie WSL inštancií

Aplikácie získavajú stav inštancií v reálnom čase volaním wsl.exe --list --verbose a parsovaním jeho výstupu (spracovanie UTF-16 kódovania).

  • Nízko-úrovňové dekódovanie: Vlastné, efektívne enkóder/dekóder zabezpečuje správne parsovanie výstupu naprieč Windows prostrediami s rôznymi regionálnymi nastaveniami.
  • Synchronizácia stavu: Používa duálny synchronizačný mechanizmus kombinujúci časový polling s aktualizáciami spúšťanými operáciami.

3.2 Migrácia diskových obrazov (VHDX presun)

Migračná funkcia využíva WSL mechanizmus import/export, ale s vysokou úrovňou abstrakcie a atomicity.

  • Transakčná záruka: Pred začatím migrácie aplikácia uzamkne cieľovú distribúciu prostredníctvom Mutexu, aby zabránila súbežným operáciám spôsobujúcim poškodenie dát.
  • Automatická registrácia: Po dokončení migrácie aplikácia automaticky presmeruje VHDX cestu a znovu zaregistruje distribúciu — žiadny manuálny zásah nie je potrebný.

3.3 Presmerovanie portov a automatizácia brány firewall

Sieťová funkcia presahuje jednoduché volanie netsh interface portproxy.

  • Správa životného cyklu pravidiel: Aplikácia automaticky detekuje existujúce pravidlá brány firewall. Keď používateľ vytvorí presmerovávacie pravidlo, súčasne vytvorí prichádzajúcu výnimku prostredníctvom Windows API alebo CLI.
  • Automatické rozlíšenie IP: Parsovaním výstupu wsl hostname -I automaticky mapuje virtuálne sieťové IP medzi hostiteľom a inštanciou.

3.4 USBIP integrácia

Využíva rozhranie príkazového riadku usbipd-win.

  • Správa zvýšenia oprávnení: Operácie viazania vyžadujú administrátorské oprávnenia. Backend implementuje elegantné predávanie požiadaviek na zvýšenie UAC.
  • Stavový automat: Udržuje interný stavový automat pripojenia USB zariadenia pre zabezpečenie úplnej sledovateľnosti operácií Attach/Detach.

3.5 Monitorovanie zdrojov a minimálna stopa

Aplikácia monitoruje vlastné využitie zdrojov volaním natívnych Windows API (napr. GetProcessMemoryInfo).

  • Extrémna efektivita: V tichom režime tray aplikácia proaktívne uvoľňuje nepotrebné UI zdroje. Pre štandardné znakové sady (napr. angličtina) môže byť využitie pamäte nízke ako 10MB; pre zložité znakové sady (napr. CJK) je približne 38MB kvôli väčšej cache vykresľovania písiem.

4. Výkonnostné benchmarky

MetrikaCieľ / NameranéOptimalizačný prístup
Čas spustenia< 500msPredkompilované Slint rozhranie, minimalizácia runtime parsovania.
Základná pamäť (tray)~10MBMinimalizovaná frekvencia polling pozadia, uvoľnenie render cache na vyžiadanie.
Využitie CPU (nečinný)< 0.1%Windows model riadený udalosťami, žiadne busy-loop polling.
Obnovovacia frekvencia vykresľovania60 FPSSkia GPU akcelerácia, sub-pixelové anti-aliasing vykresľovanie.

5. Logika odosielania backend úloh

Pre zabezpečenie UI odozvy sú všetky časovo náročné operácie (napr. export VHDX) odosielané ako asynchrónne úlohy:

  1. Zapuzdrenie požiadavku: UI vlákno zapuzdrí akcie používateľa do správ Command.
  2. Kanál správ: Odosiela ich do handleru úloh pozadia prostredníctvom tokio::sync::mpsc.
  3. Stavový callback: Keď úloha pozadia dokončí, aktualizuje UI prostredníctvom callbacku alebo zdieľaného stavu. Tento dizajn zabezpečuje, že aj pri spracovaní úlohy zálohovania o veľkosti niekoľkých gigabajtov zostane rozhranie plne odozvové na vstup používateľa.

6. Bezpečnostné úvahy

  • Atomické operácie: Predbežná validácia je implementovaná pre kritické operácie zrušenia registrácie inštancie a migrácie.
  • Správa zvýšenia UAC: Zvýšené oprávnenia sú vyžadované len v prípade potreby (napr. pripojenie USB zariadenia), v súlade s princípom najnižších privilégií.
  • Lokálne úložisko: Konfigurácia je ukladaná len do lokálneho adresára ~\.wsldashboard bez akejkoľvek cloud synchronizácie, chráni súkromie používateľa.