Technical honesty note: our Pod microVM runtime is a patched
fork of Firecracker,
the open-source VMM originally developed by AWS. This page is the
deep technical doc for engineers wanting to understand exactly
what we change against upstream. Everywhere else on Podflare we
refer to our own runtime as “Podflare Pod” — this is the one
place it matters to be specific about the substrate.
What’s in the patch
vendor/firecracker-patches/0001-podflare-vsock-uds-override.patch
adds two optional fields to LoadSnapshotConfig:
microvm_state.device_states.mmio_state:
vsock_device.device_state.backend.uds_path←vsock_uds_path_overrideblock_devices[i].disk_path← matchingdrive_overrides[*].path_on_host
pub on formerly-private VirtioBlockState fields). We also use the
existing snapshot_type: "Diff" flow with no modifications.
Why we need this
Everyfork(n=5) restores 5 Podflare Pod microVMs from a single
snapshot. Each child must bind its own host-side vsock UDS (because
they’re all concurrent) and use its own rootfs file (because writes
must be CoW-isolated). Upstream hardcodes those paths from the
snapshot state; there’s no post-load-pre-resume API to patch them.
Without this patch, multiple concurrent restores would collide — the
second child errors because the UDS already exists, or worse, overlaps
on the rootfs file and corrupts it.
Build
v1.15.1), applies every
patch in vendor/firecracker-patches/ in lexical order, builds, and
installs. The resulting podflare-firecracker binary is what runs on
the host as the Pod VMM — named podflare-firecracker on disk so the
filesystem path stays self-documenting for the operators who have to
debug it.
Rebase policy
Upstream releases every ~6 weeks. When we bump the pin:Upstreaming
The vsock override is a small, reasonable feature. We may submit it upstream. If accepted, the patch file disappears andbuild-firecracker.sh stops applying it — no Podflare-side changes
needed.
