Σύνοψη
- Η αφαίρεση μιας σύγχρονης εφαρμογής (MSIX) στα Windows PCs δεν ισοδυναμεί απαραίτητα με την οριστική διαγραφή των αρχείων της από τον σκληρό δίσκο του συστήματος.
- Η αρχιτεκτονική εγκατάστασης της Microsoft διαχωρίζει τη διαδικασία της εγγραφής (Register) από την τοποθέτηση των δεδομένων (Stage), προσφέροντας μεγαλύτερη ευελιξία σε περιβάλλοντα πολλαπλών χρηστών.
- Κατά την επιλογή «Remove», το λειτουργικό σύστημα ακυρώνει την εγγραφή του συγκεκριμένου χρήστη (Deregister), διαγράφοντας τις συντομεύσεις και τις συσχετίσεις αρχείων, ώστε η εφαρμογή να φαίνεται πως έχει εξαφανιστεί.
- Η τελική διαγραφή του κυρίως όγκου των δεδομένων (Destage) πραγματοποιείται αποκλειστικά και μόνο εάν το σύστημα επιβεβαιώσει πως κανένας άλλος χρήστης ή διεργασία δεν διατηρεί αναφορές στη συγκεκριμένη εφαρμογή.
Η συντριπτική πλειοψηφία των χρηστών υπολογιστών Windows θεωρεί ως αυτονόητο ότι η διαδικασία απεγκατάστασης ενός λογισμικού συνεπάγεται την άμεση και οριστική διαγραφή όλων των σχετικών αρχείων από τον αποθηκευτικό χώρο. Ωστόσο, η σύγχρονη αρχιτεκτονική διαχείρισης πακέτων της Microsoft για το λειτουργικό σύστημα καταδεικνύει ότι αυτή η θεμελιώδης παραδοχή έχει πάψει να υφίσταται.
Όπως αποκάλυψε πρόσφατα ο Howard Kapustein, Principal Software Engineer της Microsoft, μέσα από το επίσημο Microsoft Developer Blog, η εντολή αφαίρεσης μιας εφαρμογής δεν μεταφράζεται πλέον ως η κλασική απεγκατάσταση που γνωρίζαμε τις προηγούμενες δεκαετίες.
Η μετάβαση από το MSI στο σύγχρονο MSIX
Τα σύγχρονα πακέτα εφαρμογών του Windows, τα οποία βασίζονται στην τεχνολογία MSIX, ακολουθούν μια εντελώς διαφορετική λογική εγκατάστασης και αφαίρεσης σε σύγκριση με τα παραδοσιακά εκτελέσιμα αρχεία (EXE) ή τα πακέτα MSI. Ενώ στα παλαιότερα συστήματα η εντολή απεγκατάστασης σηματοδοτούσε την άμεση διαγραφή των εκτελέσιμων αρχείων (binaries), τον καθαρισμό του μητρώου (registry) και την οριστική απομάκρυνση των δεδομένων χρόνου εκτέλεσης (runtime artifacts), το MSIX υιοθετεί μια προσέγγιση που διαχωρίζει τη χρηστικότητα από την αποθήκευση.
Συγκεκριμένα, ο κύκλος ζωής μιας εφαρμογής MSIX βασίζεται σε τέσσερις βασικούς πυλώνες λειτουργίας. Αρχικά, η διαδικασία «Stage» αναλαμβάνει την τοποθέτηση των δεδομένων στον σκληρό δίσκο με απόλυτη ασφάλεια. Στη συνέχεια, το βήμα «Register» αναλαμβάνει τη σύνδεση και τη συσχέτιση του εν λόγω λογισμικού με τον εκάστοτε ενεργό χρήστη του συστήματος. Η διαδικασία της αφαίρεσης ακολουθεί την ακριβώς αντίστροφη συμμετρία, μέσω των λειτουργιών «Deregister» και «Destage». Το σημείο στο οποίο δημιουργείται η παρανόηση έγκειται στο γεγονός ότι το σύστημα δεν εκτελεί και τις δύο αυτές ενέργειες ταυτόχρονα και χωρίς προϋποθέσεις.
Τι συμβαίνει κατά την επιλογή «Remove» στα Windows;
Η εντολή αφαίρεσης (Remove) μιας εφαρμογής πρακτικά ισοδυναμεί με την άμεση ακύρωση της εγγραφής του χρήστη (Deregister) και μόνο υπό αυστηρές προϋποθέσεις με τη διαγραφή των ίδιων των αρχείων (Destage) από τον φυσικό αποθηκευτικό χώρο του μηχανήματος.
Όταν ο χρήστης επιλέγει να διαγράψει μια εφαρμογή μέσα από τις ρυθμίσεις του Windows, το σύστημα επεμβαίνει αποκλειστικά στο επίπεδο της διεπαφής και των συσχετίσεων. Διαγράφει τις εγγραφές που αφορούν τον συγκεκριμένο χρήστη, αφαιρεί τα εικονίδια από το Start Menu, αναιρεί τις συσχετίσεις τύπων αρχείων και ανακαλεί τα μεταδεδομένα (metadata) που σχετίζονται με το συγκεκριμένο προφίλ. Από την οπτική γωνία του χρήστη, η εφαρμογή φαίνεται να έχει διαγραφεί ολοκληρωτικά και η πρόσβαση σε αυτή καθίσταται αδύνατη. Παρ' όλα αυτά, το λειτουργικό σύστημα διατηρεί τον πλήρη όγκο των αρχείων εγκατάστασης ανέπαφο, εφόσον θεωρεί ότι υπάρχει πιθανότητα το λογισμικό να χρειαστεί ξανά από διαφορετικούς λογαριασμούς χρηστών στον ίδιο υπολογιστή.
Σε επίπεδο προγραμματισμού (API), η Microsoft έχει επιλέξει να μην παρέχει στους προγραμματιστές ανεξάρτητες εντολές όπως DeregisterPackageAsync() ή DestagePackageAsync(). Αντιθέτως, προσφέρεται μόνο η γενική εντολή RemovePackageAsync(), η οποία λειτουργεί ως μια δημόσια αφαίρεση που αναθέτει στο ίδιο το λειτουργικό σύστημα να κρίνει εάν είναι απολύτως ασφαλές να σβήσει τα αρχεία.
Ο ρόλος των κοινόχρηστων συστημάτων και οι προϋποθέσεις διαγραφής
Η παραμονή των αρχείων μιας εφαρμογής (destaging υπό όρους) δεν αποτελεί κάποιο σφάλμα σχεδιασμού, αλλά μια συνειδητή αρχιτεκτονική επιλογή που στοχεύει στη βελτιστοποίηση των πόρων, ιδιαίτερα σε περιβάλλοντα όπου πολλαπλοί χρήστες μοιράζονται το ίδιο τερματικό μηχάνημα. Εάν το λειτουργικό σύστημα προχωρούσε σε πλήρη διαγραφή των δεδομένων κατά την απεγκατάσταση από τον Χρήστη Α, τότε ο Χρήστης Β, ο οποίος ενδεχομένως χρησιμοποιεί την ίδια εφαρμογή, θα αντιμετώπιζε άμεση κατάρρευση του λογισμικού ή θα χρειαζόταν να κατεβάσει τα δεδομένα από την αρχή.
Το API ανάπτυξης λειτουργεί προληπτικά. Εάν, κατά τη στιγμή της ακύρωσης της εγγραφής (deregistration), κάποια διεργασία της εφαρμογής βρίσκεται σε εξέλιξη, το σύστημα φροντίζει για τον ασφαλή τερματισμό της. Στη συνέχεια, ο αλγόριθμος αναζητά ενεργές αναφορές, ελέγχοντας εάν άλλα προφίλ χρηστών βασίζονται στο εν λόγω πακέτο λογισμικού. Η οριστική διαγραφή του φακέλου εγκατάστασης, η οποία ελευθερώνει τον αποθηκευτικό χώρο στον δίσκο (destage), εκτελείται αποκλειστικά όταν ο εσωτερικός μετρητής αναφορών της εφαρμογής (reference counter) φτάσει στο μηδέν.
Αυτή η τεχνική προσέγγιση επιλύει μακροχρόνια προβλήματα κατακερματισμού και αστοχιών που ταλαιπωρούσαν τις παλαιότερες εκδόσεις Windows, όπου η επιθετική διαγραφή κοινόχρηστων βιβλιοθηκών (τα γνωστά αρχεία DLL) συχνά προκαλούσε αλυσιδωτά προβλήματα σε ανεξάρτητα προγράμματα. Η αρχιτεκτονική MSIX αντιμετωπίζει το λογισμικό ως ένα πλήρως απομονωμένο και ελεγχόμενο πακέτο, εξασφαλίζοντας σταθερότητα και ακεραιότητα καθ' όλη τη διάρκεια της χρήσης του συστήματος, θυσιάζοντας ενδεχομένως σε κάποιες μεμονωμένες περιπτώσεις μερικά megabytes αποθηκευτικού χώρου για το κοινό όφελος της ομαλής λειτουργίας.