Skip to content

Hvitbok ​

Dette dokumentet dykker ned i WSL Dashboards arkitekturdesign, teknologivalg og den underliggende implementeringslogikken for nøkkelfunksjoner, med det formål å gi utviklere og avanserte brukere et teknisk dybde-perspektiv.

1. Arkitekturoversikt ​

WSL Dashboard bruker den klassiske arkitekturen responsiv UI-drevet + asynkrone backend-oppgaver, og bruker Rust-språkets typesystem og eierskapsmodell for å sikre minnesikkerhet og høy samtidighetsytelse.

Kjerneprogramkomponenter ​

  • Frontend (UI): Basert på det deklarative grensesnittet Slint. UI-tråden håndterer rendering og brukerinteraksjon.
  • Backend (Runtime): Basert på den asynkrone kjøretiden Tokio. Håndterer distribusjon og utførelse av systemkommandoer (CLI), fil-I/O og nettverkslytting.
  • Kommunikasjon: UI-tråden og asynkrone oppgaver kommuniserer effektivt og trådsikkert via Channel (MPSC) og delt tilstand (Arc/Mutex/RwLock).

2. Begrunnelse for teknologivalg ​

Hvorfor Rust? ​

  • Ytelse: Nullkostnadsabstraksjoner, kompileres til native maskinkode, ingen GC-støt.
  • Minnesikkerhet: Eliminerer bufferoverløp og dataløp på kompileringstidspunktet, noe som er avgjørende for verktøy som arbeider tett på systemet (f.eks. diskmigrering, nettverkskonfigurasjon).
  • Binær størrelse: Statisk kobling av alle avhengigheter produserer en enkeltfil, bærbar kjørbar fil.

Hvorfor Slint + Skia? ​

  • Deklarativ syntaks: Grensesnittbeskrivelse atskilt fra logikk, enkelt vedlikeholdbar kode.
  • Skia-rendering: Utnytter GPU-akselerasjon direkte (via Skia-motoren) og gir subpiksel-klar tekst og glidende animasjoner.
  • Lave kostnader: Sammenlignet med Electron eller WPF er Slints kjøretidskostnader ekstremt lave.

3. Viktige tekniske implementeringer ​

3.1 Registrering og parsing av WSL-instanser ​

Applikasjonen henter instansstatus i sanntid ved å kalle wsl.exe --list --verbose og parse utdataene (håndterer UTF-16-koding).

  • Underliggende avkoding: En selvutviklet effektiv kodek sikrer korrekt parsing av utdata i Windows-miljøer med forskjellige regionale innstillinger.
  • Statussynkronisering: Bruker en dobbeltsynkroniseringsmekanisme med periodisk polling + handlingsutløsing.

3.2 Migrering av diskbilder (VHDX Move) ​

Migreringsfunksjonen utnytter WSLs import/eksportmekanisme, men med høy abstraksjon og atomisk behandling.

  • Transaksjonsgaranti: Før migreringen starter, låser applikasjonen måldistribusjonen via en mutex (Mutex) for å forhindre at samtidige operasjoner skader data.
  • Automatisk registrering: Etter migreringen omdirigerer applikasjonen automatisk VHDX-stien og registrerer distribusjonen på nytt; ingen manuell inngripen nødvendig.

3.3 Portvideresending og brannmurautomatisering ​

Nettverksfunksjonen er ikke bare et netsh interface portproxy-kall.

  • Livssyklusstyring av regler: Applikasjonen registrerer automatisk eksisterende brannmurregler. Når brukeren oppretter en videresending, oppretter applikasjonen samtidig innkommende unntaksregler via Windows API eller CLI.
  • Automatisk IP-henting: Ved å parse resultatet av wsl hostname -I kartlegges de virtuelle nettverks-IP-ene mellom vert og instans automatisk.

3.4 USBIP-integrasjon ​

Utnytter kommandolinjegrensesnittet fra usbipd-win.

  • Rettighetsforhøyelse: Bindingsoperasjoner krever administratorrettigheter; backend-logikken implementerer en elegant videresending av UAC-rettighetsforespørsler.
  • Statustilstandsmaskin: Vedlikeholder internt en tilstandsmaskin for USB-enhetstilkobling for å sikre sporbarhet i Attach/Detach-prosessen.

3.5 Ressursovervåking og lettvektsdesign ​

Applikasjonen overvåker sitt eget ressursforbruk via native Windows-API-er (f.eks. GetProcessMemoryInfo).

  • Ekstremt lettvekts: I statusfeltets stille modus frigjør applikasjonen aktivt unødvendige UI-ressurser. For standardtegnsett som engelsk kan minneforbruket komme ned på 10MB; for komplekse tegnsett som kinesisk, japansk og koreansk kreves større fontrenderingsbuffere, noe som gir et forbruk på rundt 38MB.

4. Ytelsesoptimeringsmålinger ​

MålingMål/faktiskOptimeringsmetode
Starthastighet< 500msPrekompilert Slint-grensesnitt, reduserer kjøretidsparsing.
Grunnleggende minne (statusfelt)~10MBMinimerer bakgrunnspolling-frekvensen, frigjør renderingsbuffere etter behov.
CPU-forbruk (i ro)< 0,1%Bruker Windows' hendelsesdrevne modell, unngår tomme pollingsløyfer.
Rendering-bildehastighet60 FPSSkia GPU-akselerasjon, subpiksel anti-aliasing-rendering.

5. Logikk for distribusjon av backend-oppgaver ​

For å sikre et glidende UI distribueres alle tidskrevende operasjoner (f.eks. eksport av VHDX) via asynkrone oppgaver:

  1. Forespørselsinnkapsling: UI-tråden innkapsler brukerhandlinger som Command-meldinger.
  2. Meldingkanal: Sendes til backend-oppgavens prosessor via tokio::sync::mpsc.
  3. Statusretur: Når backend-oppgaven er ferdig, oppdateres UI via callback eller delt status. Dette designet sikrer at grensesnittet reagerer i sanntid på brukerklikk, selv under sikkerhetskopieringsoppgaver på flere GB.

6. Sikkerhetshensyn ​

  • Atomiske operasjoner: For kritiske instans-avmonteringer og migreringer implementeres prevalidering.
  • UAC-rettighetsstyring: Ber bare om rettigheter når det er nødvendig (f.eks. binding av USB-enheter), og følger prinsippet om minste privilegium.
  • Lokal lagring: Konfigurasjon lagres bare lokalt i ~\.wsldashboard uten noen skysynkronisering, noe som beskytter brukerens personvern.