For systems that require (or would prefer) continuous operation, software updates to fix bugs or upgrade functionality must be applied on-the-fly, without shutting the system down. While on-line updates have long been possible for specially-designed services employing redundant hardware, there is increasing interest in supporting on-line software upgrades generally, e.g., for mobile devices and general-purpose operating systems. Over the past several years my research group has been investigating a practical, general-purpose approach for updating software on-the-fly. I will describe the basic approach, the static analyses we developed to ensure updates are safe and applied in a timely fashion, and our experience of successfully updating substantial open source servers written in C, on-the-fly, with patches that correspond to several years' worth of actual releases. We believe we are nearing a time when highly-flexible dynamic software updating services will be practical and reliable enough for everyday use.