This, perhaps indirectly, is one of the principles behind Gini. In this case, perhaps this is a matter of downloading drivers. But since it is based on Java, the concept of portable code moving from device to device is one of the basic concepts of the system.
Now, for this purpose, this code does not "move" as such, but rather is copied. It does not "leave" the server.
But you can see, in particular, with Java, that, based on starting with an empty JVM and some kind of shell, it would be quite simple to make the code "move" from one JVM to another.
You can see the process as follows.
1) System A runs an application with state and local classes. 2) System B has a "transmitting shell" running in the system. 3) A wants to move the application to B 4) Pausing the application and serializing its state can be as simple as using serialization of Java objects. This serialized object has a "reload" method. 5) B installs a ClassLoader, which refers to classes in System A. This class loader will copy the classes on request from A to B, then it can store them locally. 6) A sends the state of the serialized application to B, which de-serializes it. 7) ClassLoader on B starts pulling class files from A because the application is deserialized. 8) When the object is deserialized, B calls the "restart" method and the application continues to work. 9) "Forgets" about the application, and B continues to work separately from A.
Obviously, this is naive and fraught with potential problems.
But you can see how, in particular, with a virtual machine, something like this might work.
Modern VM architectures are working on this process, and in fact this process, instantly starting virtual machines, moving images to other machines and starting them. The basics of virtual machines make this easy.
A Java example is just something you can play with without having to become a virtualization engineer.