Show HN: Sub-millisecond VM sandboxes using CoW memory forking

adammiribyan 106 points 19 comments March 17, 2026
github.com · View on Hacker News

I wanted to see how fast an isolated code sandbox could start if I never had to boot a fresh VM. So instead of launching a new microVM per execution, I boot Firecracker once with Python and numpy already loaded, then snapshot the full VM state. Every execution after that creates a new KVM VM backed by a `MAP_PRIVATE` mapping of the snapshot memory, so Linux gives me copy-on-write pages automatically. That means each sandbox starts from an already-running Python process inside a real VM, runs the code, and exits. These are real KVM VMs, not containers: separate guest kernel, separate guest memory, separate page tables. When a VM writes to memory, it gets a private copy of that page. The hard part was not CoW itself. The hard part was resuming the snapshotted VM correctly. Rust, Apache 2.0.

Discussion Highlights (10 comments)

handfuloflight

Can you run this in another sandbox? Not sure why you'd want to... but can you?

vmg12

Does it only work with that specific version of firecracker and only with vms with 1 vcpu? More than the sub ms startup time the 258kb of ram per VM is huge.

jauntywundrkind

Mods: can we merge with https://news.ycombinator.com/item?id=47412812 ?

crawshaw

Nice to see this work! I experimented with this for exe.dev before we launched. The VM itself worked really well, but there was a lot of setup to get the networking functioning. And in the end, our target are use cases that don't mind a ~1-second startup time, which meant doing a clean systemd start each time was easier. That said, I have seen several use cases where people want a VM for something minimal, like a python interpreter, and this is absolutely the sort of approach they should be using. Lot of promise here, excited to see how far you can push it!

diptanu

The tricky part of doing this in production is cloning sandboxes across nodes. You would have to snapshot the resident memory, file system (or a CoW layer on top of the rootfs), move the data across nodes, etc.

buckle8017

This is how android processes work, but it's a security problem breaking some ASLR type things.

indigodaddy

Your write-up made me think of: https://codesandbox.io/blog/how-we-clone-a-running-vm-in-2-s... Are there parallels?

indigodaddy

Does this need passthrough or might we be able to leverage PVM with it on a passthrough-less cloud VM/VPS?

cperciva

Don't forget about entropy! You've just created two identical copies of all of your random number generators, which could be very very bad for security. The firecracker team wrote a very good paper about addressing this when they added snapshot support.

latortuga

Similar to sprites.dev?

Semantic search powered by Rivestack pgvector
3,471 stories · 32,344 chunks indexed