Skip to content

Whitepaper

Ta dokument ponuja poglobljen vpogled v arhitekturno zasnovo, tehnološke izbire in osnovno implementacijsko logiko ključnih funkcij WSL Dashboard, namenjen razvijalcem in naprednim uporabnikom, ki iščejo tehnično perspektivo.

1. Pregled arhitekture

WSL Dashboard sprejme klasično arhitekturo reaktivno UI-vodeno + asinhrono backend opravilo, ki izkorišča Rustov sistem tipov in model lastništva za zagotavljanje varnosti pomnilnika in visoke zmogljivosti sočasnosti.

Ključne komponente

  • Frontend (UI): Zgrajen na Slint deklarativnem vmesniku. UI nit je odgovorna za upodabljanje in uporabnikovo interakcijo.
  • Backend (Runtime): Zgrajen na Tokio asinhronem runtime. Odgovoren za pošiljanje in izvajanje sistemskih ukazov (CLI), datotečnega I/O in mrežnih poslušalcev.
  • Komunikacija: UI nit in asinhrona opravila komunicirajo učinkovito in nitno-varno prek Kanalov (MPSC) in Skupnega stanja (Arc/Mutex/RwLock).

2. Tehnološko utemeljitev

Zakaj Rust?

  • Zmogljivost: Abstrakcije z ničelno ceno, prevedene v nativno strojno kodo, brez GC premorov.
  • Varnost pomnilnika: Odpravlja prekoračitve pomnilnika in podatkovne tekme pri prevajanju — kritično za orodje, ki deluje na sistemski ravni (migracija diska, konfiguracija omrežja).
  • Velikost binarne datoteke: Statično povezuje vse odvisnosti za proizvodnjo ene same prenosljive izvedljive datoteke.

Zakaj Slint + Skia?

  • Deklarativna sintaksa: Ločuje opis UI od logike, ohranja kodebazo čisto in vzdržljivo.
  • Skia upodabljanje: Neposredno izkorišča GPU pospeševanje (prek Skia pogona), zagotavlja podpikselno jasnost besedila in gladke animacije.
  • Nizka obremenitev: V primerjavi z Electronom ali WPF je Slintov runtime odtis minimalen.

3. Ključne tehnične implementacije

3.1 Zaznavanje in razčlenjevanje WSL instanc

Aplikacija pridobi stanje instance v realnem času s klicem wsl.exe --list --verbose in razčlenitvijo njegovega izhoda (obravnavanje UTF-16 kodiranja).

  • Nizko-nivojsko dekodiranje: Po meri izdelan, učinkovit encoder/decoder zagotavlja pravilno razčlenitev izhoda v različnih Windows okoljih z različnimi regionalnimi nastavitvami.
  • Sinhronizacija stanja: Uporablja dvojni sinhronizacijski mehanizem časovno usmerjenega poizvedovanja v kombinaciji z operacijsko sproženimi posodobitvami.

3.2 Migracija slike diska (Premik VHDX)

Migracijska funkcija izkorišča WSL mehanizem uvoza/izvoza, vendar z visoko stopnjo abstrakcije in atomičnosti.

  • Transakcijska garancija: Pred začetkom migracije aplikacija zaklene ciljno distribucijo prek Mutexa, da prepreči, da bi sočasne operacije povzročile pokvarjenost podatkov.
  • Samodejna registracija: Po zaključku migracije aplikacija samodejno preusmeri pot VHDX in ponovno registrira distribucijo — ni potrebno ročno posredovanje.

3.3 Posredovanje vrat in avtomatizacija požarnega zidu

Omrežna funkcija presega preprost klic netsh interface portproxy.

  • Upravljanje življenjskega cikla pravil: Aplikacija samodejno zazna obstoječa pravila požarnega zidu. Ko uporabnik ustvari pravilo posredovanja, hkrati ustvari vhodno izjemo prek Windows API ali CLI.
  • Samodejna IP razrešitev: Z razčlenitvijo izhoda wsl hostname -I samodejno preslika virtualna omrežna IP-je med gostiteljem in instanco.

3.4 USBIP integracija

Izkorišča vmesnik ukazne vrstice usbipd-win.

  • Upravljanje dviga pravic: Operacije vezave zahtevajo skrbniške pravice. Backend implementira elegantno posredovanje zahtev za dvig UAC.
  • Stanje stroj: Vzdržuje notranji stroj stanja povezave USB naprave za zagotavljanje popolne sledljivosti operacij Attach/Detach.

3.5 Spremljanje virov in minimalen odtis

Aplikacija spremlja lastno porabo virov s klicem nativnih Windows API-jev (npr. GetProcessMemoryInfo).

  • Skrajna učinkovitost: V tihem načinu pladnja aplikacija proaktivno sprosti nepotrebne UI vire. Za standardne nabore znakov (npr. angleščina) je poraba pomnilnika lahko nizka kot 10MB; za kompleksne nabore znakov (npr. CJK) je približno 38MB zaradi večjega predpomnilnika upodabljanja pisav.

4. Merjenje zmogljivosti

MeritevCilj / IzmerjenoPristop k optimizaciji
Zagon< 500msVnaprej preveden Slint vmesnik, minimizacija razčlenjevanja v izvajanem času.
Osnovni pomnilnik (pladenj)~10MBMinimizirana frekvenca poizvedovanja ozadja, sprostitev predpomnilnika upodabljanja po potrebi.
Uporaba CPU (neaktiven)< 0.1%Windows model, ki temelji na dogodkih, brez busy-loop poizvedovanja.
Hitrost sličic upodabljanja60 FPSSkia GPU pospeševanje, podpikselno glajenje upodabljanja.

5. Logika pošiljanja backend opravil

Za zagotavljanje UI odzivnosti se vsa časovno zahtevna opravila (npr. izvoz VHDX) pošljejo kot asinhrona opravila:

  1. Vgradnja zahtevka: UI nit vgradi dejanja uporabnika v sporočila Command.
  2. Kanal sporočil: Pošlje jih upravitelju opravil ozadja prek tokio::sync::mpsc.
  3. Povratni klic stanja: Ko opravilo ozadja konča, posodobi UI prek povratnega klica ali skupnega stanja. Ta zasnova zagotavlja, da tudi med obdelavo opravila varnostnega kopiranja več gigabajtov vmesnik ostane popolnoma odziven na uporabnikov vnos.

6. Varnostni premisleki

  • Atomske operacije: Predhodna validacija je implementirana za kritična opravila odstranitve registracije instance in migracije.
  • Upravljanje dviga UAC: Povišane pravice se zahtevajo le, kadar je to potrebno (npr. vezava USB naprave), v skladu z načelom najmanjših pravic.
  • Lokalno shranjevanje: Konfiguracija se shrani samo v lokalno mapo ~\.wsldashboard brez kakršne koli sinhronizacije v oblaku, kar ščiti zasebnost uporabnika.