Skip to content

Whitepaper

Αυτό το έγγραφο παρέχει μια εις βάθος ματιά στον αρχιτεκτονικό σχεδιασμό, τις τεχνολογικές επιλογές και την υποκείμενη λογική υλοποίησης βασικών λειτουργιών του WSL Dashboard, που απευθύνεται σε προγραμματιστές και προχωρημένους χρήστες που αναζητούν μια τεχνική προοπτική.

1. Αρχιτεκτονική επισκόπηση

Το WSL Dashboard υιοθετεί μια κλασική αρχιτεκτονική αντιδραστική UI-οδηγούμενη + ασύγχρονη backend εργασία, εκμεταλλευόμενο το σύστημα τύπων και το μοντέλο ιδιοκτησίας της Rust για να εγγυηθεί ασφάλεια μνήμης και υψηλή απόδοση ταυτοχρονισμού.

Βασικά στοιχεία

  • Frontend (UI): Κατασκευασμένο πάνω στη δηλωτική διεπαφή Slint. Το νήμα UI είναι υπεύθυνο για την απόδοση και την αλληλεπίδραση χρήστη.
  • Backend (Runtime): Κατασκευασμένο πάνω στον ασύγχρονο χρόνο εκτέλεσης Tokio. Υπεύθυνο για την αποστολή και εκτέλεση εντολών συστήματος (CLI), I/O αρχείων και ακροατών δικτύου.
  • Επικοινωνία: Το νήμα UI και οι ασύγχρονες εργασίες επικοινωνούν αποτελεσματικά και με ασφάλεια νημάτων μέσω Καναλιών (MPSC) και Κοινόχρηστης κατάστασης (Arc/Mutex/RwLock).

2. Τεχνολογική αιτιολόγηση

Γιατί Rust;

  • Απόδοση: Αφαιρέσεις μηδενικού κόστους, μεταγλώττιση σε μηχανικό κώδικα, χωρίς παύσεις GC.
  • Ασφάλεια μνήμης: Εξαλείφει την υπερχείλιση buffer και τους αγώνες δεδομένων κατά τη μεταγλώττιση — κρίσιμο για ένα εργαλείο που λειτουργεί σε επίπεδο συστήματος (μετανάστεση δίσκου, διαμόρφωση δικτύου).
  • Μέγεθος δυαδικού: Στατική σύνδεση όλων των εξαρτήσεων για παραγωγή ενός εκτελέσιμου αρχείου μονής λήψης.

Γιατί Slint + Skia;

  • Δηλωτική σύνταξη: Διαχωρίζει την περιγραφή UI από τη λογική, διατηρώντας τη βάση κώδικα καθαρή και συντηρήσιμη.
  • Skia απόδοση: Εκμεταλλεύεται την επιτάχυνση GPU απευθείας (μέσω του κινητήρα Skia), προσφέροντας σαφήνεια κειμένου υπο-εικονοστοιχείου και ομαλές κινήσεις.
  • Χαμηλό κόστος: Σε σύγκριση με Electron ή WPF, το αποτύπωμα χρόνου εκτέλεσης του Slint είναι ελάχιστο.

3. Βασικές τεχνικές υλοποιήσεις

3.1 Ανίχνευση & ανάλυση WSL στιγμιότυπων

Η εφαρμογή ανακτά την κατάσταση στιγμιότυπων σε πραγματικό χρόνο καλώντας wsl.exe --list --verbose και αναλύοντας την έξοδό της (χειρισμός κωδικοποίησης UTF-16).

  • Αποκωδικοποίηση χαμηλού επιπέδου: Ένα προσαρμοσμένο, αποτελεσματικό encoder/decoder εξασφαλίζει σωστή ανάλυση εξόδου σε περιβάλλοντα Windows με διαφορετικές περιφερειακές ρυθμίσεις.
  • Συγχρονισμός κατάστασης: Χρησιμοποιεί έναν διπλό μηχανισμό συγχρονισμού χρονομετρημένου polling σε συνδυασμό με ενημερώσεις που ενεργοποιούνται από λειτουργίες.

3.2 Μετανάστεση εικόνας δίσκου (VHDX μετακίνηση)

Η λειτουργία μετανάστεσης εκμεταλλεύεται τον μηχανισμό import/export του WSL, αλλά με υψηλό επίπεδο αφαίρεσης και ατομικότητας.

  • Εγγύηση συναλλαγής: Πριν ξεκινήσει η μετανάστεση, η εφαρμογή κλειδώνει τη διανομή στόχου μέσω ενός Mutex για να αποτρέψει ταυτόχρονες λειτουργίες από την πρόκληση φθοράς δεδομένων.
  • Αυτόματη εγγραφή: Μετά την ολοκλήρωση της μετανάστεσης, η εφαρμογή αυτόματα ανακατευθύνει τη διαδρομή VHDX και επανεγγράφει τη διανομή — δεν απαιτείται χειροκίνητη παρέμβαση.

3.3 Προώθηση θυρών & αυτοματισμός τοίχους προστασίας

Η λειτουργία δικτύωσης υπερβαίνει μια απλή κλήση netsh interface portproxy.

  • Διαχείριση κύκλου ζωής κανόνων: Η εφαρμογή ανιχνεύει αυτόματα υπάρχοντες κανόνες τοίχους προστασίας. Όταν ο χρήστης δημιουργεί έναν κανόνα προώθησης, δημιουργεί ταυτόχρονα μια εξαίρεση εισερχομένων μέσω Windows API ή CLI.
  • Αυτόματη επίλυση IP: Αναλύοντας την έξοδο του wsl hostname -I, μαπάρει αυτόματα τις εικονικές δικτυακές IP μεταξύ κεντρικού υπολογιστή και στιγμιότυπου.

3.4 Ενσωμάτωση USBIP

Εκμεταλλεύεται τη διεπαφή γραμμής εντολών usbipd-win.

  • Διαχείριση ανύψωσης: Οι λειτουργίες δέσμευσης απαιτούν δικαιώματα διαχειριστή. Το backend υλοποιεί κομψή προώθηση αιτημάτων ανύψωσης UAC.
  • Μηχανή κατάστασης: Διατηρεί μια εσωτερική μηχανή κατάστασης σύνδεσης συσκευής USB για εξασφάλιση πλήρους ιχνηλασιμότητας των λειτουργιών Attach/Detach.

3.5 Παρακολούθηση πόρων & ελάχιστο αποτύπωμα

Η εφαρμογή παρακολουθεί τη δική της χρήση πόρων καλώντας εγγενείς Windows API (π.χ. GetProcessMemoryInfo).

  • Ακραία αποτελεσματικότητα: Σε σιωπηλή λειτουργία tray, η εφαρμογή απελευθερώνει προληπτικά περιττούς πόρους UI. Για τυπικά σετ χαρακτήρων (π.χ. αγγλικά), η χρήση μνήμης μπορεί να είναι τόσο χαμηλή όσο 10MB· για πολύπλοκα σετ χαρακτήρων (π.χ. CJK), είναι περίπου 38MB λόγω της μεγαλύτερης μνήμης cache απόδοσης γραμματοσειρών.

4. Μετρήσεις απόδοσης

ΜετρικόΣτόχος / ΜετρημένοΠροσέγγιση βελτιστοποίησης
Χρόνος εκκίνησης< 500msΠρο-μεταγλωττισμένη διεπαφή Slint, ελαχιστοποίηση ανάλυσης χρόνου εκτέλεσης.
Βασική μνήμη (tray)~10MBΕλαχιστοποιημένη συχνότητα polling παρασκηνίου, απελευθέρωση cache απόδοσης κατ' απαίτηση.
Χρήση CPU (αδρανής)< 0.1%Μοντέλο Windows βασισμένο σε γεγονότα, χωρίς busy-loop polling.
Ρυθμός καρέ απόδοσης60 FPSΕπιτάχυνση Skia GPU, απόδοση anti-aliasing υπο-εικονοστοιχείου.

5. Λογική αποστολής backend εργασιών

Για εξασφάλιση ανταπόκρισης UI, όλες οι χρονοβόρες λειτουργίες (π.χ. εξαγωγή VHDX) αποστέλλονται ως ασύγχρονες εργασίες:

  1. Ενθυλάκωση αιτήματος: Το νήμα UI ενθυλακώνει τις ενέργειες χρήστη σε μηνύματα Command.
  2. Κανάλι μηνυμάτων: Τα στέλνει στον χειριστή εργασιών παρασκηνίου μέσω tokio::sync::mpsc.
  3. Αντίκτυπο κατάστασης: Μόλις ολοκληρωθεί η εργασία παρασκηνίου, ενημερώνει το UI μέσω callback ή κοινόχρηστης κατάστασης. Αυτός ο σχεδιασμός εξασφαλίζει ότι ακόμη και κατά την επεξεργασία εργασίας αντιγραφής ασφαλείας πολλαπλών gigabyte, η διεπαφή παραμένει πλήρως ανταποκρινόμενη στην είσοδο χρήστη.

6. Εκτιμήσεις ασφαλείας

  • Ατομικές λειτουργίες: Προ-πτητική επικύρωση υλοποιείται για κρίσιμες λειτουργίες κατάργησης εγγραφής στιγμιότυπου και μετανάστεσης.
  • Διαχείριση ανύψωσης UAC: Αυξημένα δικαιώματα ζητούνται μόνο όταν είναι απαραίτητο (π.χ. δέσμευση συσκευής USB), σύμφωνα με την αρχή ελάχιστων προνομίων.
  • Τοπική αποθήκευση: Η διαμόρφωση αποθηκεύεται μόνο στον τοπικό κατάλογο ~\.wsldashboard χωρίς κανένα συγχρονισμό cloud, προστατεύοντας το απόρρητο του χρήστη.