Skip to content

Whitepaper

Dette dokumentet gir en dyptgående titt på den arkitektoniske utformingen, teknologivalgene og den underliggende implementeringslogikken til nøkkelfunksjonene i WSL Dashboard, ment for utviklere og avanserte brukere som søker et teknisk perspektiv.

1. Arkitekturoversikt

WSL Dashboard bruker en klassisk reaktiv UI-drevet + asynkron backend-oppgave-arkitektur, som utnytter Rusts typesystem og eiermodell for å garantere minnesikkerhet og høy ytelse ved samtidighet.

Kjernekomponenter

  • Frontend (UI): Bygget på Slint deklarativt grensesnitt. UI-tråden er ansvarlig for gjengivelse og brukerinteraksjon.
  • Backend (Runtime): Bygget på Tokio asynkron runtime. Ansvarlig for sending og utføring av systemkommandoer (CLI), fil-I/O og nettverkslyttere.
  • Kommunikasjon: UI-tråden og asynkrone oppgaver kommuniserer effektivt og tråd-sikkert via Kanaler (MPSC) og Delt tilstand (Arc/Mutex/RwLock).

2. Teknologisk begrunnelse

Hvorfor Rust?

  • Ytelse: Nullkostnadsabstraksjoner, kompilert til maskinkode, ingen GC-pauser.
  • Minnesikkerhet: Eliminerer bufferoverløp og dataløp ved kompilering — kritisk for et verktøy som opererer på systemnivå (diskmigrering, nettverkskonfigurasjon).
  • Binær størrelse: Statisk lenker alle avhengigheter for å produsere en enkelt-fil portabel kjørbar.

Hvorfor Slint + Skia?

  • Deklarativ syntaks: Skiller UI-beskrivelse fra logikk og holder kodebasen ren og vedlikeholdbar.
  • Skia-gjengivelse: Utnytter GPU-akselerasjon direkte (via Skia-motoren), gir sub-piksel tekstklarhet og jevne animasjoner.
  • Lav overhead: Sammenlignet med Electron eller WPF er Slints runtime-fotavtrykk minimalt.

3. Nøkkeltekniske implementeringer

3.1 WSL-instansdeteksjon og -parsing

Appen henter sanntidsinstansstatus ved å kalle wsl.exe --list --verbose og parse utdataene (håndtering av UTF-16-koding).

  • Lav-nivå dekoding: En spesialbygget, effektiv encoder/decoder sikrer korrekt utdataparsing på tvers av Windows-miljøer med forskjellige regionale innstillinger.
  • Tilstandssynkronisering: Bruker en dobbelt synkroniseringsmekanisme av tidsbestemt polling kombinert med operasjon-utløste oppdateringer.

3.2 Diskbildemigrering (VHDX-flytting)

Migreringsfunksjonen utnytter WSLs import/export-mekanisme, men med et høyt abstraksjonsnivå og atomaritet.

  • Transaksjonsgaranti: Før migreringen begynner, låser appen måldistribusjonen via en Mutex for å hindre samtidige operasjoner i å forårsake datakorrupsjon.
  • Automatisk registrering: Når migreringen er fullført, omdirigerer appen automatisk VHDX-stien og registrerer distribusjonen på nytt — ingen manuell inngripen kreves.

3.3 Portvideresending og brannmur-automatisering

Nettverksfunksjonen går utover et enkelt netsh interface portproxy-kall.

  • Regel-livssyklusstyring: Appen oppdager automatisk eksisterende brannmurregler. Når en bruker oppretter en videresendelsesregel, oppretter den samtidig en innkommende unntaksregel via Windows API eller CLI.
  • Automatisk IP-oppløsning: Ved å parse utdataene fra wsl hostname -I, mapper den automatisk virtuelle nettverks-IPer mellom vert og instans.

3.4 USBIP-integrasjon

Utnytter usbipd-win kommandolinjegrensesnitt.

  • Opphåndtering: Bind-operasjoner krever administratorrettigheter. Backend implementerer elegant UAC-opphøyingsforespørselvideresending.
  • Tilstandsmaskin: Opprettholder en intern USB-enhetstilkoblingstilstandsmaskin for å sikre full sporbarhet av Attach/Detach-operasjoner.

3.5 Ressursovervåking og minimalt fotavtrykk

Appen overvåker eget ressursbruk ved å kalle native Windows API-er (f.eks. GetProcessMemoryInfo).

  • Ekstrem effektivitet: I stille tray-modus frigjør appen proaktivt unødvendige UI-ressurser. For standard tegnsett (f.eks. engelsk) kan minnebruk være så lavt som 10MB; for komplekse tegnsett (f.eks. CJK) er det omtrent 38MB på grunn av den større skrifttypen-gjengivelsesbufferen.

4. Ytelsesbenchmarks

MålMål / MåltOptimaliseringstilnærming
Oppstartstid< 500msForhåndskompilert Slint-grensesnitt, minimering av runtime-parsing.
Basisminne (tray)~10MBMinimeret bakgrunnspolling-frekvens, on-demand frigjøring av gjengivelsesbuffer.
CPU-bruk (inaktiv)< 0.1%Windows hendelsesdrevet modell, ingen busy-loop polling.
Gjengivelsesbildefrekvens60 FPSSkia GPU-akselerasjon, sub-piksel anti-aliaset gjengivelse.

5. Backend oppgavedispatch-logikk

For å sikre UI-responsivitet sendes alle tidskrevende operasjoner (f.eks. VHDX-eksport) som asynkrone oppgaver:

  1. Forespørselinnkapsling: UI-tråden innkapsler brukerhandlinger i Command-meldinger.
  2. Meldingskanal: Sender dem til bakgrunnsoppgavebehandleren via tokio::sync::mpsc.
  3. Tilstandscallback: Når bakgrunnsoppgaven er fullført, oppdaterer den UI via en callback eller delt tilstand. Denne utformingen sikrer at selv under behandling av en multi-gigabyte sikkerhetskopieringsoppgave, forblir grensesnittet fullt responsivt overfor brukerinndata.

6. Sikkerhetshensyn

  • Atomiske operasjoner: Pre-fly-validering er implementert for kritiske instans-avregistrerings- og migreringsoperasjoner.
  • UAC-opphåndtering: Forhøyede rettigheter forespørres kun når nødvendig (f.eks. binding av en USB-enhet), i samsvar med prinsippet om minimale privilegier.
  • Lokalt lagring: Konfigurasjon lagres kun i den lokale ~\.wsldashboard-mappen uten noen form for skylagring, som beskytter brukerens personvern.