D'Agents 2.1 (Beta Release)
===========================

  A mobile-agent system in which agents can be written in Tcl, Scheme or
  Java.  D'Agents 2.1 is the third public release of the D'Agents system, 
  and is primarily a bug-fix release.  The first release, D'Agents 1.1, was 
  also known as Agent Tcl.


Contact
=======

  Feedback, bug reports, questions, etc., should be directed to

  Bob Gray
  Thayer School of Engineering, Dartmouth College
  8000 Cummings Hall
  Hanover, New Hampshire 03755 

  E-mail: robert.s.gray@dartmouth.edu

  My turnaround time is (usually) excellent.


What is D'Agents 2.1?
=====================

  A mobile agent is an autonomous program that can migrate UNDER ITS OWN 
  CONTROL from machine to machine in a heterogeneous network.  The agent
  interacts with other agents at each network site in other to accomplish its
  given task.  D'Agents 2.1 is a transportable agent system in which the agents 
  are written in Tcl, Scheme or Java.  D'Agents is under continuous use at
  Dartmouth in a range of information-retrieval and information-management
  applications.


What's new in D'Agents 2.1?
===========================

  D'Agents 2.1 corrects many bugs that were present in D'Agents 2.0,
  includes several additional performance enhancements.  Although only the Tcl
  and Scheme modules are included in this source code distribution, the Java
  module is available by request.  If you are interested in the Java module,
  you should e-mail robert.s.gray@dartmouth.edu.


How do I get D'Agents 2.1?
==========================

  D'Agents 2.1 is available through our web site:

    http://agent.cs.dartmouth.edu/


Components of D'Agents 2.1
==========================

  - A server that sits at each network site to which agents can be sent.  
    The server provides a namespace for agents, accepts, authenticates and
    executes incoming agents, and handles agent-to-agent communication.

  - Extended Tcl, Tk and Scheme interpreters that provide agent-related commands


Features of D'Agents 2.1
========================

  - Agents are written in standard Tcl, Scheme or Java

  - Safe Tcl, access-control lists and public-key cryptography (PGP) are used
    to protect a machine from malicious agents.

  - An agent migrates to a new machine with the agent_jump instruction.
    agent_jump transparently captures all of the agent's current state and
    sends the state to the new machine.  The agent is restored on the new
    machine and continues execution at the statement immediately after the 
    agent_jump.

  - An agent can clone itself with the agent_fork command and can create
    child agents with the agent_submit command.

  - Agents communicate by sending messages and event notifications to each
    other or by establishing direct TCP/IP connections for extended
    interaction.

  - Agents can be written in an event-driven style and can display GUI
    interfaces on their home machine or on remote machines using the normal
    features of Tk (event handlers can be associated with incoming
    communication from other agents).


Main deficiency
===============

  D'Agents is far from complete.  The main deficiency at this time is the
  lack of fault-tolerance mechanisms.  For example, if a machine fails, all
  agents that were executing on that machine are lost.  


Installation notes
==================

  - D'Agents 2.1 runs on standard Unix platforms.  It is known to compile on
    most versions of Linux, FreeBsd and Solaris, and with most versions of
    the GNU g++ compiler and the Sun CC compiler.  It should be easily 
    portable to any Unix platform that provides TCP/IP, Berkeley sockets, and 
    reliable signal handling.

  - Installation instructions and other documentation can be found in the "doc" 
    subdirectory.  Please refer to the file "doc/README" for details.

  - D'Agents 2.1 is a *beta* release.  It could install easily or it could 
    require quite a bit of time and effort.  Please be prepared either way.
 
  - You are not alone however.  If you have any problems compiling or using 
    the system, please contact me.  I will do everything I can to help.  My
    e-mail address is

      robert.s.gray@dartmouth.edu

    In addition, there are two mailing lists to which you can subscribe. I will
    announce new software, new documentation, bug fixes and bug reports on the 
    "dagents-announce" mailing list.  In addition, anyone who is interested can
    discuss D'Agents and other mobile-agent systems on the "dagents" mailing 
    list.  To subscribe to one of these mailing lists, send an e-mail message to

      majordomo@dartmouth.edu

    The body of the e-mail message should contain either the command

      subscribe dagents-announce

    or the command

      subscribe dagents

    depending on whether you are subscribing to the "dagents-announce" list or
    the "dagents" list.  If you want to subscribe to both lists, you must send
    two separate e-mail messages.

    In addition, our web site, http://agent.cs.dartmouth.edu/ will always
    have the most recent information about D'Agents.

  - Even if you have no problems or worked through them yourself, I would
    appreciate hearing how it went, what changes you had to make, what you
    like, what you hate, etc.

  - NOTE that you do NOT need to obtain and install Tcl 7.5 and Tk 4.1 
    separately.  In fact the system will not even work with standard Tcl 
    and Tk.  Modified (but fully compatible) versions of Tcl 7.5 and Tk 4.1
    are included in the source code distribution.  Similarly, you do not need
    a separate Scheme interpreter.


Some notes about the D'Agents 2.1 source code
=============================================

  - We have separated the C++ classes associated with D'Agents into more,
    better organized files. 

  - Although the D'Agents core is generally thread-safe, some of the support
    classes, such as DynamicString, AgentLocation, etc., are not yet thread-
    safe.  This will not cause any problems with Tcl or Scheme agents since
    these agents only have a single thread, and will not cause problems
    with Java agents as long as all agent methods are invokved from the SAME
    thread.

  - D'Agents relies on the SIGPROF, SIGALRM, and SIGIO interrupts so don't
    redirect them if you write a Tcl extension for use with D'Agents.
    If you want a SIGIO interrupt for a particulr fd, use the SigioHandler
    class that is found in the "platform" subdirectory.  Similarly, if you
    want a SIGALRM or SIGPROF, use the Timers class that is also found in
    the "platform" subdirectory.
