Skip to content
DAY ZERO

Diligence · multikernel/sandlock

Sandlock

Verdict

ADVANCE TO FOUNDER CONVERSATION

No public institutional financing identified in the reviewed sources. Not found That is a statement about what is public — not a claim that the company is bootstrapped, which would require evidence this research does not have. Invest is deliberately absent from the verdict vocabulary (ADVANCE TO FOUNDER CONVERSATION / WATCH / PASS): it is unavailable from outside-in public work. Array has not reviewed this company; this is an independent research exercise.

The recommendation rests on three things public evidence establishes and one it does not. Established: the technical work is real and unusually well-executed; the threat model is stated more honestly than most funded security companies state theirs; and the construction pattern looks like durable systems engineering rather than a demo. Not established: whether anyone has ever tried to break it, and whether anyone pays. Both unknowns are conversation-resolvable — which is exactly what makes this a founder conversation rather than a pass or a watch.

01

Why it surfaced

Why the system saw it

807 owner commits, pushed the day of review; sandlock.io registered 2026-08-08; an arXiv paper published 2026-05-25; and a company products page that now lists "Multikernel Sandbox (AI agent sandboxing runtime)" as a commercial product.

Four independent channels spanning 17 months (org registry, company domain, LKML, arXiv), plus a paper co-authored with the AgentSight author — a cross-link between two independently-surfaced Phase 1 leads.

Why company-first sourcing misses it

358 stars on the sandbox repo; the founder has 72 GitHub followers, no blog field and no X-native presence; the strongest corroborating evidence sits on LKML and arXiv. No institutional financing was identified in the public sources reviewed, so no funding database would surface it.

Carried as WATCH · analyst override: The company is already selling. This is closer to the late edge of Day 0 than Phase 1 assumed, and a round may exist that is simply not public.

02

What Sandlock is

A lightweight Linux process sandbox in Rust (Apache-2.0) that confines a command's filesystem, network, syscalls and resources using Landlock, seccomp-bpf and seccomp user notification — no root, no image build, no container runtime, no hypervisor.

Distribution is unusually complete for a project this young: a CLI, an OCI runtime shim for containerd / CRI-O / Kubernetes, a C ABI, and Python and Go SDKs [S2]. The codebase is 3.3 MB of Rust [S15], and the integration-test files are comparable in size to the modules they test [S2] — an unusual and good sign in a security project.

The organising idea

“Static, input-independent policy is compiled into kernel-enforced rules, while a narrow supervisor handles runtime-dependent decisions and virtualized effects.”

— the paper’s abstract, arXiv:2605.26298 [S5]

That sentence is the whole architecture, and it is the right frame for evaluating it. Anything expressible as a static rule goes to the kernel, where it is fast and TOCTOU-immune. Anything requiring a runtime decision goes to a userspace supervisor, which is slower and more trusted. The design question is where that line sits — and the hard engineering lives on the supervisor side: cow/seccomp.rs alone is 319 KB, the largest file in the repository [S2].

Beyond a conventional sandbox

Filesystem and syscall confinement is table stakes. The differentiated surface [S3] [S4]: an HTTP-level ACL on method + host + path via a transparent proxy; destination-IP and CIDR allowlists with no DNS; credential injection where the secret stays in the supervisor and is attached after the ACL check; a copy-on-write working directory with transactional commit/abort; deterministic execution (frozen time, seeded randomness); and a handler API on any syscall where a custom handler “can extend confinement but never relax it” [S6].

03

The trust boundary

Sandlock publishes its own three-tier trust model: the host kernel is fully trusted, the supervisor partially trusted, the workload assumed hostile. Compare where the boundary actually sits in each architecture.

Agent workloadHOSTILE

assumed hostile — never executes an unconfined instruction

Landlock LSM + seccomp-bpf + seccomp user notification
SupervisorPARTIALLY TRUSTED

partially trusted · userspace parent process · runtime decisions, CoW staging, credential injection

Shared host kernelFULLY TRUSTED

fully trusted — “if the kernel is compromised, so is every guarantee”

Escape requires
a kernel privilege-escalation bug in any syscall the policy permits
What this buys
~5 ms start (project claim) · no root · no image · HTTP-level policy and supervisor-held credentials
What it costs
one shared kernel: the workload and the host meet inside the same kernel

The diagram is a summary; the dimension-by-dimension table below carries the same comparison in full, and the project’s own comparison page [S7] was one of its sources. There is deliberately no “security score” anywhere on this page — the architectures fail differently, and a single number would erase exactly the information that matters.

04

The stated threat model

Published at sandlock.io/security.html, and unusually direct — its opening line: “A sandbox is only useful if you know its edges.”

In scope — what it claims to stop [S6]

  • Filesystem escape

    only paths reachable through granted Landlock rules; grants are recursive, denials override

  • Unapproved network egress

    default-deny: with no rules, Landlock refuses every TCP connect; UDP, ICMP and raw-socket creation are refused at the seccomp layer

  • Exfiltration on an approved host

    HTTP rules match method, host and path — “an agent allowed one endpoint cannot repurpose the connection”

  • Credential theft by the workload

    the secret stays in the supervisor and is attached after the ACL check; an env: source is stripped from the child

  • Privilege escalation via setuid

    NO_NEW_PRIVS before the filter

  • Reaching sibling processes

    Landlock ABI v6 scopes deny abstract UNIX-socket connections and signals outside the sandbox

  • Host resource exhaustion

    memory, process count, open files, CPU share and CoW disk usage are capped

  • Unintended writes

    copy-on-write stages writes and discards them on error

Explicitly out of scope [S6]

  • Kernel vulnerabilities

    “The workload runs on your kernel. An escalation bug in a permitted syscall defeats the sandbox. This is the price of no hypervisor.” — stated by the project, in bold

  • Hardware side channels

    Spectre-class and cache timing; “CPU pinning reduces sharing but is not a mitigation”

  • A policy that grants too much

    “Sandlock enforces the policy you wrote, not the one you meant”

  • A hostile launcher

    an attacker who already controls the process that starts Sandlock controls the policy

  • The workload starving itself

    limits protect the host, not the workload's own progress

The most important exclusion is the first, and it is not close. Side channels are physics and over-broad policy is operator error — kernel escape is the one exclusion inherent to the architecture, and it cannot be engineered away without abandoning the architecture.

What a hostile workload actually does

ScenarioOutcomeMechanism / caveat
Generated code tries to read ~/.sshBLOCKEDLandlock, kernel-evaluated
Malicious dependency exfiltrates to an attacker hostBLOCKEDdefault-deny egress; on an approved host, the HTTP method/host/path ACL
Prompt-injected tool call tries to POST the API keyBLOCKEDthe key never enters the child's address space — the most agent-specific guarantee in the product
Workload attempts setuid escalationBLOCKEDNO_NEW_PRIVS
Workload signals a sibling processBLOCKED*on ABI v6; not blocked on an older kernel unless allow_degraded was chosen deliberately
Kernel LPE in a permitted syscallNOT DEFENDEDfull host compromise — stated by the project
Operator writes --net-allow '*'NOT DEFENDEDstated: policy correctness is the operator's problem
Attacker controls the launching processNOT DEFENDEDstated

05

The question a VM boundary cannot answer

Traditional isolation asks

“Can this process access that resource?”

Namespaces, microVMs and userspace kernels all answer this, some with a very high ceiling. It is a binary, structural question.

Agent security also asks

“Should this legitimate agent use this legitimate credential for this legitimate operation, against this destination, right now?”

A prompt-injected agent does not exploit a memory bug. It makes a correct API call with a real credential to the wrong place.

One request, four elements

  1. AGENTthe coding agent you deployedlegitimate process
  2. CREDENTIALthe real API key it was givenlegitimate secret
  3. OPERATIONPOST /v1/messageslegitimate method + path
  4. DESTINATIONattacker-controlled.examplepolicy stops the request here

Sandlock policy layer: Expressible as policy — destination and credential are separable

The HTTP ACL matches on method, host and path, so a rule that permits POST to one host does not permit the same call to another. Separately, the credential stays in the supervisor and is attached after the ACL check, so a request that fails the check never carries the secret. Both are OBSERVED in the code and the docs; neither is independently verified here, and neither is a claim that prompt injection is solved — a policy that grants too much still grants too much, which the project states plainly.

This is why the interesting layer of Sandlock is not the sandbox. It is the semantic execution policy: an HTTP ACL on method/host/path, a credential the child process can use but never read, and transactional writes that make a failed run leave no trace. The syscall confinement underneath is competent; the policy layer is the part a competitor would have to decide to build, not just port.

06

Against the alternatives, dimension by dimension

No aggregate score, deliberately. Isolation boundary, kernel relationship, startup model, trust assumptions and operational burden are different axes, and collapsing them into one number would hide the trade each architecture makes.

AlternativeIsolation boundaryKernelStartupRootEscape requiresSecurity ceilingWhat Sandlock does differently
Firecracker microVMhardware virtualisation, separate guest kernelseparate~100 mstrueVMM or KVM bug after guest compromisehighestno image, no root, ~20x faster start, plus HTTP-level egress policy a VM cannot express
gVisoruserspace kernel (Sentry) services every syscallreimplemented in userspacemoderatevariesSentry bug or a host bug reachable through ithighhost kernel stays in the syscall path; native performance and full compatibility, wider escape surface
Containers (namespaces + cgroups)namespacesshared~200 msyes, or user-ns + /etc/subuidkernel LPE or misconfigurationcomparable or loweraccess-control ruleset rather than a constructed namespace; no image; HTTP ACL; CoW rollback
bubblewrap / firejailconstructed namespacessharedfastuser namespaceskernel LPE or namespace misconfigurationcomparableno user-namespace requirement; destination-IP and HTTP rules; credential injection; transactional writes
Raw Landlock + seccompidentical primitivessharedfastfalsekernel LPEidenticalthe supervisor, the CoW engine, the HTTP layer, the protection-posture model and the distribution - i.e. every hard part
OpenShell (NVIDIA)control plane above a sandboxdelegatesn/adepends on backendinherits backendOpenShell requires Docker/Podman/microVM/K8s underneath; sandlock is the confinement itself. They compose rather than compete

The last row is the sharpest challenge — “isn’t this just the kernel’s feature?” Landlock is a public kernel feature. What sits on top: the seccomp user-notification policy engine (the 319 KB CoW path), the HTTP ACL and credential injection, transactional filesystem semantics, the resolved per-protection posture model, and the distribution. Identical ceiling; almost none of the product.

07

The trade, stated plainly

The shared kernel is not a footnote. It is the price of everything Sandlock gains, and the project prices it honestly.

Sandlock gains

  • ~5 ms claimed startup and no VM image — the isolation layer stops being the dominant cost at agent volumes
  • no root, no KVM, no /etc/subuid — it can confine an agent on the developer laptop where the agent actually runs
  • full native compatibility: the host kernel stays in the syscall path
  • policy expressiveness no competitor matches: HTTP ACL, credential injection, CoW rollback, deterministic execution
  • fail-closed by default, with named, auditable, per-protection opt-outs

Sandlock gives up

  • a separate guest kernel — a kernel LPE in any permitted syscall defeats it, stated plainly by the project itself
  • the VM/hardware boundary and with it the highest attainable isolation ceiling
  • a large “partially trusted” supervisor handles attacker-influenced input outside the sandbox
  • kernel 6.12 / Landlock ABI v6 for the default posture — which excludes most enterprise LTS fleets today
  • hardware side channels are out of scope entirely

08

Code review — construction evidence

Commit count is not the evidence. The shape is: sustained cadence, proportionate tests, a real review process, multi-architecture work, and a monthly release train.

8
Human contributors
top contributor 807 commits [S9]
3.3 MB
Rust
+ 503 KB Python, 75 KB Go SDKs [S15]
6 releases
In 3 months
v0.8.1v0.8.6 [S11]
x86_64 aarch64 riscv64
Architectures
active PR review with named blockers [S12]

Weekly commits, last 12 weeks [S10]

73 · 58 · 31 · 35 · 46 · 31 · 40 · 89 · 64 · 41 · 19 · 10 — sustained, not bursty

The founder is described on the company site as a Linux kernel developer with 16+ years’ experience, maintainer of the networking traffic-control subsystem since 2017 [S14]. Kernel-subsystem-maintainer expertise applied to a userspace product is rare, verifiable from the public kernel record, and not hireable on a normal timeline. The test files being comparable in size to the modules they test [S2] is what a durable system looks like from outside.

09

Claims ledger — performance, security, commercial

Every material claim, with its evidence state. A project's own benchmark is authoritative that the project claims the number — never that the number is true.

IDClaimStateSource / note
C1Startup overhead ~5 msProject claimProject's own benchmark; not reproduced here (needs Linux 6.12; test machine is macOS/M1). S3 README, S5 paper, S7 comparison
C2Runs Redis at bare-metal throughput, within measurement noiseProject claimS5 paper abstract
C3No root, no cgroups, no containers, no hypervisorObservedConsistent with the code read: Landlock+seccomp only, no namespace setup path found. S3, S6
C4Landlock enforces filesystem, TCP ports and IPC scopingObservedS16 landlock.rs uses LANDLOCK_RULE_PATH_BENEATH, LANDLOCK_RULE_NET_PORT, LANDLOCK_SCOPE_SIGNAL, LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET
C5seccomp user notification handles runtime decisions and virtualised effectsObservedS2: seccomp/notif.rs 131KB, cow/seccomp.rs 319KB, procfs.rs 50KB
C6Fail-closed by default; refuses to start when a required protection is unavailableObservedS4 protection opt-out section
C7Credential never enters the child's address spaceProject claimcredential.rs (39KB) exists; behaviour not dynamically tested. S6, S3
C8Kernel vulnerabilities are out of scopeObservedStated by the project itself, in bold. S6 security page, verbatim
C9Landlock rules are kernel-evaluated and TOCTOU-immuneProject claimS4
C10Requires Linux 6.12+ (Landlock ABI v6) for the default postureObservedS3 requirements table
C11Public institutional financing existsNot foundNo public financing identified in the sources reviewed. This is NOT a claim of bootstrapping.. searches of company site, project site, repo, web
C12Independent security audit existsNot foundrepo, site, web searches
C13Named customers or revenueUnknownno pricing page, no logos, no case studies found

The 5 ms startup figure and the Redis-throughput result were not reproduced here: the pre-registered reproduction budget went to the Headroom experiment, and Sandlock’s default posture needs Linux 6.12 while the test machine is macOS. They are carried as project claims, not as verified numbers — and nothing on this page treats them as verified.

The biggest gap in the record: No evidence of any adversarial contact: no audit, no bounty, no published escape attempt. For a security product, survived adversarial contact is the evidence that matters most, and it is absent from public sources. Absence of an audit is not evidence of weakness — it is absence of evidence, in the category where evidence matters most.

10

Commercial status

Observed [S8] [S14]

  • Entity: Multikernel Technologies, Inc.; GitHub org created 2025-03-08
  • Open-core model, stated: “what is open, what is licensed”
  • Two named commercial products beyond the core: Sandbox HTTP API, Sandbox Scheduler
  • A “Schedule a Demo” call to action; the checkpoint/restore machinery the scheduler needs exists in the repository

Unknown / not found

  • Pricing Unknown
  • Customers, revenue Unknown
  • Team size Unknown
  • Institutional financing Not found
  • Independent security audit Not found

“Not found” means the searches performed found nothing public — it never means “does not exist”.

11

The Multikernel project graph

Sixteen repositories, one coherent stack, three clusters — this is an infrastructure organisation with a consistent thesis, not a technical studio spraying experiments.

Kernel research & infrastructure

linux (multikernel-enabled kernel) · kernelscript (OCaml eBPF DSL) · kexec-tools · kmorph · tcp_splice · mkbench …

The thesis: per-application kernels.

Filesystem & state

daxfs (CXL disaggregated FS) · branchfs (FUSE CoW branching) · branching (CoW for agents)

branchfs and branching — both CoW-for-agents — went quiet in Q2 2026 as sandlock accelerated. Inferred: consolidation onto the mechanism that worked. DAY ZERO's own rules dropped both as ABANDONED.

AI-facing product

sandlock (pushed daily) · sandlock.io · kerf · the company site

The piece of the stack that AI agents made urgent — and the one that got a website, an OCI shim, three SDKs and a paper.

Source: org repository listing [S13]

The AgentSight relationship — stated precisely

Established

paper co-authorship on arXiv:2605.26298 (Cong Wang, Yusheng Zheng); 49 code-search references to sandlock inside the eunomia-bpf org including workload reproduction notes [S5] [S17]

Not established — and not inferred

any organisational, employment, equity or corporate relationship - none found and none inferred.

Why this matters to the sourcing system itself: Phase 2 counted Multikernel and AgentSight as two independent leads. They share an author, so they are one intellectual cluster as evidence. v2 must not double-count them.

12

Defensibility — proven, potential, not a moat

Proven

  • kernel-subsystem-maintainer expertise applied to a userspace product
  • a working seccomp-user-notification policy engine with CoW transactional semantics

Potential

  • agent-specific policy layer: HTTP ACL, credential injection, deterministic execution
  • accumulated hardening if adversarial contact occurs
  • scheduler + checkpoint/restore if density becomes the axis

Not a moat

  • Landlock and seccomp are public kernel features
  • startup speed alone
  • star count

Could a strong security team reproduce it? The architecture, yes — in six to twelve months with two or three engineers who genuinely understand seccomp notification. What stays hard: the CoW correctness surface, the TOCTOU discipline, and the kernel-maintainer judgement about which primitives will exist in two years. That is a real head start and a thin moat, and both statements are true at once.

13

Questions for the founder

Written before any conversation, with what would strengthen and weaken the thesis pre-registered — so a persuasive answer cannot retroactively become the bar. Nobody has been contacted.

  1. 01

    Your security page says a kernel LPE in a permitted syscall defeats the sandbox. Which customers have accepted that trade, which have refused it — and what did the ones who refused choose instead?

  2. 02

    cow/seccomp.rs is your largest file. What is the hardest correctness problem in the copy-on-write path, and what have you got wrong there before?

  3. 03

    Has anyone outside the team attempted an escape? Audit, bug bounty, red team, a customer's security review — what happened, and what did it change?

  4. 04

    Landlock ABI v6 means kernel 6.12. What fraction of inbound interest dies on that requirement, and what does allow_degraded actually get used for in the field?

  5. 05

    Multikernel sells three products. If you had to kill two, which survive — and is Sandlock a wedge into the cloud-OS business, or the business itself?

  6. 06

    branchfs and branching both stopped in Q2 2026 as sandlock accelerated. What did you learn that made you consolidate?

  7. 07

    Sandlock is Apache-2.0 and your site says “what is open, what is licensed.” Where is that line, and what stops a cloud provider from running the open core as a service?

Pre-registered evaluation: a specific, unflattering war story about a CoW correctness bug strengthens; “nobody has tried to break it yet” weakens — and those bars were written down before any answer could exist.

14

What would change this view

Upgrade

An independent audit or a real adversarial engagement with a published outcome; two or more named production users who chose it over a container runtime; evidence that the HTTP-ACL and credential-injection layer is why they chose it; a defensible open/licensed boundary; a second senior systems engineer with material ownership.

Downgrade

An escape that does not require a kernel bug; “nobody has tried to break it”; discovery that adoption is driven by speed alone; a major platform shipping equivalent policy-level egress control; continued three-product spread with no ranking; or evidence of an institutional round already closed at a price that removes the Day-0 window.

Related on this site: how the same system pressure-tests a quantitative claim when reproduction is feasible, and what happens when its own rules fail.

Provenance

Source ledger

Every claim above traces to one of these sources. All evidence gathered 2026-08-23 from public material; nobody was contacted.

Source ledger

  • S1

    github.com/multikernel/sandlock (GitHub API)

    primary artifactRust, Apache-2.0, created 2026-03-13, pushed 2026-08-23, 358 stars, 38 forks, 19 open issues, 4.4 MB. Topics: landlock, seccomp, sandboxing, rust, ai-agents, promptinjection, faas, linux

  • S2

    Repository tree (git/trees/main?recursive=1)

    primary artifactModule layout and file sizes; the code inventory in architecture.md

  • S3

    README.md (817 lines)

    primary artifactMechanism claims, comparison table, kernel requirements, CLI surface

  • S4

    docs/sandbox-reference.md (540 lines)

    primary artifactEvery policy field, defaults, protection opt-out semantics, behavioural notes

  • S5

    arXiv:2605.26298 — *Sandlock: Confining AI Agent Code with Unprivileged Linux Primitives*, 2026-05-25, Cong Wang and Yusheng Zheng

    research paperArchitecture thesis, performance claims (~5 ms startup, Redis at bare-metal throughput)

  • S6

    sandlock.io/security.html (site source, multikernel/sandlock.io)

    official statementThe project's own threat model: trust tiers, in-scope and out-of-scope attacks

  • S7

    sandlock.io/comparison.html

    official statementSelf-comparison to containers, Firecracker, gVisor, bubblewrap/firejail, OpenShell

  • S8

    sandlock.io navigation + footer

    official statementTwo named commercial products; "What is open, what is licensed"; Multikernel Technologies, Inc., San Jose

  • S9

    GitHub contributors API

    primary artifact8 human contributors: congwang-mk 807, dzerik 173, ghazariann 71, sachin2605 20, solarhell 5, apollo13 1, mrsimpson 1, gokwok 1

  • S10

    GitHub participation stats

    primary artifactCommits/week, last 12 weeks: 73, 58, 31, 35, 46, 31, 40, 89, 64, 41, 19, 10

  • S11

    GitHub releases API

    primary artifactv0.8.1 (2026-05-27) → v0.8.6 (2026-08-08); roughly monthly cadence

  • S12

    Recent commit log

    primary artifactActive PR review (PR #192, "riscv64 review blockers"), multi-architecture work (x86_64, aarch64, riscv64)

  • S13

    orgs/multikernel/repos

    primary artifact16 repositories; the project graph in architecture.md §7

  • S14

    multikernel.io/about.html

    official statementCong Wang as Founder & CEO; three named products

  • S15

    GitHub languages API

    primary artifactRust 3,321,536 · Python 503,404 · C 125,532 · Go 75,477 · Shell 22,560

  • S16

    crates/sandlock-core/src/landlock.rs (881 lines, read)

    primary artifactLandlock ruleset construction; ABI gating; access-mask computation

  • S17

    search/code?q=sandlock+org:eunomia-bpf

    primary artifact49 hits; AgentSight-org repos referencing sandlock in docs/drafts

  • S18

    Phase 2 collection (data/collected/github_repos.json)

    secondaryIndependent, dated snapshot of the same artifact taken before this diligence began

  • S19

    Phase 2 outputs/intro_queue.json

    secondaryThe lead's system state and analyst override at the research date

One defect found on the way: the project site’s own navigation links to /security-model/ and /comparison/, which 404 — the real paths are security.html and comparison.html. Noted because a careful reader reports that rather than silently working around it.