Build1 distinct publisher3 min readUpdated
Encore's crackling drives Firecracker on Linux and Apple's hypervisor on macOS. Getting one set of images to boot on both meant re-implementing much of what Docker and a Linux host do for free.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The expensive half was never the Go binaries. Those cross-compiled with `GOOS=linux GOARCH=amd64`, rsynced to the build host, and Encore decided whether a restart was needed by counting the transferred files [10]. Images were the problem, because Firecracker boots a block device while Docker produces layers, and Encore says it could not find an existing tool that turned one into the other [11]. So the conversion got written in house: `docker save`, explode the tarball locally, rsync the layers and manifest across, then pipe a shell function into a login shell on the far end and run it there [12].
What that function does is a list of jobs a container runtime normally handles. It re-extracted every layer in manifest order and deleted the `.wh..wh..opq` whiteout markers with `find`, because `tar` will not apply them [13]. It wrote a hardcoded `/etc/resolv.conf`, since the VM had no DNS otherwise [14]. It lifted the image's environment variables out of the Docker config with `jq` [15], then called `mksquashfs` to produce something Firecracker could boot [16]. There was a cache keyed on the Docker image id to skip the whole path on a match [17], which is least useful in the case that matters: the conversion ran whenever anything in the image changed, which was most of the time if you were working on the guest side [18].
Underneath that, the dev host ran Firecracker inside a Docker container, which meant `--privileged` plus `/dev/kvm` and `/dev/net/tun` passed through, because the process inside was going to make tap devices and boot VMs of its own [20]. Firecracker wants those taps on a host bridge, and a container has no host bridge, so a script created a `docker0` bridge and made `eth0` its member before the build service came up [21].
The two spans Encore gives leave no gap between them, so for the entire life of the production hypervisor, nobody worked on the build system on the machine they were typing on [23]. Each engineer instead got a personal user on one shared box in a datacentre, reached over Tailscale [8]. The shell was eventually rewritten in Go, but the pipeline and the host stayed the same [22], which is the tell: this was not a stopgap anybody expected to remove, it was infrastructure.
The fact that carries the story is the declined port. According to Encore, a working proof of concept on Apple's Virtualization.framework existed and the maintainers turned it down [4], so the work of making a Mac boot the same artefact landed on the people who needed it. Encore's answer is a single microVM API over two hypervisors, and the entry fee was rebuilding much of the Linux image toolchain to run on macOS [6]. Firecracker's minimalism is the point of it: only what a Linux kernel needs [2]. The cost of that minimalism does not disappear when a shop runs Macs. It moves into the shop's own repo, where it now has to be maintained twice over.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Encore built crackling, a single microVM API that drives Firecracker on Linux and Apple's hypervisor on macOS; booting the same images on both required rebuilding much of the Linux image toolchain to run on macOS.
Encore builds and deploys backend applications, and since mid-2022 every one of those builds has run inside a Firecracker microVM.
Firecracker strips the emulated hardware down to what a Linux kernel needs, giving each build the isolation of a virtual machine with startup close to the cost of a container.
Firecracker drives KVM, so it needs a Linux host with /dev/kvm, which no Mac has, and most engineers at Encore develop on a Mac.
For four years, working on Encore's build system meant working on it somewhere other than the engineer's own machine.
Onboarding was a one-time script that SSHed into the shared build machine as root, pulled the engineer's public key from their GitHub keys URL, created a user, added them to the kvm and docker groups, copied VM images into ~/images and hard-linked the firecracker binary into ~/binaries, since every user needed it under their own tree on the one box.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed first-party account, no outside corroboration
The post is unusually specific for a vendor engineering write-up: it reproduces the deploy script, the privileged docker run invocation, the in-container bridge script, and the exact conversion steps, which makes the mechanics checkable by anyone who has built the same thing. But the cluster contains exactly one source, all of it authored by the party whose tooling is described, with no benchmarks, no repository, and no third-party or upstream confirmation, most notably for the claim about Firecracker maintainers declining macOS support.
Real internal production use, no external uptake shown
Adoption is credibly evidenced inside one company: Firecracker has backed every Encore build since mid-2022, the shared remote dev host ran from 2022 until replacement, and crackling is described as now running the build system natively on engineers' Macs. Nothing in the cluster shows adoption beyond Encore: no repository, release, licence, downloads, or other users of crackling are disclosed, so the portable microVM API is a single-org datapoint.
Mostly candid, mildly ahead of what is shown
The write-up is self-critical rather than promotional about the old system, and the pain it describes is documented in code, so it is close to aligned. It runs modestly ahead of its evidence in two places: the headline capability, one API booting the same images on Firecracker and Apple's hypervisor, is asserted without any demonstration, artifact, or measurement, and the framing that upstream will never close the macOS gap rests on Encore's own account of maintainer intent. No latency, throughput, or isolation numbers are offered for either the old loop or the new one.
Vendor blog tied explicitly to its own product pitch
The publisher is the subject: encore.dev is describing tooling it built, on its own blog, and states the motivation in commercial terms, that a company whose pitch is smooth backend development could not run its build system on the machines its engineers use. That is a clear developer-marketing and recruiting incentive. It is partly offset by the post's willingness to publish unflattering internals such as root SSH onboarding, privileged containers and a hand-built docker0 bridge, which a purely promotional piece would omit.
Confident on mechanics, weak on verification
Confidence is high that the described workflow existed and that the technical constraints are stated correctly, because the post reproduces the commands and the constraints match how Firecracker, KVM and Docker layers behave. Confidence is materially lower on anything requiring outside verification: crackling's real portability, the prior-art gap, upstream maintainer intent, and any quantified improvement. Single publisher, single item, no contradicting or corroborating coverage.
build
The middle tier for Postgres: own kernel, no public IP, and you own the backups1 distinct publisher
build
Docker writes its own hypervisor, and inherits every bug in it1 distinct publisher
build
Say "reliably" in a webhook spec and you have bought the whole distributed systems curriculum1 distinct publisher
build
The 680 MB database that was really a 17 GB disk: self-hosted support platforms fail at month six1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 22, 2026