Selvedge og eksekvering med dokumentation

En sandbox kan holde koden i et hjørne, men den beviser ikke, hvad der skete indeni. Selvedge indkapsler WASM- og Kera-eksekvering i politikker,...

Selvedge og eksekvering med dokumentation

En sandkasse er ikke et vidne

At køre ikke-betroet kode er en af de idéer, der lyder fint på et møde, fordi ingen har tegnet hændelsesrapporten endnu. Lad agenten kalde et værktøj. Lad pluginnet transformere en fil. Lad partnermodulet behandle dataene. Læg det i en sandkasse. Dejligt. Koden kan ikke slippe ud. Alle nikker. Så spørger revisoren, hvad koden faktisk gjorde inde i sandkassen, og pludselig opdager rummet, at indeslutning ikke er det samme som bevis.

En sandkasse besvarer ét spørgsmål: blev arbejdsbyrden inden for grænsen? Det er nødvendigt. Det er ikke tilstrækkeligt. Det sværere spørgsmål er, hvad der skete under kørslen. Hvilken artefakt blev eksekveret? Hvilken politik blev anvendt? Hvilke kapaciteter blev anmodet om? Hvilke værtskald blev tilladt eller afvist? Hvor meget brændstof, hukommelse og tid brugte den? Hvad kom der ud? Kan kørslen afspilles uden at stole på den oprindelige maskine? Hvis svarene lever i logfiler og tillid, har systemet et kostume, ikke et revisionsspor.

Selvedge findes for at udfylde det hul. Siden kalder det eksekveringstransskriptlaget for ikke-betroet kode: AION beviser ræsonnement, Ledger registrerer systemhændelser, og Selvedge fanger eksekvering. Implementeringen følger den form. Arbejdsområdet er et Rust 2024-projekt med kasser til kerne-digests og ressourcegrænser, eksekveringsmotorer, Wasmtime- og Kera-backends, determinisme, WASI- og Kera-værter, politik, AION-verifikation, CLI, MCP, registry, runner, daemon, audit og gæste-SDK-overflader. Det offentlige løfte er bevidst enkelt: Selvedge eksekverer ikke-betroet kode under deterministisk eksekvering, politikhåndhævelse og verifikationsdisciplin.

Den nyttige skelnen er lille og brutal. En sandkasse siger, at koden ikke forlod stedet. Selvedge er designet til at sige, hvad koden gjorde.

Transskriptet er produktets overflade. Load, kør, hash og forsegl er separate trin, fordi beviser har brug for struktur, ikke en varm fornemmelse.

Transskriptet er ikke en log

Logfiler er nyttige for mennesker, der allerede debugger. De er mindre nyttige, når spørgsmålet er, om en kørsel senere kan verificeres af nogen, der ikke stolede på den oprindelige vært. En loglinje kan mangle, blive omordnet, filtreret, afkortet, omformateret eller bortforklaret. Et transskript skal være en del af eksekveringskontrakten.

Selvedge-kernen definerer SHA3-256-digests, fejltyper, sti-validering, godkendelsestokens og delte ressourcegrænser. README beskriver transskripter med hashes af bytekode, indstillinger, stdout, stderr, output, hukommelse og globaler, plus brændstofforbrug og antal værtskald. Siden beskriver, at hvert værtskald hashes ind i en SHA3-256-kæde, og at resultatet pakkes ind i en AION-stil beviskuvert med Ed25519-forsegling. Det er forskellen mellem et system, der siger stol på mig, og et system, der siger her er pakken.

Der er en sund portion paranoia i det design. Artefakt-digestet navngiver koden. Indstillings-digestet navngiver den deterministiske profil. Transskriptet navngiver, hvad der krydsede værtsgrænsen. Den signerede kuvert gør manipulation synlig. Offline-verifikation betyder, at den oprindelige runtime ikke er det eneste vidne. Det er den del, mange sandkassehistorier springer over, fordi det er mindre sjovt end at vise et plugin køre i en demo. Demos spørger sjældent, hvem der redigerede revisionsloggen. Revisorer gør.

Standardafvisning har også brug for kvitteringer

Defaultdeny er en god holdning og et forfærdeligt slogan, hvis det stopper ved præsentationen. Selvedge-politik giver sloganet tænder. Politik-biblioteket definerer WASM-kapaciteter såsom clock, random, filsystem, netværk, miljø, stdio, proces og brugerdefinerede. Det bærer ressourcegrænser for hukommelse, filstørrelse, instruktionsantal og tid. Det validerer invarianter, afviser duplikerede kapaciteter, giver strukturerede fejl og mapper fejl ind i det fælles Dweve-fejlvokabular. Køreren anvender derefter ressourcegrænserne på eksekveringskonfigurationen, før arbejdsbelastningen starter.

Det betyder, at politikken ikke er et spørgeskema, der besvares efter kørslen. Den er input til eksekvering. Hvis arbejdsbelastningen beder om tid, tilfældighed, filsystem, netværk, miljø eller procesadgang, skal den anmodning passere politikken. Hvis den bruger for meget brændstof, hukommelse eller væg-tid, ender kørslen som en kontrolleret fejl. Hvis en politik er inkonsistent, bør den fejle, før artefakten begynder at gøre noget interessant. Meget kedeligt. Meget nyttigt. Kedeligt er sådan, vi holder weekenderne.

Defaultdeny fortjener sin plads kun, når beslutninger er en del af transskriptionen. Ellers er det bare en strengt udseende afkrydsningsboks.

Det vigtige punkt er, at politikbeslutninger ikke er adskilt fra beviser. En sandkasse kan tillade eller nægte en bred kategori og stadig efterlade revisionssporet tyndt. Selvedge er bygget omkring ideen om, at hver gatebeslutning og ressourceaflæsning hører til i historien om kørslen. Det er det, der gør den nyttig til agentværktøjer, tredjeparts plugin-eksekvering, Kera-inferens, regulerede arbejdsbelastninger og partnerkode. Arbejdet kan være upålideligt. Beviserne bør ikke være det.

Determinisme er der, hvor værten holder op med at improvisere

Replay er let at love og svært at holde. Værten har et ur. Værten har tilfældighed. Floating-point NaN-adfærd kan være akavet. SIMD kan variere på tværs af arkitekturer. Filsystemer, miljøvariabler og procestilstand er fremragende måder at smugle ikke-determinisme ind på steder, hvor ingen forventede det. Hvis du vil have replay, skal du fjerne eller kontrollere disse kilder, før de bliver undskyldninger.

Selvedge gør deterministisk eksekvering til standarden. README beskriver et virtuelt ur fastsat til 2024-01-01-epoken, seedet ChaCha20-tilfældighed, brændstofmåling, transskriptionsgenerering og NaN-kanonisering. Det siger også, at SIMD-detektion er hurtigst, men kun på samme arkitektur, mens deaktivering af SIMD er den fuldt bærbare tværplatformsvej. Den sidste del betyder noget, fordi determinisme ikke er en bøn. Det er en konfigurations- og arkitekturbeslutning, og nogle gange er den ærlige afvejning hastighed mod bærbarhed.

Køreren bruger som standard Wasmtime-backend med deterministisk eksekvering aktiveret. Kera er den anden backend, rettet mod Graph IR og binære neurale netværksarbejdsbelastninger. Den opdeling er fornuftig. WASM er den generelle upålidelige komponentsti. Kera er AI-grafstien. Begge har brug for den samme omkringliggende disciplin: politik før eksekvering, deterministiske indstillinger, transskription efter eksekvering og beviser omkring resultatet.

Replay beskyttes ved at fjerne værtens personlighed. Tid, tilfældighed, NaN-adfærd og SIMD-profil overlades ikke til lokalt humør.

Hvorfor agenter gør dette mindre valgfrit

Agent-systemer gør ukontrolleret eksekvering moderne igen, hvilket er en sætning, der burde få enhver sikkerhedsperson til at rette sig lidt op. En model beder om et værktøjskald. Et plugin kører en transformation. Et genereret hjælpescript rører data. Et partner-værktøj kommer igennem MCP. Modellen skrev ikke værktøjet, værktøjet er måske ikke gennemgået med samme omhu som produktkode, og brugeren forventer stadig, at systemet forklarer, hvad der skete. Held og lykke med det, hvis det eneste svar er en logmappe og fornemmelser.

Selvedge har en MCP-serverflade til agentværktøjer, en CLI til build-, verify-, run- og replay-lignende arbejdsgange, en daemon til langvarig eksekvering, runner-puljer og cache-opvarmning, registry-klient- og server-crates samt et gæste-SDK. Pointen er ikke, at alle flader er ens. Pointen er, at evidensformen bør være sammenlignelig. Uanset om en arbejdsbyrde kommer ind som en WASM-komponent, en Kera-graf, et agentværktøj eller en serviceopgave, bør kørslen ende med noget, du kan verificere.

Forskellige indgangspunkter er i orden. Forskellige sandheder er ikke. Runtime-fladerne giver kun mening, hvis de producerer én evidensform.

Performance er en afvejning, ikke en trylleformular

Selvedge-siden inkluderer benchmarktal fra repositoryets BENCHMARKS.md: kold start er den store gevinst, den varme sti er mere nuanceret, Kera JIT har en historie med varme grafer, og vanilla Wasmtime holder stadig nogle gentagne kald-hot paths. Det er den rigtige måde at tale om det på. Runtime-arbejde er fuld af afvejninger. Hvis en komponentmodel producerer en transskription og en beviskuvert, har den andre omkostninger end den absolutte minimumssti. Hvis kold start er din smerte, kan den evidenssti hjælpe. Hvis arbejdsbyrden er et tæt gentaget kald uden behov for transskriptionsoverhead, kan svaret være anderledes. Meget ubelejligt, virkeligheden. Den nægter at være en brochure.

Artikelversionen af performancehistorien er derfor enkel: vælg runtime til arbejdsbyrden. Brug ikke en beviskuvert som en magisk hastighedsdrik. Brug den, når omkostningen ved ikke at have afspilbar evidens er højere end overheaden. For agentværktøjer, reguleret databehandling, tredjepartsplugins og eksekvering, hvor et menneske senere vil spørge, hvad der skete, er den omkostning ofte reel.

Hvad du skal gennemgå, før du bruger det

For det første skal du beslutte, om du har brug for indeslutning, evidens eller begge dele. Hvis arbejdsbyrden er betroet og intern, kan Selvedge være mere maskineri end nødvendigt. Hvis arbejdsbyrden er ubetroet, leveret af partnere, modeludløst eller revisionsrettet, begynder transskriptionen at tjene sin plads.

For det andet skal du gennemgå politikken. Hvilke kapaciteter er tilladt? Hvilke er nægtet? Hvad er grænserne for brændstof, hukommelse og tid? Er deterministisk tilstand påkrævet eller blot tilladt? Er filsystem- og netværksadgang snæver nok? Er politikken versionsstyret med artefakten? Hvis politikken lever i en wiki, og eksekvering lever et andet sted, er designet allerede på afveje.

For det tredje skal du teste replay som en produktadfærd. Vent ikke på en revision for at opdage, om kuverten verificeres offline. Kør samme artefakt, samme politik og samme input to gange. Sammenlign transskriptioner. Prøv nægtede kapaciteter. Bryd checksummen. Skift seedet. Deaktiver SIMD, hvis tværplatformsidentitet betyder noget. De irriterende tests er pointen.

Lærdommen

Selvedge er ikke en pænere sandkasse. Det er et eksekverings-evidenlag. Det kører WASM- og Kera-artefakter, starter med standard-nægt, begrænser ressourcer, kontrollerer deterministiske input, hasher eksekvering til transskriptioner og pakker resultater i en beviskuvert, der kan kontrolleres senere. Det er et andet løfte end "koden blev i sin boks".

Efterhånden som AI-systemer kalder flere værktøjer, kører flere genererede hjælpefunktioner og accepterer flere tredjepartskomponenter, holder den sondring op med at være akademisk. Spørgsmålet bliver ikke kun, om arbejdsbelastningen slap væk. Spørgsmålet bliver, hvad den gjorde, under hvilken politik, med hvilke input, hvilke output den producerede, og om en anden kan afspille den påstand.

En sandbox er en mur. Selvedge forsøger også at være vidnet.