BareMetal is an x86-64 exokernel written entirely in hand-coded Assembly. This repo adapts it to run natively inside Firecracker microVMs. No BIOS, no UEFI, no PCI bus - just virtio-net and virtio-block over MMIO.
~800µs cold start in Firecracker on an AMD Ryzen AI Max+ 395. ~600µs with only networking.
Each microVM can be provisioned with as little as 2MiB of RAM. The kernel binary itself is ~5.5KB - the rest of the kernel image is layout padding to place the monitor and application payloads at fixed memory addresses.
It’s always fun to see this get brought up on Hacker News! I’m the developer behind BareMetal OS.
Keep in mind that this is all geared toward raw compute and throughput. No ring-3, no multitasking (we do support multiple cores though), and no higher-level abstractions like TCP/IP or full-featured file systems.
While it’s all coded in X86-64 assembly, a rewrite to ARM/RISC-V would be interesting once that hardware is standardized.
Keyboard is supported. NVMe, AHCI, ATA, and VirtIO for storage. A few gigabit network adapters from Intel, Realtek, and also VirtIO. A 10gbit intel network driver is currently being developed. Send works on it currently.
That was the primary reason - a fun weekend project converting 6502 Assembly to x86-64 line by line. The x86-64 version comes in at a 384-byte binary due to instructions being a bit longer.
Looks like their website has changed around. They used to have a kit that came with a raspberry pi (that you had to assemble yourself) and their own Linux-based OS that taught you about computers and the command line
My iPhone is my pocket computer. It's on a tablet plan (data only - up to 1GB for $20 CAD) because voice and text is something I would hardly use. TextNow worked fine for me in past for phone calls and texting non-apple devices but I've since switched to Hushed as my go-to. I've never used the built in "Phone" app.
~800µs cold start in Firecracker on an AMD Ryzen AI Max+ 395. ~600µs with only networking.
Each microVM can be provisioned with as little as 2MiB of RAM. The kernel binary itself is ~5.5KB - the rest of the kernel image is layout padding to place the monitor and application payloads at fixed memory addresses.