Skip to content

Whitepaper

Dokumen ini memberikan tinjauan mendalam tentang desain arsitektur, pilihan teknologi, dan logika implementasi yang mendasari fitur-fitur utama WSL Dashboard, ditujukan untuk pengembang dan pengguna tingkat lanjut yang mencari perspektif teknis.

1. Ikhtisar Arsitektur

WSL Dashboard mengadopsi arsitektur klasik UI-driven reaktif + tugas backend asinkron, memanfaatkan sistem kepemilikan dan model Rust untuk menjamin keamanan memori dan kinerja konkurensi tinggi.

Komponen Inti

  • Frontend (UI): Dibangun di atas antarmuka deklaratif Slint. Thread UI bertanggung jawab atas rendering dan interaksi pengguna.
  • Backend (Runtime): Dibangun di atas runtime asinkron Tokio. Bertanggung jawab atas pengiriman dan eksekusi perintah sistem (CLI), file I/O, dan listener jaringan.
  • Komunikasi: Thread UI dan tugas asinkron berkomunikasi secara efisien dan thread-safe melalui Channel (MPSC) dan State Bersama (Arc/Mutex/RwLock).

2. Alasan Teknologi

Mengapa Rust?

  • Kinerja: Abstraksi biaya nol, dikompilasi ke kode mesin asli, tanpa jeda GC.
  • Keamanan Memori: Menghilangkan buffer overflow dan data race pada saat kompilasi — sangat penting untuk alat yang beroperasi pada tingkat sistem (migrasi disk, konfigurasi jaringan).
  • Ukuran Binary: Secara statis menautkan semua dependensi untuk menghasilkan satu file portabel yang dapat dieksekusi.

Mengapa Slint + Skia?

  • Sintaks Deklaratif: Memisahkan deskripsi UI dari logika, menjaga kodebase tetap bersih dan terawat.
  • Rendering Skia: Memanfaatkan akselerasi GPU secara langsung (melalui mesin Skia), memberikan kejelasan teks sub-piksel dan animasi yang halus.
  • Overhead Rendah: Dibandingkan dengan Electron atau WPF, jejak runtime Slint sangat minimal.

3. Implementasi Teknis Utama

3.1 Deteksi & Parsing Instans WSL

Aplikasi mengambil status instans secara real-time dengan memanggil wsl.exe --list --verbose dan mengurai outputnya (menangani pengodean UTF-16).

  • Dekoding tingkat rendah: Encoder/decoder kustom yang efisien memastikan parsing output yang benar di berbagai lingkungan Windows dengan pengaturan regional yang berbeda.
  • Sinkronisasi status: Menggunakan mekanisme sinkronisasi ganda polling terjadwal yang dikombinasikan dengan pembaruan yang dipicu operasi.

3.2 Migrasi Citra Disk (Pemindahan VHDX)

Fitur migrasi memanfaatkan mekanisme import/export WSL, tetapi dengan tingkat abstraksi dan atomicitas yang tinggi.

  • Jaminan transaksional: Sebelum migrasi dimulai, aplikasi mengunci distribusi target melalui Mutex untuk mencegah operasi simultan menyebabkan korupsi data.
  • Pendaftaran otomatis: Setelah migrasi selesai, aplikasi secara otomatis mengarahkan ulang jalur VHDX dan mendaftarkan ulang distribusi — tidak diperlukan intervensi manual.

3.3 Penerusan Port & Otomatisasi Firewall

Fitur jaringan melampaui panggilan netsh interface portproxy sederhana.

  • Manajemen siklus hidup aturan: Aplikasi secara otomatis mendeteksi aturan firewall yang ada. Saat pengguna membuat aturan penerusan, secara bersamaan membuat aturan pengecualian inbound melalui Windows API atau CLI.
  • Resolusi IP otomatis: Dengan mengurai output dari wsl hostname -I, secara otomatis memetakan IP jaringan virtual antara host dan instans.

3.4 Integrasi USBIP

Memanfaatkan antarmuka baris perintah usbipd-win.

  • Penanganan elevasi: Operasi bind memerlukan hak administrator. Backend mengimplementasikan penerusan permintaan elevasi UAC secara elegan.
  • Mesin status: Mempertahankan mesin status koneksi perangkat USB internal untuk memastikan pelacakan penuh operasi Attach/Detach.

3.5 Pemantauan Sumber Daya & Jejak Minimal

Aplikasi memantau penggunaan sumber dayanya sendiri dengan memanggil Windows API asli (mis. GetProcessMemoryInfo).

  • Efisiensi ekstrem: Dalam mode tray senyap, aplikasi secara proaktif melepaskan sumber daya UI yang tidak diperlukan. Untuk set karakter standar (mis. Inggris), penggunaan memori bisa serendah 10MB; untuk set karakter kompleks (mis. CJK), sekitar 38MB karena cache rendering font yang lebih besar.

4. Benchmark Performa

MetrikTarget / TerukurPendekatan Optimasi
Waktu Mulai< 500msAntarmuka Slint yang sudah dikompilasi sebelumnya, meminimalkan parsing runtime.
Memori Dasar (tray)~10MBFrekuensi polling latar belakang diminimalkan, pelepasan cache render sesuai permintaan.
Penggunaan CPU (idle)< 0.1%Model berbasis event Windows, tanpa polling busy-loop.
Frame Rate Rendering60 FPSAkselerasi GPU Skia, rendering anti-aliasing sub-piksel.

5. Logika Dispatch Tugas Backend

Untuk memastikan responsivitas UI, semua operasi yang memakan waktu (mis. ekspor VHDX) dikirim sebagai tugas asinkron:

  1. Enkapsulasi permintaan: Thread UI mengenkapsulasi tindakan pengguna ke dalam pesan Command.
  2. Kanal pesan: Mengirimkannya ke handler tugas latar belakang melalui tokio::sync::mpsc.
  3. Callback status: Setelah tugas latar belakang selesai, memperbarui UI melalui callback atau status bersama. Desain ini memastikan bahwa bahkan saat memproses tugas backup multi-gigabyte, antarmuka tetap sepenuhnya responsif terhadap input pengguna.

6. Pertimbangan Keamanan

  • Operasi atomik: Validasi pra-penerbangan diimplementasikan untuk operasi pembatalan pendaftaran instans dan migrasi kritis.
  • Manajemen elevasi UAC: Hak istimewa yang ditingkatkan diminta hanya jika diperlukan (mis. mengikat perangkat USB), mengikuti prinsip hak istimewa minimum.
  • Penyimpanan lokal: Konfigurasi hanya disimpan ke direktori lokal ~\.wsldashboard tanpa sinkronisasi cloud apa pun, melindungi privasi pengguna.