Java solves part of the problem of mobile code---it defines a machine-independent bytecode that can be safely executed on different machines. The important problem that remains is how to execute this mobile code efficiently. The current practice is for each machine to interpret the bytecode, but this is not an efficient approach. Supporting mobile code on network nodes requires that the bytecode be compiled, but this puts the compilation on the critical path. We are addressing this problem by developing fast compilation techniques. Using technology we developed for dynamic code generation, we will be able to compile incoming bytecode fast enough for a 200MHz machine to keep pace with a 5-10Mbps link. That is, in the time required to receive a mobile program over a network at 5-10Mbps, we will be able to compile it into efficient native code.
Browsing and searching are the two main paradigms for finding information in a network, but they are used separately in most current systems. We are creating a system in which a combination of both are used in a fully dynamic and customizable way. For example, users will be able to browse until they find an interesting location, and then they will interject their own search engine into that location. Developing this application has two benefits. First, we believe it provides a useful paradigm for finding information in a network. Second, it is a realistic application for mobile code, and as a consequence, provides an ideal setting for experimenting with and verifying liquid software as a paradigm for networked systems.
We are developing a runtime system for Java on top of the Scout operating system. We will use the resulting system to experiment with liquid software as an approach to building large-scale, dynamically-customizable networks. This demonstration system will allow us to understand the interaction between liquid software and the underlying operating system (e.g., the Java API). Issues include resource management, interface design, and security.