Skip to content

Whitepaper

Tämä asiakirja tarjoaa syvällisen katsauksen WSL Dashboard -sovelluksen arkkitehtoniseen suunnitteluun, teknologiavalintoihin ja keskeisten ominaisuuksien toteutuslogiikkaan, ja on tarkoitettu kehittäjille ja edistyneille käyttäjille, jotka etsivät teknistä näkökulmaa.

1. Arkkitehtuurin yleiskatsaus

WSL Dashboard käyttää klassista reaktiivinen UI-ohjattu + asynkroninen backend-tehtävä -arkkitehtuuria, hyödyntäen Rust-kielen tyyppijärjestelmää ja omistusmallia muistiturvallisuuden ja korkean suorituskyvyn takaamiseksi.

Ydinominaisuudet

  • Frontend (UI): Rakennettu Slint -deklaratiivisen käyttöliittymän päälle. UI-säie on vastuussa renderöinnistä ja käyttäjän vuorovaikutuksesta.
  • Backend (Runtime): Rakennettu Tokio -asynkronisen ajonaikaisen päälle. Vastuussa järjestelmäkomentojen (CLI), tiedoston I/O:n ja verkon kuuntelijoiden lähettämisestä ja suorittamisesta.
  • Viestintä: UI-säie ja asynkroniset tehtävät viestivät tehokkaasti ja säieturvallisesti Kanavien (MPSC) ja Jaetun tilan (Arc/Mutex/RwLock) kautta.

2. Teknologia-perustelut

Miksi Rust?

  • Suorituskyky: Nollakustannusabstraktiot, käännöskoodi natiivikonekoodiksi, ei GC-taukoja.
  • Muistiturvallisuus: Poistaa puskurin ylivuodon ja datan kilpailutilanteet käännösaikana — kriittinen järjestelmätasolla toimivalle työkalulle (levyn siirto, verkon määritys).
  • Binäärikoko: Staattisesti linkittää kaikki riippuvuudet tuottaen yhden tiedoston siirrettävän ohjelman.

Miksi Slint + Skia?

  • Deklaratiivinen syntaksi: Erittää UI-kuvauksen logiikasta, pitäen koodipuhtauden ja ylläpidettävyyden.
  • Skia-renderöinti: Hyödyntää GPU-kiihdytystä suoraan (Skia-moottorin kautta), tarjoten alipikselitekstiselkeyden ja sulavat animaatiot.
  • Matala kuorma: Verrattuna Electroniin tai WPF:ään, Slintin ajonaikainen jälki on minimaalinen.

3. Keskeiset tekniset toteutukset

3.1 WSL-instanssien havaitseminen ja jäsentäminen

Sovellus hakee reaaliaikaisen instanssitilan kutsumalla wsl.exe --list --verbose ja jäsentämällä sen tulosteen (UTF-16-koodauksen käsittely).

  • Matalan tason dekoodaus: Mukautettu, tehokas enkooderi/dekooderi varmistaa oikean tulosteen jäsentämisen eri Windows-ympäristöissä eri alueasetuksilla.
  • Tilan synkronointi: Käyttää kahden synkronointimekanismia — ajoitettua kyselyä yhdistettynä toimintopäivitettyihin päivityksiin.

3.2 Levykuvansiirto (VHDX-siirto)

Siirto-ominaisuus hyödyntää WSL:n tuonti/vienti-mekanismia, mutta korkealla abstraktiotasolla ja atomiikkuudella.

  • Transaktiotakuu: Ennen siirron alkua sovellus lukitsee kohdejakelun Mutexin avulla estääkseen samanaikaiset toiminnot aiheuttamasta tietojen korruptiota.
  • Automaattinen rekisteröinti: Siirron valmistuttua sovellus automaattisesti uudelleenohjaa VHDX-polin ja rekisteröi jakelun uudelleen — ei manuaalista puuttumista vaadita.

3.3 Portin edelleenohjaus ja palomuuriautomatisointi

Verkko-ominaisuus yksinkertaisen netsh interface portproxy -kutsun.

  • Sääntöjen elinkaaren hallinta: Sovellus havaitsee automaattisesti olemassa olevat palomuurisäännöt. Kun käyttäjä luo edelleenohjaussäännön, se luo samanaikaisesti saapuvan poikkeussäännön Windows API:n tai CLI:n kautta.
  • Automaattinen IP-ratkaisu: Jäsentämällä wsl hostname -I -tuloksen, se automaattisesti kartoittaa virtuaaliset verkko-IP:t isännän ja instanssin välillä.

3.4 USBIP-integraatio

Hyödyntää usbipd-win -komentorivirajapintaa.

  • Oikeuksien hallinta: Sitomistoiminnot vaativat järjestelmänvalvojan oikeudet. Backend toteuttaa elegantin UAC-oikeuksien korotuspyyntöjen välityksen.
  • Tilakone: Ylläpitää sisäistä USB-laitteen yhteyden tilakonetta varmistaakseen Attach/Detach-toimintojen täydellisen jäljitettävyyden.

3.5 Resurssien seuranta ja minimaalinen jälki

Sovellus seuraa omaa resurssien käyttöään kutsumalla natiiveja Windows API:ta (esim. GetProcessMemoryInfo).

  • Äärimmäinen tehokkuus: Hiljaisessa tilalokerotilassa sovellus vapauttaa ennakoivasti tarpeettomat UI-resurssit. Vakio merkistöille (esim. englanti) muistinkäyttö voi olla vain 10MB; monimutkaisille merkistöille (esim. CJK) se on noin 38MB suuremman fonttivälimuistin vuoksi.

4. Suorituskyvyn mittaukset

MittariTavoite / MitattuOptimointistrategia
Käynnistysaika< 500msEsikääntynyt Slint-käyttöliittymä, ajonaikaisen jäsentämisen minimointi.
Perusmuisti (tilala)~10MBMinimoitu taustakyselyjen tiheys, tarvittaessa välimuistin vapautus.
CPU-käyttö (jouten)< 0.1%Windows-tapahtumapohjainen malli, ei kierrätyskyselyjä.
Renderöintinopeus60 FPSSkia GPU -kiihdytys, alipikseli-antialiasointirenderöinti.

5. Backend-tehtävien lähetyslogiikka

UI-responsiivisuuden varmistamiseksi kaikki aikaa vievät toiminnot (esim. VHDX-vienti) lähetetään asynkronisina tehtävinä:

  1. Pyynnön kapselointi: UI-säie kapseloi käyttäjän toiminnot Command-viesteiksi.
  2. Viestikanava: Lähettää ne taustatehtävien käsittelijälle tokio::sync::mpsc:n kautta.
  3. Tilapalaute: Kun taustatehtävä valmistuu, se päivittää UI:n palautteen tai jaetun tilan kautta. Tämä suunnitelma varmistaa, että jopa usean gigatavun varmuuskopioinnin käsittelyn aikana käyttöliittymä pysyy täysin responsiivisena käyttäjän syötteelle.

6. Turvallisuusnäkökohdat

  • Atomiset toiminnot: Ennakkotarkistus on toteutettu kriittisille instanssien rekisteröinnin poisto- ja siirtotoiminnoille.
  • UAC-oikeuksien hallinta: Korotettuja oikeuksia pyydetään vain tarvittaessa (esim. USB-laitteen sitominen), noudattaen vähimmäisoikeuksien periaatetta.
  • Paikallinen tallennus: Määritykset tallennetaan vain paikalliseen ~\.wsldashboard-hakemistoon ilman mitään pilvisynkronointia, suojaten käyttäjän yksityisyyttä.