A developer at Oxide Computer Company recounts debugging a broken XMODEM file transfer on macOS in 2022. The root causes were two-fold: an FTDI USB-to-serial chip's 16ms latency timer adding ~17 minutes of overhead, and a macOS driver bug that silently dropped bytes mid-packet. The latency timer fix was straightforward via libftdi, but the dropped-bytes issue required bypassing the macOS driver entirely. The solution was a minimal XMODEM sender written in 143 lines of Rust using the ftdi crate and libftdi, which reliably transferred a 64MB ramdisk. The tool was polished and released as rfsx on GitHub, using the oxidecomputer/xmodem.rs fork for protocol handling.
Table of contents
Using XMODEM for file transfersGetting startedFailing fasterThe first rule of debugging embedded communicationsSidestepping the macOS driverPolishing and releasingSort: