DynAMOS is a live updating system for operating system kernels. It's the first updating system that synchronizes updates of non-quiescent kernel subsystems: parts of the kernel that never stop running.
Updates are applied on the fly: no kernel reboot is required. Other than having basic support for loadable modules (to load DynAMOS) a kernel doesn't need to have been specially designed to be updateable.
Kernel updates are written by hand and use the kernel source code as input to get compiled. The compiled binary is modified before loading the update to let DynAMOS take over code execution at key points. This happens automatically with a command-line tool that loads and applies the updates.
Live updates of code are applied with a new mechanism called adaptive function cloning. This is a dynamic binary instrumentation mechanism that does two main things: (a) it overwrites live code to jump to a different location in memory, and (b) it switches execution dynamically and adaptively among multiple versions of functions, possibly concurrently running.
This ability turns out to be necessary. To transform their data safely, some updates depend on synchronization of multiple versions of the same function.
Speaking of data updates, DynAMOS also updates live compact datatype definitions. When a new field is added, a shadow data structure containing the new field enlarges the datatype.
There's no guarantee of semantic safety though. Since updates are written by hand this can lead to many bugs. But it can also be very exciting! There's a distinct kind of pleasure (and intensity) in changing software in ways you're not supposed to, and few software is as exciting to change as a live OS. I crashed my computer tens of times before starting to test inside an OS VM.
If they don't damage the kernel, updates can be safely reversed. DynaMOS can reverse a live update with the guarantee the update is not used by the stack or program counter of any process.
Updates applied successfully with DynAMOS include:
The software is available here and there is a user manual [HTML single] [HTML multiple] [PDF]. There is also a paper: