<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ed Stuurman</title>
    <description>The latest articles on DEV Community by Ed Stuurman (@edstuurman).</description>
    <link>https://dev.to/edstuurman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4243696%2Fed1488ae-3b23-4828-9b8c-b6c897c5536a.jpg</url>
      <title>DEV Community: Ed Stuurman</title>
      <link>https://dev.to/edstuurman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edstuurman"/>
    <language>en</language>
    <item>
      <title>The Myth of Invisible Virtualization: What Fly.io’s Fleet Patch Reminds Us About Hypervisors</title>
      <dc:creator>Ed Stuurman</dc:creator>
      <pubDate>Sat, 14 Nov 2026 01:03:36 +0000</pubDate>
      <link>https://dev.to/edstuurman/the-myth-of-invisible-virtualization-what-flyios-fleet-patch-reminds-us-about-hypervisors-91</link>
      <guid>https://dev.to/edstuurman/the-myth-of-invisible-virtualization-what-flyios-fleet-patch-reminds-us-about-hypervisors-91</guid>
      <description>&lt;p&gt;On November 6, 2026, the edge-cloud platform Fly.io published an incident post-mortem with a refreshingly candid title: &lt;a href="https://fly.io/blog/well-that-wasnt-fun/" rel="noopener noreferrer"&gt;&lt;em&gt;"Well, That Wasn't Fun: October 16 '26"&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The report detailed what happened three weeks earlier when an emergency Linux kernel zero-day landed on their desks. Fly runs bare-metal physical servers across dozens of colocation facilities worldwide, hosting customer workloads as lightweight microVMs on top of standard Linux hosts. They could not paper over this bug with a rolling configuration reload or a managed-cloud toggle.&lt;/p&gt;

&lt;p&gt;In a single afternoon, they had to patch and reboot &lt;strong&gt;every physical hypervisor in their global fleet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For a platform whose promise is effortless global deployment—type &lt;code&gt;fly deploy&lt;/code&gt; and your code spins up in Tokyo, Amsterdam, and Virginia in seconds—watching bare-metal motherboards power-cycle across twenty time zones was a stark reminder of an uncomfortable reality:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software cannot abstract away the physical machine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Underneath every serverless worker and ephemeral microVM sits a physical motherboard with fans, memory DIMMs, a power supply, and a monolithic Linux host kernel. When ring 0 bleeds, the marketing illusion of weightless compute vanishes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Live Migration
&lt;/h2&gt;

&lt;p&gt;In enterprise IT, virtualization vendors spent twenty years conditioning architects to believe that physical host reboots should never disrupt running workloads. That promise had a name: live migration.&lt;/p&gt;

&lt;p&gt;The pitch sounds magical: an active virtual machine, complete with open TCP connections and gigabytes of RAM, floats gracefully from Server A to Server B with zero downtime.&lt;/p&gt;

&lt;p&gt;For enterprise clusters with deep pockets, shared SAN arrays, and homogeneous CPU families, live migration worked reasonably well for planned maintenance—swapping a failing power supply, upgrading host RAM, or flashing motherboard firmware on one node while the cluster hummed along. In the face of an emergency host kernel zero-day, however, live migration is a conceptual dead end.&lt;/p&gt;

&lt;p&gt;First, modern edge platforms pair microVMs with fast local NVMe drives to deliver microsecond I/O that centralized SANs could never match. Copying tens of gigabytes of raw disk state per VM across top-of-rack switches takes hours, completely defeating the purpose.&lt;/p&gt;

&lt;p&gt;More fundamentally: &lt;strong&gt;where do you migrate to?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a critical vulnerability strikes the host Linux kernel, every hypervisor in the fleet is equally exposed. You cannot migrate workloads from one compromised machine to another and call it security. To make the destination host safe, you have to patch and reboot it first. &lt;/p&gt;

&lt;p&gt;Attempting to juggle running workloads across unpatched hosts during a critical security event only drags an acute maintenance window into an agonizing, multi-day circus. A cold reboot is not an engineering failure; it is the only clean remediation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Litmus Test of an Infrastructure Engineer Is &lt;code&gt;reboot&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Years ago, my homelab ran a cluster of three 4U single-socket servers tied together with quad-port Intel 10GbE NICs and VMware vSAN, before I eventually &lt;a href="https://www.stuurman.com/blog/2026-11-08-the-sunk-cost-of-homelab-sprawl-knowing-when-to-liquidate-silicon/" rel="noopener noreferrer"&gt;consolidated down to a single Proxmox node&lt;/a&gt; to cut idle rack power.&lt;/p&gt;

&lt;p&gt;Anyone who has operated a vSAN cluster recognizes the physical reality of that iron: the sharp whine of chassis fans spinning up, the heat rolling off the processor socket and banks of ECC RAM, amber drive LEDs chattering as storage pools balance, and the glacial wait while server UEFI firmware trains memory before the bootloader even displays on the IPMI console.&lt;/p&gt;

&lt;p&gt;Rebooting a vSAN node was a choreographed, high-tension ritual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Evacuating storage before maintenance&lt;/span&gt;
esxcli system maintenanceMode &lt;span class="nb"&gt;set&lt;/span&gt; --enable &lt;span class="kc"&gt;true&lt;/span&gt; --vsan-mode ensureObjectAccessibility
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You would wait for data to evacuate across the 10GbE links, watch surviving nodes absorb rebuild traffic, and pray an adjacent drive wouldn't throw an I/O fault while the first host was offline. The entire enterprise stack was engineered to avoid a reboot at all costs—which perversely turned every inevitable restart into an operational emergency.&lt;/p&gt;

&lt;p&gt;Later, moving to native KVM on Debian stripped away the enterprise mysticism:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Checking physical virtualization primitives directly on Linux&lt;/span&gt;
$ ls -lh /dev/kvm
crw-rw---- 1 root kvm 10, 232 Nov 13 10:15 /dev/kvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A virtual machine is just an ordinary Linux process with a PID. A virtual disk is a block device. A network interface is a bridge. And that brings you face-to-face with an essential truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The ultimate litmus test of an infrastructure engineer is typing &lt;code&gt;reboot&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If typing &lt;code&gt;sudo reboot&lt;/code&gt; into a hypervisor shell induces panic, your infrastructure is not resilient. It is fragile state pretending to be high availability.&lt;/p&gt;

&lt;p&gt;Hypervisors are mortal machines. Power supplies trip, memory modules throw uncorrectable ECC errors, and operating system kernels require zero-day patches. If your architecture relies on hypervisors running uninterrupted for five hundred days without a restart, you haven't engineered resilience—you have just been lucky.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing for Hypervisor Mortality
&lt;/h2&gt;

&lt;p&gt;The reason Fly.io rebooted its entire global fleet in an afternoon without catastrophic downtime comes down to modern systems design. Resilience does not mean building an indestructible hypervisor; it means building workloads that treat host mortality as a routine, non-critical event.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    Ingress["Edge Ingress Router"]
    subgraph HostA["Hypervisor A (Rebooting)"]
        Drain["Draining: SIGTERM"]
        uVM1["MicroVM A"]
    end
    subgraph HostB["Hypervisor B (Active)"]
        uVM2["MicroVM B (Cold Boot &amp;lt;300ms)"]
    end
    Storage[("Durable State\n(S3 / LiteFS WAL)")]

    Ingress -.-&amp;gt;|"Drains"| HostA
    Ingress --&amp;gt;|"Reroutes"| HostB
    uVM1 --&amp;gt;|"Flushes In-Flight"| Storage
    uVM2 --&amp;gt;|"Pulls Fresh State"| Storage&lt;/code&gt;&lt;/pre&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sub-second microVM boot times&lt;/strong&gt;: Legacy virtual machines took minutes to initialize SCSI drivers, ACPI tables, and enterprise init scripts. By stripping emulated hardware down to bare essentials, modern KVM and Firecracker microVMs boot in 150 to 300 milliseconds. An orchestrator can spin up replacement compute on an adjacent node before an edge proxy's connection timeout has even elapsed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decoupling compute from durable state&lt;/strong&gt;: Local NVMe should only ever be high-speed scratch space for ephemeral caches and temporary buffers. Real state belongs in durable, replicated tiers—object storage (S3) or replicated databases (like LiteFS or Raft WAL streams) distributed across independent physical machines. If a compute node carries zero irreplaceable state, power-cycling it carries zero emotional weight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disciplined &lt;code&gt;SIGTERM&lt;/code&gt; handlers&lt;/strong&gt;: A host reboot only drops traffic when software treats shutdown as an emergency. When a hypervisor drains traffic at the edge proxy, microVMs receive &lt;code&gt;SIGTERM&lt;/code&gt;, complete in-flight HTTP requests, flush pending database transactions, and exit cleanly within seconds before the host reboots.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Respecting the Physical Machine
&lt;/h2&gt;

&lt;p&gt;Fly.io’s incident report was a masterclass in operational honesty.&lt;/p&gt;

&lt;p&gt;It stripped away the marketing veneer and reminded us of the physical reality underneath the modern cloud. You can wrap your systems in declarative YAML, invoke them through slick CLIs, and hide them behind global Anycast routing. But at the bottom of the stack, your code runs on silicon seated in sockets, powered by copper, and governed by an operating system kernel.&lt;/p&gt;

&lt;p&gt;True engineering maturity is not about searching for an immortal hypervisor that never requires maintenance. It is about engineering humility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expect the host to reboot.&lt;/li&gt;
&lt;li&gt;Make guest boot times instantaneous.&lt;/li&gt;
&lt;li&gt;Decouple your state from your compute.&lt;/li&gt;
&lt;li&gt;Handle shutdown signals gracefully.&lt;/li&gt;
&lt;li&gt;And above all, never be afraid to type &lt;code&gt;reboot&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.stuurman.com/blog/2026-11-14-the-myth-of-invisible-virtualization/" rel="noopener noreferrer"&gt;www.stuurman.com/blog/2026-11-14-the-myth-of-invisible-virtualization/&lt;/a&gt; by Ed Stuurman.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>virtualization</category>
      <category>linux</category>
      <category>systems</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Hello DEV! 👋 Systems, Homelabs, and Building from Japan</title>
      <dc:creator>Ed Stuurman</dc:creator>
      <pubDate>Sat, 14 Nov 2026 00:19:21 +0000</pubDate>
      <link>https://dev.to/edstuurman/hello-dev-systems-homelabs-and-building-from-japan-5c46</link>
      <guid>https://dev.to/edstuurman/hello-dev-systems-homelabs-and-building-from-japan-5c46</guid>
      <description>&lt;p&gt;Hi everyone! 👋&lt;/p&gt;

&lt;p&gt;I figured it was overdue to introduce myself and join the conversation properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  A bit about me
&lt;/h3&gt;

&lt;p&gt;I'm &lt;strong&gt;Ed Stuurman&lt;/strong&gt;, an infrastructure and reliability engineer based in Japan (originally from Europe).&lt;/p&gt;

&lt;p&gt;My path in tech started in enterprise hardware escalations, debugging kernel dumps, and tracking down CPU microcode bugs at Hewlett Packard Enterprise. Since moving to Japan, my focus centered on carrier-grade messaging and distributed systems—scaling email security pipelines, MTAs, and observability systems protecting millions of domains.&lt;/p&gt;

&lt;p&gt;After daily driving Linux for 15 years (and a Mac for the last 5), Linux and BSD remain the backbone of everything I run—both in production and across my homelab.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I’m currently building &amp;amp; tinkering with
&lt;/h3&gt;

&lt;p&gt;When I'm not in my terminal debugging Layer 1–7 networking quirks or pruning trees in the yard, I've been spending time on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimalist Web Engineering:&lt;/strong&gt; Building fast, static web experiences with &lt;strong&gt;Astro&lt;/strong&gt; and &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, keeping client-side JavaScript to an absolute minimum (~5 KB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Homelab &amp;amp; Networking:&lt;/strong&gt; Running a low-power Proxmox cluster, WireGuard edge relays, and navigating the weird and wonderful world of Japanese fiber ISP routing (MAP-E, IPv6 IPoE, and carrier NATs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Assisted Pair Programming:&lt;/strong&gt; Treating modern AI coding agents not as magic autocomplete, but as high-leverage junior partners in a disciplined test-and-verify workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Physical Stack:&lt;/strong&gt; M4/3 photography, DIY yard irrigation, and teaching my preteen how real computers and physical tools work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I’ll be writing about here
&lt;/h3&gt;

&lt;p&gt;I enjoy writing about the gritty realities between software abstractions and physical hardware:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post-mortems, hardware mysteries, and why systems fail in surprising ways&lt;/li&gt;
&lt;li&gt;Homelab architecture, self-hosting, and practical networking&lt;/li&gt;
&lt;li&gt;Lightweight web architectures and modern developer workflows&lt;/li&gt;
&lt;li&gt;Musings on career longevity, international moves, and work-life balance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let's connect!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What is your favorite piece of hardware or self-hosted service running in your homelab right now?&lt;/li&gt;
&lt;li&gt;Anyone else navigating tech infrastructure from Japan or the APAC region?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking forward to reading your stories and sharing notes in the comments!&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>discuss</category>
      <category>homelab</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
