\section{Related Work}
\label{sec:related}

Several approaches have been proposed recently to provide a Java-based
metacomputing infrastructure for large scale networks. These include
\emph{ATLAS}~\cite{baldeschwieler96},
\emph{Charlotte}~\cite{baratloo96}, and
\emph{ParaWeb}~\cite{brecht96}.
% However, all of these systems
% have some shortcomings compared to the proposed SuperWeb
% architecture, limiting either scale or applicability.
All three projects are designed explicitly to run parallel applications
and provide a specific programming model. None of the three
include an economic model or way of providing incentives for participation.

ATLAS provides a global computing model based on Java and on the Cilk
programming model~\cite{Blumofe95}
which is restricted to tree-based computations. ATLAS
ensures scalability using a hierarchy of managers (their equivalent
of SuperWeb brokers). The current implementation uses native libraries which
may raise some portability problems. 
Charlotte provides distributed shared memory and uses a fork-join model
for parallel programming. A distinctive feature of this project is the
eager scheduling of tasks where a task may be submitted to several
servers to provide for fault tolerance and ensure timely
execution.
Both Charlotte and ATLAS provide fault tolerance based on the fact that each
task is atomic. In Charlotte, the changes to the shared memory
become visible only after a task completes successfully. 
This allows a task to be resubmitted to a different server,
in case the original server fails.
In ATLAS each subtask is computed by a subtree in the hierarchy
of servers. Any subtask that does not complete times out and is recomputed
from a checkpoint file local to its subtree.

ParaWeb provides two separate implementations of a global computing
infrastructure each with a different programming model. Their Java Parallel
Class Library implementation provides new Java classes that provide
a message passing framework for spawning threads on remote machines
and sending and receiving messages. ParaWeb's Java Parallel Runtime
System is implemented by modifying the Java interpreter to provide
global shared memory and allow transparent instantiations of
threads on remote machines.


% Both ATLAS and ParaWeb use Java applications instead of applets, which
% requires users to be familiar with at least a Java interpreter or
% compiler and to trust arbitrary runtime bytecode to be executed at the
%local host, since applications are not restricted in their access to
% the network and local resources.  Moreover, donating resources to
% clients is more cumbersome than in the SuperWeb architecture.
% ParaWeb's Java Parallel Runtime System (JPRS) even requires a modified
% Java Virtual Machine interpreter.  
% The scalability achievable by the ATLAS architecture is
% limited to parallel task graphs mappable to hierarchical structures,
% while the scalability of the Charlotte system might be limited by the fact 
% the client and scheduler need to reside on one machine.

Earlier network computing approaches, such as \emph{Network of
  Workstations (NOW)},
\emph{PVM}~\cite{Sunderam:1990:PFPa},
\emph{MPI}~\cite{Anonymous:1994:MMI}, 
% \emph{WebOS}~\cite{vahdat96},
%\emph{Nexus}~\cite{nexus}, 
\emph{Linda}~\cite{WhLe88}, \emph{CORBA} \cite{YanDud96},
\emph{Piranha}~\cite{pirnha.ics92}, and
\emph{Legion}~\cite{Grimshaw94} can be distinguished from this project
in that they either require the user to have login access to all
machines used in the computation, require operating system
modifications, or require the maintenance of binaries for all
architectures used in the computation.  Thus, they are limited in size
and have a high administrative overhead.  Although more recent
systems, such as \emph{JPVM}~\cite{ferrari} and
\emph{Java-MPI}~\cite{taylor}, overcome the heterogeneity of today's
networks, they are not intended to execute on anonymous machines. In
contrast, our project aims at allowing any individual user to register
its computing resources with a broker using an arbitrary Java-capable
browser such as the Netscape Navigator and without violating any local
security policies. Because of the simplicity of use, thousands of
users could easily register their computing resources with a broker,
giving us the ability to harness an extraordinary amount of
computational power.

The use of Java as a means for building distributed systems that
execute throughout the Internet has also been recently proposed by
Chandy et al.~\cite{chandy96} and Fox et al.~\cite{fox96} and
studied in~\cite{sarmenta96}. Some of the
mechanisms needed to implement the proposed framework may eventually
be realized through recently released standard Java components such as
\emph{Remote Method Invocation (RMI)}~\cite{sun96a} and \emph{Object
  Serialization}~\cite{sun96b}, or have already been provided by other
research groups (for example ~\cite{sivilotti96}, ~\cite{rossi} and
~\cite{gutfreund}).  Recently, a large variety of Java performance
boosters have become available ~\cite{freejava}.
Most commercial compiler vendors
offer JIT Java compilers, and new web browsers use JIT techniques,
too. Other languages worth considering, besides Java,  include the ``E''
programming language \cite{elang} which is very similar to but offers
a more flexible security framework than Java, and the Limbo programming
language in the Inferno operating system \cite{inferno}, which allows,
among other features, for easier and more efficient just-in-time compilation.

The secure execution of arbitrary binaries has been recently addressed
by at least two techniques. First, \emph{software-based fault
  isolation} techniques \cite{omniware95} guard against insecure
system calls of programs by patching their binaries.  Second,
\emph{secure remote helper applications}~\cite{GoldbergWTB96} use
operating system tracing facilities
% such as \emph{SLIC}~\cite{ghormley96}
to limit the use of resources that could violate system integrity.


