[HN Gopher] Show HN: Smol machines - subsecond coldstart, portab...
___________________________________________________________________
Show HN: Smol machines - subsecond coldstart, portable virtual
machines
Author : binsquare
Score : 181 points
Date : 2026-04-17 17:18 UTC (5 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| binsquare wrote:
| Hello, I'm building a replacement for docker containers with a
| virtual machine with the ergonomics of containers + subsecond
| start times.
|
| I worked in AWS previously in the container space + with
| firecracker. I realized the container is an unnecessary layer
| that slowed things down + firecracker was a technology designed
| for AWS org structure + usecase.
|
| So I ended up building a hybrid taking the best of containers
| with the best of firecracker.
|
| Let me know your thoughts, thanks!
| harshdoesdev wrote:
| +1. i built something similar called shuru.run because i wanted
| an easy way to set up microVM sandboxes to run some of my AI
| apps, and firecracker wasn't available for macOS (and, as you
| said, it is just too heavy for normal user-level workloads).
| fqiao wrote:
| Yes, having a light-weight solution for local devices as well
| is one primary goal of the design. Another one is to make it
| easy for hosting, self or managed
| sahil-shubham wrote:
| Nice work on Shuru -- I remember looking at it when I was
| researching this space. You went with a Rust wrapper on
| Apple's Virtualization framework right?
|
| I have been working on something similar but on top of
| firecracker, called it bhatti (https://github.com/sahil-
| shubham/bhatti).
|
| I believe anyone with a spare linux box should be able to
| carve it into isolated programmable machines, without having
| to worry about provisioning them or their lifecycle.
|
| The documentation's still early but I have been using it for
| orchestrating parallel work (with deploy previews),
| offloading browser automation for my agents etc. An auction
| bought heztner server is serving me quite well :)
| harshdoesdev wrote:
| bhatti's cli looks very ergonomic! great job!
|
| also, yes, shuru was (still) a wrapper over the
| Virtualization.framework, but it now supports Linux too
| (wrapper over KVM lol)
| thm wrote:
| You could add OrbStack to the comp. table
| fqiao wrote:
| Will do. Thanks for the suggestion!
| sdrinf wrote:
| hi, great project! Windows support is sorely lacking, though.
| As someone working a lot with sandboxed LLMs right now, the
| options-space on windows for sandboxing is _extremely lacking_.
| Any plans to support it?
| binsquare wrote:
| Yeah, it's in my mind.
|
| WSL2 runs a linux virtual machine. Need to take some time and
| care to wire that up, but definitely feasible.
| fqiao wrote:
| Hey, thanks so much! yah we will definitely add windows
| support later. We are exploring how to get this work with WSL
| and will release it asap. Stay tuned and thanks!
| PufPufPuf wrote:
| Hey this is super cool. I've been researching tech like this
| for my AI sandboxing solution, ended up with Lima+Incus:
| https://github.com/JanPokorny/locki
|
| My problem with microVMs was that they usually won't run docker
| / kubernetes, I work on apps that consist of whole kubernetes
| clusters and want the sandbox to contain all that.
|
| Does your solution support running k3s for example?
| fqiao wrote:
| we will evaluate. I created this issue to track this:
| https://github.com/smol-machines/smolvm/issues/150
|
| Really appreciate the feedback!
| topspin wrote:
| What is the status of supporting live migration?
|
| That's the one feature of similar systems that always gets left
| out. I understand why: it's not a priority for "cloud native"
| workloads. The world, however, has work loads that are not
| cloud native, because that comes at a high cost, and it always
| will. So if you'd like a real value-add differentiator for your
| micro-VM platform (beyond what I believe you already have,)
| there you go.
|
| Otherwise this looks pretty compelling.
| fqiao wrote:
| Really appreciate the suggestion! By "live migration", do you
| mean keeping the existing files and migrate them elsewhere
| with the vm?
|
| Thanks
| topspin wrote:
| I mean making any given VM stop on host A and appear on
| host B; e.g. standard Qemu/KVM: virsh
| migrate --live GuestName DestinationURL
|
| This is feasible when network storage is available and
| useful when a host needs to be drained for maintenance.
| fqiao wrote:
| I see. so right now smolvm can be stopped, and then
| "packed" (think of it as compressed), and restart on a
| different host. files in the disks are preserved, but
| memory snapshotting is still hard tbh
| sureglymop wrote:
| It's also feasible without network storage, --copy-
| storage-all will migrate all disks too.
| genxy wrote:
| It helps if you offer a concrete use case, as in how large
| the heap is, what kinda of blackout period you can handle,
| and whether the app can handle all of it's open connections
| being destroyed, etc. The more an app can handle resetting
| some of it's own state, the easier LM is going to be to
| implement. If your workload jives with CRIU
| https://github.com/checkpoint-restore/criu you could do this
| already.
|
| By what I assume is your definition, there are plenty of "non
| cloud native" workloads running on clouds that need live
| migration. Azure and GCP use LM behind the scenes to give the
| illusion of long uptime hosts. Guest VMs are moved around for
| host maintenance.
| topspin wrote:
| "Azure and GCP use LM behind the scenes"
|
| As does OCI, and (relatively recently) AWS. That's a lot of
| votes.
|
| Use case: some legacy database VM needs to move because the
| host needs maintenance, the database storage (as opposed to
| the database software) is on a iSCSI/NFS/NVMe-oF array
| somewhere, and clients are just smart enough to
| transparently handle a brief disconnect/reconnect (which is
| built-in to essentially every such database connection pool
| stack today.)
|
| Use case: a web app platform
| (node/spring/django/rails/whatever) with a bunch of cached
| client state needs to move because the host needs
| maintenance. The developers haven't done all the legwork to
| make the state survive restart, and they'll likely never
| get time needed to do that. That's essentially the same use
| case as previous. It's also rampant.
|
| Use case: a long running batch process (training, etc.)
| needs to move because reasons, and ops can't wait for it to
| stop, and they can't kill it because time==money. It's
| doesn't matter that it takes an hour to move because big
| heap, as long as the previous 100 hours isn't lost.
|
| "as in how large the heap is"
|
| That's an undecidable moving target, so let the user worry
| about it. Trust them to figure out what is feasible given
| the capabilities of their hardware and talent. They'll do
| fine if you provide the mechanism. I've been shuffling live
| VMs between hosts for 10+ years successfully, and Qemu/KVM
| has been capable of it for nearly 20, never mind VMware.
|
| "CRIU"
|
| Dormant, and still containers. Also, it's re-solving solved
| problems once you're running in a VM, but with more steps.
| lacoolj wrote:
| What percentage of this code was written by LLM/AI?
| binsquare wrote:
| For myself, I'd estimate ~50%
|
| Not useful for things it hadn't been trained on before. But
| now I have the core functionality in place - it's been of
| great help.
| RALaBarge wrote:
| Hey mathematician, how much of this formula did you calculate
| with an abacus instead of a calculator?
| JuniperMesos wrote:
| What were the biggest challenges in terms of designing the VM
| to have subsecond start times? And what are the current
| bottlenecks for deceasing the start time even further?
| binsquare wrote:
| No special programming tricks were used.
|
| Linux was built in the 90s. Hardware improved more than a
| 1000x. Linux virtual machine startup times stayed relatively
| the same.
|
| Turns out we kept adding junk to the linux kernel + bootup
| operations.
|
| So all I did was cut and remove unnecessary parts until it
| still worked.
|
| This ended up also getting boot up times to under 1s. The
| kernel changes are the 10 commits I made, you can verify
| here: https://github.com/smol-machines/libkrunfw
|
| There's probably more fat to cut to be honest.
| fqiao wrote:
| Give it a try folks. Would really love to hear all the feedbacks!
|
| Cheers!
| leetrout wrote:
| why did you seemingly create two HN accounts?
|
| Edit: I see this appears to be a contributor to the project as
| well. It was not obvious to me.
| fqiao wrote:
| this is me: https://github.com/phooq
|
| @binsquare is this one: https://github.com/BinSquare
| fqiao wrote:
| No worry at all! Thanks!
| harshdoesdev wrote:
| its a really innovative idea! very interested in the subsecond
| coldstart claim, how does it achieve that?
| fqiao wrote:
| @binsquare basically brute-force trimmed down unnecessary linux
| kernel modules, tried to get the vm started with just bare
| minimum. There are more rooms for improvement for sure. We will
| keep trying!
| harshdoesdev wrote:
| nice! for most local workloads, it is actually sufficient.
| so, do you ship a complete disk snapshot of the machines?
| fqiao wrote:
| Yes. files on the disks are kept across stop and restart.
| We also have a pack command to compress the machine as a
| single file so that it can shipped and rehydrated elsewhere
| deivid wrote:
| With this approach I managed to get to sub-10ms start (to
| pid1), if you can accept a few constraints there's plenty of
| room!
|
| Though my version was only tested on Linux hosts
| binsquare wrote:
| would be interested to see how you do it, how can I connect
| with you - emotionally?
| threecheese wrote:
| Start with booze; always works :)
| cr125rider wrote:
| Great job with the comparison table. Immediately I was like "neat
| sounds like firecracker" then saw your table to see where it was
| similar and different. Easy!
|
| Nice job! This looks really cool
| fqiao wrote:
| Thanks so much
| 0cf8612b2e1e wrote:
| This looks very cool. Does the VM machinery still work if I run
| it in a bubblewrap? Can it talk to a GPU?
|
| Can you pipe into one? It would be cute if I could wget in
| machine 1 and send that result to offline machine 2 for
| processing.
| binsquare wrote:
| Haven't tried with bubblewrap - but it should.
|
| Yes! GPU passthrough is being actively worked on and will land
| in next major release: https://github.com/smol-
| machines/smolvm/pull/96
|
| Yea just tried piping, it works:
|
| ``` smolvm machine exec --name m1 -- wget -qO-
| https://example.com/data.csv \ | smolvm machine exec --name m2
| -i -- python3 process.py ```
| bch wrote:
| see too[0][1] for projects of a similar* vein, incl historical
| account.
|
| *yes, FreeBSD is specifically developed against Firecracker which
| is specifically avoided w "Smol machines", but interesting
| nonetheless
|
| [0] https://github.com/NetBSDfr/smolBSD
|
| [1] https://www.usenix.org/publications/loginonline/freebsd-
| fire...
| binsquare wrote:
| that was one of my inspirations but I don't think they went far
| enough in innovation.
|
| microvm space is still underserved.
| bch wrote:
| > that was one of my inspirations
|
| Colins FreeBSD work or Emiles NetBSD work?
| binsquare wrote:
| netBSD, I love that focus on a minimal and simple,
| reproducible binaries.
|
| You'll see that philosophy in this project as well (i
| hope).
|
| freeBSD focuses on features, which is great too.
| gavinray wrote:
| The feature that lets you create self-contained binaries seems
| like a potentially simpler way to package JVM apps than GraalVM
| Native.
|
| Probably a lot of other neat usecases for this, too
| smolvm pack create --image python:3.12-alpine -o ./python312
| ./python312 run -- python3 --version # Python 3.12.x --
| isolated, no pyenv/venv/conda needed
| binsquare wrote:
| yeah, it's analogous to Electron.
|
| Electron ships your web app bundled with a browser.
|
| Smol machines ship your software packaged with a linux vm. No
| need for dependency management or compatibility issues because
| it is baked in.
|
| I think this is how Codex or Claude Code should be shipped by
| default, to avoid any isolation issues tbh
| fqiao wrote:
| yah, i guess everybody share the experience of "i messed up
| with my dev env" right? We want this "machine" to be shippable,
| meaning that once it is configured correctly, it can be shared
| to anyone and use right away.
| lambdanodecore wrote:
| Basically any open source project nowadays run their software
| stack in containers often requiring docker compose. Unfortunatley
| Smol machines do not support Docker inside the microvms and they
| also do not support nested VMs for things that use Vagrant. I
| think this is a big drawback.
| binsquare wrote:
| I can support docker - will ship a compatible kernel with the
| necessary flags in the next release.
| lambdanodecore wrote:
| I tried something like this already, also including nested
| kvm. I think this will increase the boot time quiet a bit.
|
| Also libkrun is not secure by default. From their README.md:
|
| > The libkrun security model is primarily defined by the
| consideration that both the guest and the VMM pertain to the
| same security context. For many operations, the VMM acts as a
| proxy for the guest within the host. Host resources that are
| accessible to the VMM can potentially be accessed by the
| guest through it.
|
| > While defining the security implementation of your
| environment, you should think about the guest and the VMM as
| a single entity. To prevent the guest from accessing host's
| resources, you need to use the host's OS security features to
| run the VMM inside an isolated context. On Linux, the primary
| mechanism to be used for this purpose is namespaces. Single-
| user systems may have a more relaxed security policy and just
| ensure the VMM runs with a particular UID/GID.
|
| > While most virtio devices allow the guest to access
| resources from the host, two of them require special
| consideration when used: virtio-fs and virtio-vsock+TSI.
|
| > When exposing a directory in a filesystem from the host to
| the guest through virtio-fs devices configured with
| krun_set_root and/or krun_add_virtiofs, libkrun does not
| provide any protection against the guest attempting to access
| other directories in the same filesystem, or even other
| filesystems in the host.
| binsquare wrote:
| Security is a broad topic.
|
| Here's how my perspective:
|
| smolvm operates on the same shared responsibility model as
| other virtual machines.
|
| VM provides VM-level isolation.
|
| If the user mounts a directory with the capability of
| symlinks or a host OS with a path for guest software that
| is designed to escape - that is the responsibility of the
| user rather than the VM.
|
| Security is not guaranteed by using a specific piece of
| software, it's a process that requires different pieces for
| different situations. smolvm can be a part of that process.
| fqiao wrote:
| Thanks so much for the feedbacks. Yes these are valid
| concerns around libkrun security, We are planning and
| developing features around them actually, and hopefully
| that could alleviate the conerns.
|
| for virtio-fs, yes the risk of exposing the host fs
| struture exists, and we plan to:
|
| 1. creating staging directory for each vm and bind-mount
| the host dir onto them
|
| 2. having private mount namespaces for vms
|
| they are both tracked in our github issues:
|
| https://github.com/smol-machines/smolvm/issues/152
| https://github.com/smol-machines/smolvm/issues/151
|
| 2 may need much more efforts than we imagine, but we will
| ensure to call this out in our doc.
|
| For the concern around TSI, we are developing virtio-net
| in-parallel, it is also tracked in our github and will be
| released soon: https://github.com/smol-
| machines/smolvm/issues/91
|
| Would like to collect mroe suggestions on how to make this
| safer. Thanks!
| genxy wrote:
| So Vagrant is launching the VM locally, is that why it needs
| nesting?
|
| Would you be ok with a trampoline that launched the VM as a
| sibling to the Vagrant VM?
| ukuina wrote:
| Doesn't Docker's sbx do this?
|
| https://docs.docker.com/reference/cli/sbx/
| binsquare wrote:
| sandboxing is one of the features of virtual machines.
|
| I'm building a different virtual machine.
| messh wrote:
| https://shellbox.dev is a hosted version of something very
| similar
| tomComb wrote:
| This sounds great, except for one thing: you can scale your
| compute (CPU & RAM) as needed but your storage appears to scale
| with it.
|
| So, if I use a "16 vCPUs, 32GB RAM, 400GB SSD" machine for a
| period of intense compute, and then want to scale that down to
| "2 vCPUs, 4GB RAM", most of my storage disappears?
|
| That rather ruins the potential of the advertised scalability.
| isterin wrote:
| We're using smolmachines to create environments for our agents to
| execute code. It's been great so far and the team is super
| responsive. The dev ergonomics are also great.
| fqiao wrote:
| Really appreciate it! Would love to work together to make this
| easier to use.
| cperciva wrote:
| See also SmolBSD -- similar idea, similar name, using NetBSD.
| fqiao wrote:
| I came across SmolBSD before too. Cool project!
| nonameiguess wrote:
| What are you actually doing on top of libkrun? Providing really
| small machine images that boot quickly? If I run the smolvm run
| --image alpine example, what is "alpine?" Where is that image
| coming from? Does this have some built-in default registry of
| machine images it pulls from? Does it need an Internet connection
| that allows outbound access to wherever this registry runs? Is it
| one of a default set of pre-built images that comes with the
| software itself and is stored on my own filesystem? Where are the
| builds for these images? Where do these machine images end up?
| ~/.local/share/smolvm/?
| binsquare wrote:
| i run a custom fork of libkrun, libkrunfw (linux kernel), etc
| etc: https://github.com/orgs/smol-machines/repositories
|
| Got a lot of questions on how I spin up linux VM's so quickly
|
| Explanation is pretty straight forward.
|
| Linux was built in the 90s. Hardware improved more than a
| 1000x. Linux virtual machine startup times stayed relatively
| the same.
|
| Turns out we kept adding junk to the linux kernel + bootup
| operations.
|
| So all I did was cut and remove unnecessary parts until it
| still worked. This ended up also getting boot up times to under
| 1s.
|
| Big part of it was systemd btw.
| binsquare wrote:
| those images are pulling from the public docker registry.
| parasitid wrote:
| hi! congrats for your work that's really nice.
|
| question: why do you report that qemu is 15s<x<30s? for instance
| with katacontainers, you can run fast microvms, and even faster
| with unikernels. what was your setup?
|
| thanks a lot
| akoenig wrote:
| smolvm is awesome. The team is highly responsive and very
| experienced. They clearly know what they're doing.
|
| I'm currently evaluating smolvm for my project,
| https://withcave.ai, where I'm using Incus for isolation. The
| initial integration results look very promising!
| fqiao wrote:
| Cannot thank you more for this! Lets' work together to see how
| we can make this easier for cave!
| indigodaddy wrote:
| This looks super awesome. Very excited for you potentially open
| sourcing it, as I'd like to customize/extend it a bit for
| certain use cases. Re: smolvm vs in use, I think even if smolvm
| works great for it, why not keep incus as an option for people
| who want to use cave on VMs that don't have access to /dev/kvm
| (Eg the user can pick either incus or smolvm for their cave
| deployment)
| mrbluecoat wrote:
| Can .smolmachine be digitally signed and self authenticate when
| run? Similar to https://docs.sylabs.io/guides/main/user-
| guide/signNverify.ht...
| chrisweekly wrote:
| This looks awesome. Thanks for sharing!
| fqiao wrote:
| Thanks so much! Feel free to try it out if you have a chance,
| and let's us know your thoughts. Thanks!
| irickt wrote:
| Is there a relation to the similarly-purposed and similarly-named
| https://github.com/CelestoAI/SmolVM
| binsquare wrote:
| no relation, they build a sandboxing service using firecracker.
|
| I build a virtual machine that is an alternative to firecracker
| and containers.
| rkagerer wrote:
| I see you support Linux and MacOS hosts. Any Windows support
| planned?
| timsuchanek wrote:
| This is very exciting. It enables a cross platform, language
| agnostic plugin system, especially for agents, while being safe
| in a VM.
| simonreiff wrote:
| Hey this is pretty neat! I definitely would try using this for
| benchmarks and other places where I need strong isolation as
| Docker is just too bloated and slow, but sadly I don't think I
| can run this natively on my Windows laptop. I hope you extend to
| WSL! Good luck and congrats on launch.
| fqiao wrote:
| Hey thanks so much for the feedback. Yah try it and let us
| know. We have a discord if you want to join, but either github
| or discord feel free to report any issues you find to us.
|
| Cheers!
| sureglymop wrote:
| What I really like about containers is quickly being able to spin
| one up without having to specify resources (e.g. RAM limit). I
| hope this would let me do that also.
| chwzr wrote:
| I see the alpine and python:3.12-alpine images in your cli docs.
| Where does these come from?is it from a docker like registry or
| are these built in? Can I create my own images? Or this this
| purely done with the smolfile? Is there a Ubuntu image available?
|
| Looks really nice btw. Hot resize mem/cpu would be nice. This
| could become a nice tech for a one-backend-per-customer infra
| orchestrator then.
___________________________________________________________________
(page generated 2026-04-17 23:00 UTC)