 
 
   
  
 Introduction  Software  
    Hardware  Business/Social  
  
  
Long Mail Software Philosophy/Architecture
Digital data cannot be stored independently of the software to access
it.  Thus 
In Stewart Brand's book, The Clock of The Long Now, he gives a diagram
of the layers of social time, with the fast, ephemeral, dynamic layers
above building upon and constrained by the slower, stable layers
below.  Over the past century and a half of its history, software as a
social phenomemon has evolved from an obscure, cutting edge
innovation, to an integral part of world culture.  Thus, software has
become embedded in Stewart Brand's layers of time, one interpretation
of which could be:
       
 
    
The broadening of software creation from simply being a technical or
commercial creation into being part of a culture has implications on
the design of software systems that are intended to survive the
lifetimes of that culture.
 Long Term Software Strategy
Designing a software system to last several lifetimes requires more
than good engineering.  The creation and maintenance process must be
aware of culture needs and contraints and should contribute
beneficially to the culture.
   Traditional good software engineering
  
     Writing maintainable code (Reward patience)
     Good documentation
     Good error/exception handling/reporting
  
   Plan for continuity
  
      Designing for scalability in size and time
      Plan for changes in data representation
      Use ASCII/Unicode encodings
      Use interpreted languages if possible
  
   Maintaining data/code locality:  to protect against partial code loss
   Work within the culture of software
  
     Choose open source tools/protocols/encodings that are likely to survive
    
        Languages: Perl, Python
         Operating Systems: Linux/BSD OS
        Protocols: TCP/IP, IMAP, XMLRPC
    
     Support and work with existing projects
     Give away our own code and designs
  
 Software Architecture 
Long Mail follows the UNIX structure of multiple process systems.  It
consists as a collection of daemon each of which is responsible for a
particular task.  Daemons normally communicate with each other via an
RPC mechanisms or by filesystem based semaphore.
The following daemons will exist in the system:
 Batching: Handles incoming mail by placing it into a batch
and hands it off to other daemons for processing.
 Indexing: Creates indices for each mail message.  Indices
are typically fixed length record flat files for good scalability.
 Backup: Copies batches of mail messages to CD-R as
non-magnetic backup.  Coordinates with mirroring daemon to keep CD
backups as synchronized as possible.
 Mirroring: Talks and exchanges e-mail messages with other
mirrors to insure maintenance of identical archives.
  
 Query: Handles incoming search, browse, and retrieval requests.
     These daemons may be spread over multiple machines for each mirror.