Selvedge a provedené výsledky
A sandbox is not a witness
Running untrusted code is one of those ideas that sounds fine in a meeting because nobody has drawn the incident report yet. Let the agent call a tool. Let the plugin transform a file. Let the partner module process the data. Put it in a sandbox. Lovely. The code cannot escape. Everyone nods. Then the auditor asks what the code actually did inside the sandbox, and suddenly the room discovers that containment is not the same as evidence.
A sandbox answers one question: did the workload stay inside the boundary? That is necessary. It is not enough. The harder question is what happened during the run. Which artifact executed? Which policy was applied? Which capabilities were requested? Which host calls were allowed or denied? How much fuel, memory and time did it spend? What came out? Can the run be replayed without trusting the original machine? If those answers live in logs and confidence, the system has a costume, not an audit trail.
Selvedge exists for that gap. The page calls it the execution transcript layer for untrusted code: AION proves reasoning, Ledger records system events, and Selvedge captures execution. The implementation follows that shape. The workspace is a Rust 2024 project with crates for core digests and resource limits, execution engines, Wasmtime and Kera backends, determinism, WASI and Kera hosts, policy, AION verification, CLI, MCP, registry, runner, daemon, audit and guest SDK surfaces. The public promise is intentionally plain: Selvedge executes untrusted code under deterministic execution, policy enforcement and verification discipline.
The useful distinction is small and brutal. A sandbox says the code did not leave. Selvedge is designed to say what the code did.
The transcript is not a log
Logs are useful for humans who are already debugging. They are less usefulwhen the question is whether a run can be verified later by someone who did not trust the original host. A log line can be missing, reordered, filtered, truncated, reformatted, or explained away. A transcript has to be part of the execution contract.
Selvedge core defines SHA3-256 digests, error types, path validation, authentication tokens and shared resource limits. The README describes transcripts with hashes of bytecode, settings, stdout, stderr, output, memory and globals, plus fuel consumption and host call counts. The page describes every host call being hashed into a SHA3-256 chain and the result wrapped in an AION-style proof envelope with Ed25519 sealing. That is the difference between a system saying trust me and a system saying here is the packet.
There is a healthy bit of paranoia in that design. The artifact digest names the code. The settings digest names the deterministic profile. The transcript names what crossed the host boundary. The signed envelope makes tampering visible. Offline verification means the original runtime is not the only witness. This is the part many sandbox stories skip because it is less fun than showing a plugin running in a demo. Demos rarely ask who edited the audit log. Auditors do.
Default deny needs receipts too
Defaultdeny je dobrý postoj, ale hrozný slogan, pokud skončí u prezentace. Politika Selvedge dává sloganu zuby. Balíček politik definuje schopnosti WASM, jako jsou hodiny, náhodnost, souborový systém, síť, prostředí, stdio, proces a vlastní. Nese limity prostředků pro paměť, velikost souboru, počet instrukcí a čas. Ověřuje invarianty, odmítá duplicitní schopnosti, poskytuje strukturované chyby a mapuje selhání do společného slovníku chyb Dweve. Běžec pak aplikuje limity prostředků na konfiguraci spuštění předtím, než úloha začne.
To znamená, že politika není dotazník zodpovězený po běhu. Je vstupem do spuštění. Pokud úloha žádá o čas, náhodnost, souborový systém, síť, prostředí nebo přístup k procesu, musí tento požadavek projít politikou. Pokud spotřebuje příliš mnoho paliva, paměti nebo času stěny, běh skončí jako řízené selhání. Pokud je politika nekonzistentní, měla by selhat dříve, než artefakt začne dělat cokoli zajímavého. Velmi nudné. Velmi užitečné. Nuda je to, jak si udržujeme víkendy.
Důležité je, že rozhodnutí o politice nejsou oddělena od důkazů. Sandbox může povolit nebo zakázat širokou kategorii a přesto ponechat auditní stopu tenkou. Selvedge je postaven na myšlence, že každé rozhodnutí brány a každé čtení prostředků patří do příběhu běhu. To je to, co ho činí užitečným pro nástroje agentů, spouštění pluginů třetích stran, inferenci Kera, regulované úlohy a kód partnerů. Práce může být nedůvěryhodná. Důkazy by neměly být.
Determinismus je místo, kde hostitel přestává improvizovat
Přehrávání je snadné slíbit a těžké dodržet. Hostitel má hodiny. Hostitel má náhodnost. Chování NaN s plovoucí desetinnou čárkou může být nepříjemné. SIMD se může lišit napříč architekturami. Souborové systémy, proměnné prostředí a stav procesu jsou vynikající způsoby, jak propašovat nedeterminismus na místa, kde ho nikdo nečekal. Pokud chcete přehrávání, musíte tyto zdroje odstranit nebo kontrolovat dříve, než se stanou výmluvami.
Selvedge činí deterministické spuštění výchozím. README popisuje virtuální hodiny pevně nastavené na epochu 2024-01-01, nasazenou náhodnost ChaCha20, měření paliva, generování přepisu a kanonizaci NaN. Také říká, že detekce SIMD je nejrychlejší, ale pouze pro stejnou architekturu, zatímco vypnutí SIMD je plně přenosná multiplatformní cesta. Ta poslední část je důležitá, protože determinismus není modlitba. Je to rozhodnutí o konfiguraci a architektuře a někdy je upřímným kompromisem rychlost za přenositelnost.
Běžec se ve výchozím nastavení používá s backendem Wasmtime s povoleným deterministickým spuštěním. Kera je druhý backend, zaměřený na Graph IR a binární neuronové sítě. Toto rozdělení je rozumné. WASM je obecná cesta pro nedůvěryhodné komponenty. Kera je cesta pro AI grafy. Obě potřebují stejnou okolní disciplínu: politiku před spuštěním, deterministická nastavení, přepis po spuštění a důkaz kolem výsledku.
Proč agenti činí toto méně volitelným
Agentové systémy znovu udělaly z nedůvěryhodného spouštění kódu módní záležitost, což je věta, při které by se měl každý bezpečnostní pracovník narovnat. Model si vyžádá volání nástroje. Plugin provede transformaci. Generovaný pomocný skript se dotkne dat. Partnerský nástroj přijde přes MCP. Model nástroj nenapsal, nástroj nemusí být přezkoumán se stejnou péčí jako produktový kód, a uživatel přesto očekává, že mu systém vysvětlí, co se stalo. Hodně štěstí, pokud je jedinou odpovědí adresář s logy a dojmy.
Selvedge má MCP serverové rozhraní pro agentní nástroje, CLI pro build, ověřování, spouštění a přehrávání pracovních postupů, démona pro dlouhodobé spouštění, pooling runnerů a zahřívání cache, klientské a serverové crate pro registr a guest SDK. Nejde o to, že by každé rozhraní bylo stejné. Jde o to, že tvar důkazů by měl být srovnatelný. Ať už workload vstoupí jako WASM komponenta, Kera graf, agentní nástroj nebo servisní úloha, běh by měl skončit něčím, co lze ověřit.
Výkon je kompromis, ne kouzlo
Stránka Selvedge obsahuje benchmarková čísla z BENCHMARKS.md v repozitáři: hlavním vítězstvím je studený start, horká cesta je nuancovanější, Kera JIT má příběh s teplým grafem a vanilla Wasmtime stále drží některé horké cesty s opakovanými voláními. To je správný způsob, jak o tom mluvit. Práce na runtime je plná kompromisů. Pokud komponentní model produkuje transkript a obálku důkazů, má jiné náklady než cesta s minimálním úsilím. Pokud je vaším problémem studený start, může tato cesta důkazů pomoci. Pokud je workload těsné opakované volání bez potřeby režie transkriptu, odpověď může být jiná. Velmi nepohodlná, ta realita. Odmítá být brožurou.
Článková verze příběhu o výkonu je proto jednoduchá: vyberte runtime podle workloadu. Nepoužívejte obálku důkazů jako kouzelný lektvar rychlosti. Použijte ji tehdy, když jsou náklady na chybějící přehratelné důkazy vyšší než režie. U agentních nástrojů, regulovaného zpracování dat, pluginů třetích stran a spouštění, kde se později člověk zeptá, co se stalo, jsou tyto náklady často reálné.
Co přezkoumat před použitím
Nejprve se rozhodněte, zda potřebujete izolaci, důkazy, nebo obojí. Pokud je workload důvěryhodný a interní, může být Selvedge více strojů, než je potřeba. Pokud je workload nedůvěryhodný, dodaný partnerem, spuštěný modelem nebo určený pro audit, transkript si začíná zasloužit své místo.
Za druhé, přezkoumejte politiku. Které schopnosti jsou povoleny? Které jsou zakázány? Jaké jsou limity pro fuel, paměť a čas? Je deterministický režim vyžadován, nebo pouze povolen? Je přístup k souborovému systému a síti dostatečně úzký? Je verze politiky svázána s artefaktem? Pokud politika žije ve wiki a spouštění jinde, návrh se už rozchází.
Za třetí, otestujte přehrávání jako produktové chování. Nečekejte na audit, abyste zjistili, zda se obálka ověřuje offline. Spusťte stejný artefakt, stejnou politiku a stejné vstupy dvakrát. Porovnejte transkripty. Zkuste zakázané schopnosti. Rozbijte kontrolní součet. Změňte seed. Vypněte SIMD, pokud záleží na identitě napříč platformami. Otravné testy jsou smyslem.
Ponaučení
Selvedge není hezčí sandbox. Je to vrstva důkazů o spouštění. Spouští WASM a Kera artefakty, začíná s výchozím odmítnutím, omezuje zdroje, řídí deterministické vstupy, hashuje běhy do transkriptů a zabaluje výsledky do obálky důkazů, kterou lze později zkontrolovat. To je jiný slib než kód zůstal ve svém koutě.
Jak systémy umělé inteligence volají více nástrojů, spouštějí více generovaných pomocníků a přijímají více komponent třetích stran, přestává být tento rozdíl akademický. Otázka nebude jen to, zda pracovní zátěž unikla. Otázkou bude, co udělala, podle jaké politiky, s jakými vstupy, jaké výstupy vytvořila a zda někdo jiný může toto tvrzení zopakovat.
Sandbox je zeď. Selvedge se snaží být i svědkem.