#Smalltalk and other #ImageBased #ComputerLanguages have a reputation for making software developed in them hard to upgrade. As far as I know, this has never been satisfactorily solved.

#Erlang, on the other hand, lets you upgrade modules "live", though they need to be made for it.

The persistent #LPMud implementation #DGD had hot code reloading built in: IIRC if you upgraded a class there was a command you could call to upgrade each instance of that class to use the new code.

@seanl #CL #commonlisp lets you update live code also.
@Nixfreak The live update is the easy part. It's updating state and dealing with multiple versions running at the same time that's hard.
@Nixfreak A Python messaging server we used at Linden Lab had live update too, but it was just replacing the module, so it relied on the module's either being stateless or explicitly dealing with any leftover state from the old module.

@Nixfreak In #Erlang, the thing you're live-updating is often the module underlying a process, so updating the state is mandatory. Upgrade is implemented by the built-in behaviors IIRC, so you couldn't just live-upgrade *any* process.

In #lpmud you'd be upgrading classes, which are in many ways like Erlang processes, but IIRC you don't deal with state as explicitly and there was no concept of version, so you'd better only jump one version at a time.