The problem, as I see it, is that you can’t take bits out of a running piece of software and replace them with other bits, and have them still work, unless said piece of software is trivial.
The capacity to do in-place updates of running software components dates back to at least the first LISP systems. Call it 1955? Modern day telephone switches and network routers are all built with the capability of doing hot upgrades, or they wouldn’t be able to reach the the level of uptime required (if you require 99.9999% uptime, going down for 30 seconds for an upgrade ruins your numbers for ten years). Additionally, those systems require that every component be independently crashable and restartable, for reliability purposes.