Selvedge και εκτέλεση με αποδείξεις
Ένα sandbox δεν είναι μάρτυρας
Η εκτέλεση μη αξιόπιστου κώδικα είναι από εκείνες τις ιδέες που ακούγονται μια χαρά σε μια σύσκεψη, επειδή κανείς δεν έχει συντάξει ακόμα την αναφορά συμβάντος. Άσε τον πράκτορα να καλέσει ένα εργαλείο. Άσε το πρόσθετο να μετατρέψει ένα αρχείο. Άσε τη μονάδα συνεργάτη να επεξεργαστεί τα δεδομένα. Βάλτο σε ένα sandbox. Υπέροχα. Ο κώδικας δεν μπορεί να διαφύγει. Όλοι κουνάνε το κεφάλι. Μετά ο ελεγκτής ρωτάει τι έκανε στην πραγματικότητα ο κώδικας μέσα στο sandbox, και ξαφνικά η αίθουσα ανακαλύπτει ότι ο περιορισμός δεν είναι το ίδιο με τα αποδεικτικά στοιχεία.
Ένα sandbox απαντά σε μία ερώτηση: έμεινε το φορτίο εργασίας εντός των ορίων; Αυτό είναι απαραίτητο. Δεν αρκεί όμως. Η πιο δύσκολη ερώτηση είναι τι συνέβη κατά τη διάρκεια της εκτέλεσης. Ποιο αντικείμενο εκτελέστηκε; Ποια πολιτική εφαρμόστηκε; Ποιες δυνατότητες ζητήθηκαν; Ποιες κλήσεις συστήματος επιτράπηκαν ή απορρίφθηκαν; Πόσο καύσιμο, μνήμη και χρόνο ξόδεψε; Τι παρήγαγε; Μπορεί η εκτέλεση να αναπαραχθεί χωρίς να εμπιστευόμαστε την αρχική μηχανή; Αν αυτές οι απαντήσεις ζουν σε αρχεία καταγραφής και σε πεποιθήσεις, το σύστημα έχει μια στολή, όχι ένα ίχνος ελέγχου.
Το Selvedge υπάρχει για αυτό το κενό. Η σελίδα το αποκαλεί επίπεδο μεταγραφής εκτέλεσης για μη αξιόπιστο κώδικα: το AION αποδεικνύει τη συλλογιστική, το Ledger καταγράφει τα συμβάντα συστήματος και το Selvedge καταγράφει την εκτέλεση. Η υλοποίηση ακολουθεί αυτό το σχήμα. Ο χώρος εργασίας είναι ένα έργο Rust 2024 με crates για βασικά digests και όρια πόρων, μηχανές εκτέλεσης, backends Wasmtime και Kera, ντετερμινισμό, hosts WASI και Kera, πολιτική, επαλήθευση AION, CLI, MCP, registry, runner, daemon, έλεγχο και επιφάνειες guest SDK. Η δημόσια υπόσχεση είναι σκόπιμα απλή: το Selvedge εκτελεί μη αξιόπιστο κώδικα υπό ντετερμινιστική εκτέλεση, επιβολή πολιτικής και πειθαρχία επαλήθευσης.
Η χρήσιμη διάκριση είναι μικρή και σκληρή. Ένα sandbox λέει ότι ο κώδικας δεν έφυγε. Το Selvedge έχει σχεδιαστεί για να λέει τι έκανε ο κώδικας.
Η μεταγραφή δεν είναι αρχείο καταγραφής
Τα αρχεία καταγραφής είναι χρήσιμα για ανθρώπους που ήδη κάνουν εντοπισμό σφαλμάτων. Είναι λιγότερο χρήσιμα όταν το ερώτημα είναι αν μια εκτέλεση μπορεί να επαληθευτεί αργότερα από κάποιον που δεν εμπιστευόταν τον αρχικό host. Μια γραμμή καταγραφής μπορεί να λείπει, να αναδιαταχθεί, να φιλτραριστεί, να περικοπεί, να αναδιαμορφωθεί ή να εξηγηθεί. Μια μεταγραφή πρέπει να είναι μέρος της σύμβασης εκτέλεσης.
Ο πυρήνας του Selvedge ορίζει digests SHA3-256, τύπους σφαλμάτων, επικύρωση διαδρομών, διακριτικά ελέγχου ταυτότητας και κοινά όρια πόρων. Το README περιγράφει μεταγραφές με hashes του bytecode, των ρυθμίσεων, της stdout, της stderr, της εξόδου, της μνήμης και των καθολικών μεταβλητών, συν κατανάλωση καυσίμου και μετρήσεις κλήσεων συστήματος. Η σελίδα περιγράφει κάθε κλήση συστήματος να κατακερματίζεται σε μια αλυσίδα SHA3-256 και το αποτέλεσμα να τυλίγεται σε ένα φάκελο απόδειξης τύπου AION με σφράγιση Ed25519. Αυτή είναι η διαφορά μεταξύ ενός συστήματος που λέει εμπιστεύσου με και ενός συστήματος που λέει ορίστε το πακέτο.
Υπάρχει μια υγιής δόση παράνοιας σε αυτόν τον σχεδιασμό. Το digest του αντικειμένου κατονομάζει τον κώδικα. Το digest των ρυθμίσεων κατονομάζει το ντετερμινιστικό προφίλ. Η μεταγραφή κατονομάζει τι διέσχισε το όριο του host. Ο υπογεγραμμένος φάκελος καθιστά ορατή την παραποίηση. Η επαλήθευση εκτός σύνδεσης σημαίνει ότι ο αρχικός χρόνος εκτέλεσης δεν είναι ο μόνος μάρτυρας. Αυτό είναι το μέρος που πολλές ιστορίες sandbox παραλείπουν, επειδή είναι λιγότερο διασκεδαστικό από το να δείχνεις ένα πρόσθετο να τρέχει σε μια επίδειξη. Οι επιδείξεις σπάνια ρωτούν ποιος επεξεργάστηκε το αρχείο καταγραφής ελέγχου. Οι ελεγκτές το ρωτούν.
Η προεπιλεγμένη άρνηση χρειάζεται επίσης αποδείξεις
Το «απόρριψη από προεπιλογή» είναι καλή στάση και φοβερό σύνθημα, αν όμως μένει μόνο σε μια διαφάνεια, δεν αρκεί. Η πολιτική Selvedge δίνει ουσία στο σύνθημα. Το πακέτο πολιτικής ορίζει δυνατότητες WASM, όπως ρολόι, τυχαιότητα, σύστημα αρχείων, δίκτυο, περιβάλλον, stdio, διεργασίες και προσαρμοσμένες δυνατότητες. Φέρει όρια πόρων για μνήμη, μέγεθος αρχείου, αριθμό εντολών και χρόνο. Επικυρώνει αμετάβλητες συνθήκες, απορρίπτει διπλότυπες δυνατότητες, παρέχει δομημένα σφάλματα και αντιστοιχίζει αποτυχίες στο κοινό λεξιλόγιο σφαλμάτων του Dweve. Στη συνέχεια, ο εκτελεστής εφαρμόζει τα όρια πόρων στη διαμόρφωση εκτέλεσης πριν ξεκινήσει ο φόρτος εργασίας.
Αυτό σημαίνει ότι η πολιτική δεν είναι ένα ερωτηματολόγιο που απαντιέται μετά την εκτέλεση. Είναι είσοδος στην εκτέλεση. Αν ο φόρτος εργασίας ζητά πρόσβαση σε χρόνο, τυχαιότητα, σύστημα αρχείων, δίκτυο, περιβάλλον ή διεργασίες, το αίτημα πρέπει να περάσει από την πολιτική. Αν ξοδέψει πολύ καύσιμο, μνήμη ή χρόνο τοίχου, η εκτέλεση τελειώνει ως ελεγχόμενη αποτυχία. Αν μια πολιτική είναι ασυνεπής, θα πρέπει να αποτύχει πριν αρχίσει το αντικείμενο να κάνει οτιδήποτε ενδιαφέρον. Πολύ βαρετό. Πολύ χρήσιμο. Το βαρετό είναι πώς κρατάμε τα σαββατοκύριακα.
Το βασικό σημείο είναι ότι οι αποφάσεις πολιτικής δεν είναι ξεχωριστές από τα αποδεικτικά στοιχεία. Ένα sandbox μπορεί να επιτρέπει ή να απορρίπτει μια ευρεία κατηγορία και παρόλα αυτά να αφήνει το ίχνος ελέγχου λεπτό. Το Selvedge είναι χτισμένο γύρω από την ιδέα ότι κάθε απόφαση πύλης και κάθε ανάγνωση πόρων ανήκει στην ιστορία της εκτέλεσης. Αυτό είναι που το καθιστά χρήσιμο για εργαλεία πρακτόρων, εκτέλεση προσθηκών τρίτων, συμπερασμούς Kera, ρυθμιζόμενους φόρτους εργασίας και κώδικα συνεργατών. Η εργασία μπορεί να μην είναι αξιόπιστη. Τα αποδεικτικά στοιχεία δεν θα πρέπει να είναι.
Ο ντετερμινισμός είναι εκεί που ο οικοδεσπότης σταματά να αυτοσχεδιάζει
Η αναπαραγωγή είναι εύκολο να υποσχεθείς και δύσκολο να την τηρήσεις. Ο οικοδεσπότης έχει ρολόι. Ο οικοδεσπότης έχει τυχαιότητα. Η συμπεριφορά NaN στην κινητή υποδιαστολή μπορεί να είναι δύσκολη. Το SIMD μπορεί να διαφέρει μεταξύ αρχιτεκτονικών. Τα συστήματα αρχείων, οι μεταβλητές περιβάλλοντος και η κατάσταση διεργασιών είναι εξαιρετικοί τρόποι να περάσει ο μη ντετερμινισμός σε μέρη όπου κανείς δεν τον περιμένει. Αν θέλετε αναπαραγωγή, πρέπει να αφαιρέσετε ή να ελέγξετε αυτές τις πηγές πριν γίνουν δικαιολογίες.
Το Selvedge καθιστά την ντετερμινιστική εκτέλεση προεπιλογή. Το README περιγράφει ένα εικονικό ρολόι σταθερό στην εποχή 2024-01-01, σποραδική τυχαιότητα ChaCha20, μέτρηση καυσίμου, δημιουργία αρχείου καταγραφής και κανονικοποίηση NaN. Αναφέρει επίσης ότι η ανίχνευση SIMD είναι ταχύτερη αλλά μόνο για την ίδια αρχιτεκτονική, ενώ η απενεργοποίηση SIMD είναι η πλήρως φορητή διαδρομή μεταξύ πλατφορμών. Αυτό το τελευταίο σημείο έχει σημασία επειδή ο ντετερμινισμός δεν είναι προσευχή. Είναι απόφαση διαμόρφωσης και αρχιτεκτονικής, και μερικές φορές ο τίμιος συμβιβασμός είναι ταχύτητα για φορητότητα.
Ο εκτελεστής προεπιλέγει το backend Wasmtime με ενεργοποιημένη την ντετερμινιστική εκτέλεση. Το Kera είναι το άλλο backend, που στοχεύει σε Graph IR και φόρτους εργασίας δυαδικών νευρωνικών δικτύων. Αυτός ο διαχωρισμός είναι λογικός. Το WASM είναι η γενική διαδρομή για μη αξιόπιστα στοιχεία. Το Kera είναι η διαδρομή για γραφήματα AI. Και τα δύο χρειάζονται την ίδια πειθαρχία γύρω τους: πολιτική πριν από την εκτέλεση, ντετερμινιστικές ρυθμίσεις, αρχείο καταγραφής μετά την εκτέλεση και απόδειξη γύρω από το αποτέλεσμα.
Γιατί οι πράκτορες το καθιστούν λιγότερο προαιρετικό
Τα συστήματα πρακτόρων κάνουν πάλι μόδα την εκτέλεση μη έμπιστου κώδικα, μια πρόταση που θα έπρεπε να κάνει κάθε άνθρωπο της ασφάλειας να καθίσει λίγο πιο ίσια. Ένα μοντέλο ζητάει μια κλήση εργαλείου. Ένα πρόσθετο εκτελεί έναν μετασχηματισμό. Ένα παραγόμενο βοηθητικό σενάριο αγγίζει δεδομένα. Ένα εργαλείο συνεργάτη έρχεται μέσω MCP. Το μοντέλο δεν έγραψε το εργαλείο, το εργαλείο μπορεί να μην έχει ελεγχθεί με την ίδια προσοχή με τον κώδικα του προϊόντος και ο χρήστης εξακολουθεί να περιμένει από το σύστημα να εξηγήσει τι συνέβη. Καλή τύχη με αυτό αν η μόνη απάντηση είναι ένας κατάλογος καταγραφών και αόριστες εντυπώσεις.
Το Selvedge έχει επιφάνεια διακομιστή MCP για εργαλεία πρακτόρων, διεπαφή γραμμής εντολών για ροές εργασίας τύπου build, verify, run και replay, δαίμονα για εκτεταμένη εκτέλεση, συγκέντρωση εκτελεστών και προθέρμανση κρυφής μνήμης, crates διακομιστή και πελάτη καταχωρητή και ένα SDK επισκεπτών. Το ζητούμενο δεν είναι να είναι ίδια κάθε επιφάνεια. Το ζητούμενο είναι να είναι συγκρίσιμο το σχήμα των αποδεικτικών στοιχείων. Είτε ένα φόρτο εργασίας μπαίνει ως στοιχείο WASM, ως γράφος Kera, ως εργαλείο πράκτορα ή ως εργασία υπηρεσίας, η εκτέλεση θα πρέπει να καταλήγει σε κάτι που μπορείτε να επαληθεύσετε.
Η απόδοση είναι ανταλλαγή, όχι ξόρκι
Η σελίδα του Selvedge περιλαμβάνει αριθμούς συγκριτικής αξιολόγησης από το αρχείο BENCHMARKS.md του αποθετηρίου: η ψυχρή εκκίνηση είναι η κύρια νίκη, η θερμή διαδρομή είναι πιο περίπλοκη, το Kera JIT έχει καλή ιστορία για θερμούς γράφους και το σκέτο Wasmtime εξακολουθεί να κρατά κάποιες θερμές διαδρομές επαναλαμβανόμενων κλήσεων. Αυτός είναι ο σωστός τρόπος να το συζητάμε. Η εργασία με το runtime είναι γεμάτη ανταλλαγές. Αν ένα μοντέλο στοιχείων παράγει μεταγραφή και περίβλημα απόδειξης, έχει διαφορετικό κόστος από τη διαδρομή του ελάχιστου δυνατού. Αν η ψυχρή εκκίνηση είναι ο πόνος σας, αυτή η διαδρομή αποδεικτικών στοιχείων μπορεί να βοηθήσει. Αν ο φόρτος εργασίας είναι μια σφιχτή επαναλαμβανόμενη κλήση χωρίς ανάγκη για επιβάρυνση μεταγραφής, η απάντηση μπορεί να είναι διαφορετική. Πολύ άβολη, η πραγματικότητα. Αρνείται να γίνει διαφημιστικό φυλλάδιο.
Η εκδοχή του άρθρου για την ιστορία της απόδοσης είναι επομένως απλή: διαλέξτε το runtime για τον φόρτο εργασίας. Μη χρησιμοποιείτε το περίβλημα απόδειξης ως μαγικό φίλτρο ταχύτητας. Χρησιμοποιήστε το όταν το κόστος του να μην έχετε αναπαράξιμα αποδεικτικά στοιχεία είναι υψηλότερο από την επιβάρυνση. Για εργαλεία πρακτόρων, επεξεργασία δεδομένων με κανονιστικές απαιτήσεις, πρόσθετα τρίτων και εκτέλεση όπου αργότερα ένας άνθρωπος θα ρωτήσει τι συνέβη, αυτό το κόστος είναι συχνά πραγματικό.
Τι να ελέγξετε πριν το χρησιμοποιήσετε
Πρώτον, αποφασίστε αν χρειάζεστε περιορισμό, αποδεικτικά στοιχεία ή και τα δύο. Αν ο φόρτος εργασίας είναι έμπιστος και εσωτερικός, το Selvedge μπορεί να είναι περισσότερος μηχανισμός από όσο χρειάζεται. Αν ο φόρτος εργασίας είναι μη έμπιστος, παρεχόμενος από συνεργάτη, ενεργοποιημένος από μοντέλο ή προσανατολισμένος σε έλεγχο, η μεταγραφή αρχίζει να κερδίζει τη θέση της.
Δεύτερον, ελέγξτε την πολιτική. Ποιες δυνατότητες επιτρέπονται; Ποιες απαγορεύονται; Ποια είναι τα όρια καυσίμου, μνήμης και χρόνου; Απαιτείται ντετερμινιστική λειτουργία ή είναι απλώς επιτρεπτή; Είναι αρκετά περιορισμένη η πρόσβαση στο σύστημα αρχείων και στο δίκτυο; Η πολιτική έχει έκδοση μαζί με το τεχνούργημα; Αν η πολιτική ζει σε ένα wiki και η εκτέλεση ζει κάπου αλλού, ο σχεδιασμός έχει ήδη αρχίσει να αποκλίνει.
Τρίτον, δοκιμάστε την αναπαραγωγή ως συμπεριφορά προϊόντος. Μην περιμένετε έναν έλεγχο για να ανακαλύψετε αν το περίβλημα επαληθεύεται εκτός σύνδεσης. Εκτελέστε το ίδιο τεχνούργημα, την ίδια πολιτική και τα ίδια δεδομένα εισόδου δύο φορές. Συγκρίνετε τις μεταγραφές. Δοκιμάστε απαγορευμένες δυνατότητες. Σπάστε το άθροισμα ελέγχου. Αλλάξτε τον σπόρο. Απενεργοποιήστε το SIMD αν έχει σημασία η ταυτότητα μεταξύ πλατφορμών. Οι ενοχλητικές δοκιμές είναι το ζητούμενο.
Το μάθημα
Το Selvedge δεν είναι μια πιο όμορφη απομονωμένη περιοχή. Είναι ένα επίπεδο αποδεικτικών στοιχείων εκτέλεσης. Εκτελεί τεχνουργήματα WASM και Kera, ξεκινά με προεπιλεγμένη άρνηση, περιορίζει τους πόρους, ελέγχει τα ντετερμινιστικά δεδομένα εισόδου, κατακερματίζει την εκτέλεση σε μεταγραφές και τυλίγει τα αποτελέσματα σε ένα περίβλημα απόδειξης που μπορεί να ελεγχθεί αργότερα. Αυτή είναι μια διαφορετική υπόσχεση από το ο κώδικας έμεινε στη γωνία του.
Καθώς τα συστήματα τεχνητής νοημοσύνης καλούν περισσότερα εργαλεία, εκτελούν περισσότερους παραγόμενους βοηθούς και δέχονται περισσότερα στοιχεία τρίτων, αυτή η διάκριση παύει να είναι θεωρητική. Το ερώτημα δεν θα είναι μόνο αν το φόρτο εργασίας διέφυγε. Το ερώτημα θα είναι τι έκανε, υπό ποια πολιτική, με ποια δεδομένα εισόδου, παράγοντας ποια αποτελέσματα, και αν κάποιος άλλος μπορεί να αναπαράγει αυτόν τον ισχυρισμό.
Ένα sandbox είναι ένας τοίχος. Το Selvedge προσπαθεί να είναι και ο μάρτυρας.