Selvedge és kivitelezés, bizonyítékokkal
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
A defaultdeny jó alapállás, de szörnyű szlogen, ha megáll a diánál. A Selvedge-politika ad fogakat a szlogennek. A policy-csomag definiálja a WASM-képességeket, például az órát, a véletlenszám-generálást, a fájlrendszert, a hálózatot, a környezetet, a stdio-t, a folyamatkezelést és az egyéni képességeket. Erőforrás-korlátokat hordoz a memóriára, a fájlméretre, az utasításszámra és az időre. Érvényesíti az invariánsokat, elutasítja a duplikált képességeket, strukturált hibákat biztosít, és a hibákat a közös Dweve-hiba-szókincsbe képezi le. A futtató ezután az erőforrás-korlátokat alkalmazza a végrehajtási konfigurációra, mielőtt a munkaterhelés elindul.
Ez azt jelenti, hogy a politika nem egy kérdőív, amelyet a futás után töltenek ki. Ez a végrehajtás bemenete. Ha a munkaterhelés időt, véletlenszerűséget, fájlrendszert, hálózatot, környezetet vagy folyamat-hozzáférést kér, a kérésnek át kell mennie a politikán. Ha túl sok üzemanyagot, memóriát vagy falióra-időt költ, a futás ellenőrzött hibaként ér véget. Ha egy politika inkonzisztens, a hiba megjelenik, mielőtt az artifact bármi érdekeset kezdene csinálni. Nagyon unalmas. Nagyon hasznos. Az unalom az, amivel megvédjük a hétvégéinket.
A fontos pont az, hogy a politikai döntések nem különülnek el a bizonyítékoktól. Egy sandbox engedélyezhet vagy megtagadhat egy tág kategóriát, és mégis vékony marad az auditnyom. A Selvedge arra az elképzelésre épül, hogy minden kapudöntés és erőforrás-leolvasás a futás történetéhez tartozik. Ez teszi hasznossá az ügynök-eszközök, a harmadik féltől származó plugin-végrehajtás, a Kera-inferencia, a szabályozott munkaterhelések és a partnerkód számára. A munka lehet megbízhatatlan. A bizonyítéknak nem szabad annak lennie.
A determinizmus az, ahol a hoszt abbahagyja az improvizálást
A visszajátszást könnyű ígérni és nehéz betartani. A hosztnak van órája. A hosztnak van véletlenszerűsége. A lebegőpontos NaN-viselkedés kínos lehet. A SIMD architektúránként eltérhet. A fájlrendszerek, a környezeti változók és a folyamatállapot kiváló módjai annak, hogy nemdeterminizmust csempésszenek olyan helyekre, ahol senki sem számított rá. Ha visszajátszást szeretnél, el kell távolítanod vagy ellenőrizned kell ezeket a forrásokat, mielőtt kifogásokká válnának.
A Selvedge alapértelmezésként determinisztikus végrehajtást biztosít. A README leír egy virtuális órát, amely a 2024-01-01 korszakhoz van rögzítve, egy seedelt ChaCha20 véletlenszerűséget, üzemanyag-mérést, jegyzőkönyv-generálást és NaN-kanonizálást. Azt is mondja, hogy a SIMD-észlelés a leggyorsabb, de csak azonos architektúrán működik, míg a SIMD kikapcsolása a teljesen hordozható, platformfüggetlen út. Ez az utolsó rész azért fontos, mert a determinizmus nem ima. Ez egy konfigurációs és architektúra-döntés, és néha a becsületes csere a sebesség a hordozhatóságért.
A futtató alapértelmezésben a Wasmtime háttérrendszert használja engedélyezett determinisztikus végrehajtással. A Kera a másik háttérrendszer, amely a Graph IR és a bináris neurális hálózati munkaterhelésekre összpontosít. Ez a felosztás ésszerű. A WASM az általános, megbízhatatlan komponensút. A Kera az AI-gráf út. Mindkettőnek ugyanarra a környező fegyelemre van szüksége: politika a végrehajtás előtt, determinisztikus beállítások, jegyzőkönyv a végrehajtás után és bizonyíték az eredmény körül.
Miért teszi ezt kevésbé opcionálissá az ügynökök megjelenése
Az ügynökrendszerek újra divatossá teszik a megbízhatatlan kód futtatását, és ez az a mondat, amitől minden biztonsági szakembernek fel kell kapnia a fejét. A modell eszközhívást kér. Egy plugin transzformációt futtat. Egy generált segédszkript hozzányúl az adatokhoz. Egy partnereszköz MCP-n keresztül érkezik. A modell nem írta az eszközt, az eszköz lehet, hogy nem kapott ugyanolyan alapos felülvizsgálatot, mint a termékkód, a felhasználó mégis azt várja, hogy a rendszer elmagyarázza, mi történt. Sok szerencsét ehhez, ha az egyetlen válasz egy naplókönyvtár és a megérzések.
A Selvedge rendelkezik MCP szerverfelülettel az ügynökeszközökhöz, CLI-vel a build, verify, run és replay jellegű munkafolyamatokhoz, démonnal a hosszan futó végrehajtásokhoz, futópoolozással és gyorsítótárelőmelegítéssel, registry kliens- és szerverkratékkel, valamint vendég SDK-val. A lényeg nem az, hogy minden felület ugyanolyan. A lényeg az, hogy a bizonyítékok alakja összehasonlítható legyen. Akár WASM-komponensként, Kera-gráfként, ügynökeszközként vagy szolgáltatásfeladatként érkezik egy munkaterhelés, a futásnak ellenőrizhető eredménnyel kell zárulnia.
A teljesítmény alkufolyamat, nem varázslat
A Selvedge oldal tartalmazza a repository BENCHMARKS.md fájljából származó benchmark számokat: a hidegindítás a fő nyeremény, a forró út árnyaltabb, a Kera JIT meleg gráfos történetet kínál, és a sima Wasmtime továbbra is tart néhány ismételt hívásos forró utat. Így helyes beszélni róla. A futási munkavégzés tele van kompromisszumokkal. Ha egy komponensmodell átiratot és bizonyítékborítékot állít elő, az más költségekkel jár, mint a minimális út. Ha a hidegindítás a fájdalom, ez a bizonyítékút segíthet. Ha a munkaterhelés szoros ismételt hívás, átirat-felső terhelés nélkül, a válasz más lehet. Nagyon kényelmetlen, valóság. Nem hajlandó brosúra lenni.
A teljesítménytörténet cikkváltozata ezért egyszerű: a munkaterheléshez válasszuk a futási környezetet. Ne használjuk a bizonyítékborítékot varázslatos sebességfőzetként. Akkor használjuk, ha a reprodukálható bizonyíték hiányának költsége magasabb, mint a felső terhelés. Ügynökeszközöknél, szabályozott adatfeldolgozásnál, harmadik féltől származó pluginoknál és olyan végrehajtásnál, ahol később egy ember megkérdezi, mi történt, ez a költség gyakran valós.
Mit érdemes átnézni használat előtt
Először is döntsük el, hogy elkülönítésre, bizonyítékra vagy mindkettőre van szükségünk. Ha a munkaterhelés megbízható és belső, a Selvedge lehet, hogy több gépezet, mint amennyi kell. Ha a munkaterhelés megbízhatatlan, partnertől származó, modell által kiváltott vagy auditálásra szánt, az átirat kezdi megszolgálni a helyét.
Másodszor, vizsgáljuk át a szabályzatot. Mely képességek engedélyezettek? Melyek tiltottak? Mik a fuel, memória és időkorlátok? Determinisztikus mód kötelező vagy csak megengedő? A fájlrendszer- és hálózati hozzáférés elég szűk? A szabályzat verziózva van az artefaktummal? Ha a szabályzat egy wikiben él, a végrehajtás pedig máshol, a tervezés már eltér.
Harmadszor, teszteljük a replayt termékviselkedésként. Ne várjunk egy auditra, hogy kiderüljön, vajon a boríték offline ellenőrizhető-e. Futtassuk ugyanazt az artefaktumot, ugyanazt a szabályzatot és ugyanazokat a bemeneteket kétszer. Hasonlítsuk össze az átiratokat. Próbáljuk ki a tiltott képességeket. Törjük meg az ellenőrzőösszeget. Változtassuk meg a seedet. Kapcsoljuk ki a SIMD-t, ha a platformok közötti azonosság számít. Az idegesítő tesztek a lényeg.
A tanulság
A Selvedge nem egy szebb homokozó. Ez egy végrehajtási bizonyítékréteg. WASM- és Kera-artefaktumokat futtat, alapértelmezett tiltásból indul, korlátozza az erőforrásokat, vezérli a determinisztikus bemeneteket, az átiratokba hashelt végrehajtást, és az eredményeket egy később ellenőrizhető bizonyítékborítékba csomagolja. Ez más ígéret, mint hogy a kód a sarokban maradt.
Ahogy az AI-rendszerek egyre több eszközt hívnak, egyre több generált segédprogramot futtatnak, és egyre több harmadik féltől származó összetevőt fogadnak el, ez a megkülönböztetés megszűnik pusztán elméleti jellegű lenni. A kérdés nem csak az lesz, hogy a munkaterhelés kiszabadult-e. A kérdés az lesz, hogy mit csinált, milyen szabályzat alapján, milyen bemenetekkel, milyen kimeneteket produkálva, és hogy valaki más vissza tudja-e játszani ezt az állítást.
A homokozó egy fal. A Selvedge megpróbál tanú is lenni.