Skip to content

Vitbok ​

Detta dokument fördjupar sig i arkitekturen, tekniska val och den underliggande implementeringslogiken för kärnfunktionerna i WSL Dashboard och erbjuder utvecklare och avancerade användare ett tekniskt fördjupande perspektiv.

1. Arkitektursöversikt ​

WSL Dashboard använder den klassiska responsiva UI-drivna + asynkrona backend-uppgifter-arkitekturen och utnyttjar Rust-språkets typsystem och ägarmodell för att säkerställa minnessäkerhet och hög samtidighetsprestanda.

Kärnkomponenter ​

  • Frontend (UI): deklarativt gränssnitt baserat på Slint. UI-tråden ansvarar för rendering och användarinteraktion.
  • Backend (Runtime): asynkron runtime baserad på Tokio. Ansvarar för att distribuera och utföra systemkommandon (CLI), fil-I/O och nätverkslyssning.
  • Communication: UI-tråden och asynkrona uppgifter kommunicerar effektivt och trådsäkert via Channel (MPSC) och Shared State (Arc/Mutex/RwLock).

2. Skäl till tekniska val ​

Varför Rust? ​

  • Prestanda: zero-cost-abstracts, kompileras till inbyggd maskinkod, inga GC-störningar.
  • Minnessäkerhet: eliminerar buffertspill och dataraces vid kompilering; avgörande för verktyg som hanterar lågnivåsystemoperationer (som diskmigrering, nätverkskonfiguration).
  • Binärstorlek: statiskt länkade alla beroenden, ger en enda, portabel körbar fil.

Varför Slint + Skia? ​

  • Deklarativ syntax: separation av gränssnittsbeskrivning och logik; koden är lätt att underhålla.
  • Skia-rendering: använder direkt GPU-acceleration (via Skia-motorn) för text med subpixel-noggrannhet och mjuka animationer.
  • Låg overhead: jämfört med Electron eller WPF är Slints runtime-overhead minimal.

3. Viktiga tekniska implementeringar ​

3.1 WSL-instansdetektering och parsning ​

Appen hämtar instansstatus i realtid genom att anropa wsl.exe --list --verbose och parsa utdatan (med hantering av UTF-16-kodning).

  • Lågnivåavkodning: en egenutvecklad effektiv codec säkerställer korrekt parsning av utdata på Windows-system med olika språkinställningar.
  • Statussynkronisering: dubbla synkroniseringsmekanismer: periodisk polling + åtgärdsutlöst synkronisering.

3.2 Migrering av diskavbildningar (VHDX Move) ​

Migreringsfunktionen använder WSL:s import-/exportmekanism, men är högt abstraherad och atomisk.

  • Transaktionsgaranti: före migrering låser appen måldistributionen via en mutex (Mutex) för att förhindra dataskador genom samtidiga operationer.
  • Automatisk registrering: efter migrering omdirigerar appen automatiskt VHDX-sökvägen och registrerar distributionen på nytt; användaren behöver inte göra något manuellt.

3.3 Portvidarebefordran och brandväggsautomatisering ​

Nätverksfunktionen är mer än ett enkelt anrop av netsh interface portproxy.

  • Livscykelhantering av regler: appen detekterar automatiskt befintliga brandväggsregler. När användaren skapar en vidarebefordran skapar appen automatiskt inkommande undantagsregler via Windows-API eller CLI.
  • Automatisk IP-hämtning: genom att parsa resultatet av wsl hostname -I mappas de virtuella nätverks-IP:erna mellan värd och instans automatiskt.

3.4 USBIP-integration ​

Använder kommandoradsgränssnittet i usbipd-win.

  • Rättighetshöjning: bindningsoperationer kräver administratörsbehörighet; backend-logiken implementerar en elegant vidarebefordran av UAC-höjningsförfrågningar.
  • Statusmaskin: internt upprätthålls en statusmaskin för USB-enhetsanslutningar för att säkerställa spårbarhet i Attach/Detach-processen.

3.5 Resursövervakning och lättviktsdesign ​

Appen övervakar sin egen resursanvändning via inbyggda Windows-API:er (som GetProcessMemoryInfo).

  • Extremt lättviktig: i tyst fackläge frigör appen aktivt onödiga UI-resurser. För standardteckenuppsättningar som engelska kan minnesanvändningen gå ner till 10MB; för komplexa teckenuppsättningar som kinesiska, japanska och koreanska, på grund av större typsnittsrenderingscache, ligger användningen runt 38MB.

4. Prestandaoptimeringsmått ​

MåttMål/uppmättOptimeringsmetod
Starthastighet< 500 msFörkompilerat Slint-gränssnitt, mindre runtime-parsning.
Basminne (fack)~10 MBMinimera bakgrundspollingfrekvens, frigör renderingscache vid behov.
CPU-användning (inaktiv)< 0,1 %Använder Windows-händelsedrivna modellen, inga tomma polling-loopar.
Renderingsfrekvens60 FPSSkia-GPU-acceleration, rendering med subpixel-anti-aliasing.

5. Backend-uppgiftsdistributionslogik ​

För att säkerställa UI:ns smidighet distribueras alla tidskrävande operationer (som export av VHDX) via asynkrona uppgifter:

  1. Förfrågningsinpackning: UI-tråden packar användaråtgärder som Command-meddelanden.
  2. Meddelandekanal: skickas till bakgrundsuppgiftsprocessorn via tokio::sync::mpsc.
  3. Statusåterkoppling: efter att bakgrundsuppgiften slutförts uppdateras UI via callbacks eller delad status. Denna design säkerställer att gränssnittet även under behandling av flera GB:s säkerhetskopieringsuppgifter omedelbart svarar på användarklick.

6. Säkerhetsöverväganden ​

  • Atomiska operationer: förhandsvalidering är implementerad för kritisk instans-avkoppling och migrering.
  • UAC-rättighetshantering: begär endast behörigheter när nödvändigt (t.ex. vid bindning av USB-enheter), enligt principen om minsta behörighet.
  • Lokal lagring: konfigurationen lagras endast lokalt i ~\.wsldashboard, utan någon molnsynkronisering, för att skydda användarens integritet.