Mobile Code

Most network protocols address the issue of heterogenous hardware platforms, including byte order of multi-byte integer representations. But an emerging technique for distributing applications involves "mobile code" -- code that can be transmitted across the network and executed on the other end.

Mobile Code Systems

Each of the following systems presents technology that can be used to distribute applications across the web.

We evaluate them with respect to Design Issues for Hypermedia Applications Development.

From lucent. Lots of Plan9 heritage. Limbo is their language for distributed apps, though inferno is a whole system: protocols, APIs, ...
Java -- evaluation
Java is a programming language similar in syntax to C++, but similar in other ways to Smalltalk and Objective C. The system includes a bytecode compiler and a virtual machine runtime. The runtime is typesafe and supports a form of secure loading, so that code from untrusted sources can be added dynamically.

The demonstration app for Java -- HotJava -- is a complete web browser. It demonstrates that (1) the Java interpreter has reasonable performance, and (2) the Java class library is relatively complete, including the Abstract Window Toolkit and thread-aware network I/O.

See also: OSF RI work on Java

Safe-Tcl -- evaluation
Safe-Tcl is somewhat less ambitious performance goals than some of the other systems here, but it is also somewhat more mature. It is deployed in a number of mail user agents, to support "enabled mail," which is a platform that can support voting, questionaires, forms, and a host of other applications.

The Surf-It browser demonstrates use of Safe-Tcl in the web. At the time of this writing (11 Sep 95) it's definitely alpha stuff, though.

I've heard of something called "hippo" too, though I haven't seen it.

Penguin (perl5) -- @@evaluation pending
The perl5 gang has gotten in on the act (Jan 96). These guys have a long history of delivering distributed applications to the net community. They've tackled the problem of sending signed, encrypted code around. Their resource accounting is tied to the OS accounting mechanism (e.g. rlimit()).
Python -- evaluation
Python is a really nifty object oriented language in the spirit of ABC and Modula-3, by Guido Van Rossum at CWI (currently visiting at CNRI). It's used quite a bit as an embedded/extension language in hypermedia projects, and quite a bit for the sort of text processing and administrative scripting that perl is often used for.

"Safe python," or restricted execution, is under development. The demonstration app is -- you guessed it -- a web browser. Check out Grail, their web browser that supports applets.

Caml Special Light
MMM is a web browser written using this ML dialect. It supports runtime safety in tow ways: a strongly typed runtime, plus PGP signatures on downloaded code. The GUI is Tk-based. Among browsers with sourcecode freely available (0.30 beta released Apr 5, 1996), it's the fastest and smoothest I've seen (aside from the buggy/slow tables implementation).
scheme48 -- evaluation
scheme48 is a bytecode scheme compiler and a VM. Work at NEC extends scheme48 with distributed computations: continuation passing across the net.
Guile -- evaluation
The recent guile release includes some rather interesting proof-of-concept implementations of interoperability with each of the above systems: it's runtime has been integrated with the Tk library (and the Tcl library in a way that's compatible with many of its extensions), supports many of the systems programming features needed to support scsh, and a Java class loader and a compiler for a C-like (and hence somewhat Java-like) language.
Obliq -- evaluation
Obliq is a lexically-scoped untyped interpreted language that supports distributed object-oriented computation.

Obliq objects have state and are local to a site. Obliq computations can roam over the network, while maintaining network connections.

Demonstration apps for Obliq include visual-obliq, a complete direct-manipulation application builder ala Visual Basic.

ACTOR like: Scheme with lazy evaluation Interpreted + Object Oriented + Forward & Backward chaining rules

PROTOCOL - KQML (asynchronous) Remote Evaluation, Query & Update, Notification, Brokering, Networking between servers (forward, pipe, register, etc.)

IBM's tried-and-true REXX language souped up with objects and networking. Runs on the Java VM. Non-commercial use license.
Codeworks (Glyphic)
Prototype object system (similar to Obliq). Small system! Alan Kay's group.
Architecture Neutral Distribution Format. Distribution format is a parse tree (an intermediate step in compilation) rather than machine code instructions or bytecodes. OSF/RI is now studying the relationshop to Java.
At UCI. Another mobile code technology based on parse trees rather than opcodes.
The Aglets Library - Programming Mobile Agents in Java(tm)
interpreted C++-like language, DSOM integration. Supports migration of code and state (mobile closures?)

The following technologies are related and interesting, but they don't appear to be available on the net.

Nifty multimedia system, ala Macromind Director.

Hmm... looks kinda SmallTalk-ey, with a little dylan/CLOS feel to it.

Telescript from General Magic
I finally got a chance to read up on this. Very interesting architecture: of places, tickets, etc. The notion that object have an "owner" thread/place is distasteful, but for accounting purposes, I can see that it's necessary. @@need to do an evaluation.
EOLAS -- Embedded Objects Linked Across Systems
Another mobile code system. I haven't checked it out. The IPR issues look interesting.
need to check this out too...
need to check this out...

Misc Related Resources

multiple language support. No source yet (early 96)
Distributed Computation
by gordoni@base.com Last updated February 8, 1995
by Antony Courtney
Distributed Programming: Agentware / Componentware / Distributed Objects
by Steven D. Majewski University of Virginia sdm7g@Virginia.EDU
Evolution, Inc
They introduced a modular browser architecture, and will eventually migrate to Java.

$Id: Overview.html,v 1.10 1996/12/09 03:29:22 jigsaw Exp $