There has to be some downtime allowed, otherwise there’s no way to update the system the node is running on.
Also that approach reads like runtime kernel patching, which is error prone… (you could quite easily serialize the data and deserialize & migrate to a new schema in the new executable)
The actual update seams to be rather easy. The problem lies in the consensus of what version should be used. Like a global crdt
Map<SectionId, VersionThatShouldBeRun> that contains the desired version for each section. After
n% signal support for the newer version it switches to that version… synchronized in some way…
I would rather signal support for specific features (same way bitcoin does, or rust with its editions ). The node software has support for that feature already built in, but disable until there’s consensus for it.