|
|
1.1 ! root 1: % begin text ! 2: ! 3: \banner ! 4: ! 5: \section{Introduction} % mtr ! 6: \tagfigure{0}{\MTS/ model}{mtsmodel} ! 7: ! 8: The UCI version of the Rand Message Handling System, \MH/, ! 9: is a user agent. ! 10: In the interests of brevity, ! 11: we dispense with the usual definition of terms, ! 12: refer the reader to Figure~\mtsmodel, ! 13: and simply note that \MH/ is not responsible for delivering mail. ! 14: Rather, ! 15: it interacts with a {\it message transport system}, \MTS/, ! 16: at two interfaces: ! 17: it sends mail by placing it through a {\it posting slot} to the \MTS/, ! 18: and it receives mail by retrieving it through a {\it delivery slot} from the ! 19: \MTS/. ! 20: Besides these two \MTS/-specific activities, ! 21: the tasks which \MH/ addresses are: ! 22: the composition of messages ! 23: (which may, or may not, be in reference to previously sent messages), ! 24: the reading of messages, ! 25: and the organization of messages. ! 26: ! 27: \MH/ was originally developed by the Rand Corporation, ! 28: and initially was proprietary software. ! 29: The Department of Information and Computer Science at ! 30: University of California, Irvine, ! 31: shortly after joining the Computer Science Network (CSnet), ! 32: acquired a copy of \MH/, ! 33: and began additional development of the software. ! 34: Since that time, ! 35: the Rand Corporation has declared \MH/ to be in the public domain, ! 36: and the UCI version of \MH/ has passed through four major releases. ! 37: ! 38: Much credit must be given to the initial designers and implementors of \MH/: ! 39: Bruce Borden, Stockton Gaines, and Norman Shapiro. ! 40: Although \MH/ has suffered significant development at UCI ! 41: since Rand's initial release, ! 42: the fundamental concepts of \MH/'s environs have remained nearly unchanged. ! 43: In addition, ! 44: the current maintainers of \MH/ gratefully acknowledge the comments of the ! 45: many sites which have run various releases of \MH/ in the past. ! 46: ! 47: \MH/ runs on different versions of the \unix/ operating system ! 48: (such as 4.2\bsd/~\unix/ and various flavors of v7~\unix/). ! 49: In addition, ! 50: \MH/ supports four different \MTS/ interfaces: ! 51: \SendMail/\cite{EAllm83}, ! 52: the standard mailer for 4.2\bsd/ systems; ! 53: \MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84}, ! 54: the Multi-Channel Memo Distribution Facility developed by the University of ! 55: Delaware ! 56: which forms the software-backbone for CSnet\cite{DCome83} mail relays service; ! 57: SMTP, ! 58: the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP}; ! 59: and, ! 60: a stand-alone delivery system. ! 61: ! 62: The organization of this paper is straight-forward, ! 63: given space considerations. ! 64: Initially, ! 65: the \MH/ philosophy of mail handling is presented, ! 66: along with a description of the environment which the \MH/ user is given to ! 67: process mail. ! 68: Following this, ! 69: certain advanced features of \MH/ are discussed in more detail. ! 70: In particular, ! 71: the notion of a {\it draft folder} is introduced, ! 72: which permits the handling of multiple drafts during composition. ! 73: In addition, ! 74: message selection facilities are described. ! 75: Next, ! 76: two different aspects of \MH/'s power as a software system are discussed: ! 77: record handling, in which \MH/ facilitates record processing systems; ! 78: and, ! 79: how \MH/ can be employed in a distributed mail environment. ! 80: This latter section raises questions as to the location of the posting and ! 81: delivery slots, ! 82: along with authentication mechanisms. ! 83: Finally, ! 84: we conclude by discussing areas of future development which \MH/ may endure. ! 85: ! 86: Although familiarity with \MH/ is not assumed on the part of the reader, ! 87: some knowledge of the \unix/ operating system is useful. ! 88: Appendix~A gives a short synopsis of the \MH/ commands. ! 89: ! 90: \section{The \MH/ Philosophy} % mtr ! 91: Although \MH/ has many traits which tend to differ it from other user agents, ! 92: the design aspect which fundamentally influences the interface between \MH/ ! 93: and the user is that it is composed of many small ! 94: programs instead of one very large one. ! 95: This architecture gives \MH/ much of its strength, ! 96: since intermediate and advanced users are able to take advantage of this ! 97: flexibility. ! 98: ! 99: The key to this flexibility is that the \unix/ shell ! 100: (usually the {\it C} shell or the {\it Bourne} shell), ! 101: is the user's interface to \MH/. ! 102: This means that when handling mail, ! 103: the entire power of the shell is at the user's disposal in addition to the ! 104: facilities which \MH/ provides. ! 105: Hence, ! 106: the user may intersperse mail handling commands with other commands in an ! 107: arbitrary fashion, ! 108: making use of command handling capabilities that the user's shell provides. ! 109: ! 110: Furthermore, ! 111: rather than storing messages in a complicated data structure ! 112: within a monolithic file, ! 113: in \MH/, each message is a \unix/ file, ! 114: and each folder (an object which holds groups of messages) ! 115: is a \unix/ directory. ! 116: That is, ! 117: the directory and file structure of \unix/ is used directly. ! 118: As a result, ! 119: any \unix/ file-handling command can be applied to any message. ! 120: ! 121: To the novice, ! 122: this may not make much sense or may not seem important. ! 123: From three years of observation, we have seen that ! 124: as users of \MH/ have become more experienced ! 125: they have found this capability to be quite attractive. ! 126: In addition, ! 127: this approach is often quite pleasing to system implementors, ! 128: because it minimizes the amount of coding to be performed ! 129: and, ! 130: given a modular design, ! 131: changes to the software system can be maintained easily. ! 132: Our empirical findings confirm our theoretical expectations regarding the ! 133: \MH/ architecture. ! 134: ! 135: Having described how \MH/ fits into the \unix/ environment, ! 136: we now discuss the mail handling environment which is available to the \MH/ ! 137: user. ! 138: ! 139: \subsection{The \MH/ Environs} % jns ! 140: \MH/ provides a complementary environment to the user's shell. ! 141: While the shell maintains a context related to the user's focus in the file ! 142: system (a {\it current working directory\/}), ! 143: mail handling is performed in a separate mail folder context. ! 144: Operations on mail can therefore be ! 145: performed entirely without regard to the current file system context, ! 146: although \MH/ does not prevent the user from making use of that context. ! 147: Certain mail handling functions do make use of information ! 148: maintained by the shell. ! 149: For instance, by setting certain shell parameters, ! 150: called {\it environment variables}, ! 151: alternate mail handling contexts can be selected. ! 152: ! 153: \MH/ conventions often have direct analogs to shell or file system ! 154: conventions. ! 155: The shell has a current working directory; \MH/ has a current mail folder. ! 156: When the user begins a session on the system, ! 157: the user's ``home directory'' is the base context; ! 158: \MH/'s default base area, the \Mail/ directory, ! 159: is found under the user's home directory. ! 160: The user's default shell parameters are set upon beginning a new ! 161: session from a startup profile ! 162: (called \file{.profile} for \pgm{sh} users ! 163: or \file{.cshrc} for \pgm{csh} users); ! 164: the default parameters for \MH/ commands are taken from a file called ! 165: \profile/ in the user's home directory. ! 166: The shell has an {\it environment\/}; ! 167: \MH/ has a \context/ file. ! 168: Each of the user's directories has files; ! 169: each of the user's \MH/ folders has messages. ! 170: ! 171: These parallels have a basis not only in \MH/'s high level mail ! 172: handling model, ! 173: but also in the way low level shell and file ! 174: system conventions have been abstracted to implement \MH/ conventions. ! 175: Directories are folders; files are messages. ! 176: The \Mail/ directory forms the root of a virtual file subsystem within ! 177: which the user operates on mail without disturbing files outside this ! 178: mail handling domain. ! 179: ! 180: \tagfigure{1}{\MH/ File Subsystem\\(directories are shaded)}{MHfiles} ! 181: \tagdiagram{2}{Elaborated \MH/ Profile}{elab} ! 182: \subsection{The \MH/ Profile} ! 183: The \profile/ contains plaintext that describes the user's default mail ! 184: handling parameters. ! 185: An example of an elaborated profile is shown in Figure~\elab. ! 186: ! 187: Each line in the profile consists of an \MH/ parameter name terminated ! 188: with a colon (`:') followed by parameter values. ! 189: In this example, ! 190: ``global'' parameters are listed in the first few lines, ! 191: with program-specific parameters following. ! 192: Each \MH/ program examines global parameters as well as any parameter ! 193: with the same name by which the program was invoked. ! 194: For example, ! 195: the \pgm{comp} program, which is used to compose new messages to be sent, ! 196: examines the entries: ! 197: \medskip ! 198: {\advance\leftskip by2\parindent ! 199: \uitem{Path} ! 200: The path parameter specifies the name of the \MH/ root directory. ! 201: This is normally named \Mail/. ! 202: ! 203: \uitem{Editor} ! 204: The editor parameter specifies which text editor is first invoked to create ! 205: the header information and body of a message draft. ! 206: In most cases, this editor is the \MH/ default editor, \pgm{prompter}. ! 207: ! 208: \uitem{Draft-Folder} ! 209: This parameter specifies a folder within which new message drafts ! 210: are to be created. ! 211: The draft folder mechanism is an advanced feature of \MH/ that is ! 212: given separate treatment in a later segment of this paper. ! 213: ! 214: \uitem{comp} ! 215: The program-specific parameter examined by \pgm{comp} lists ! 216: user-default options. ! 217: \par} ! 218: \medskip ! 219: ! 220: \noindent ! 221: Other programs invoked by \pgm{comp} ! 222: (e.g. \pgm{prompter} and \pgm{send\/}) would examine their own profile ! 223: entries as well. ! 224: \MH/ programs have reasonable compiled-in defaults and also permit options to ! 225: be specified on the shell command line with which the programs are invoked. ! 226: The order of override precedence is: command line options first, ! 227: \profile/ options second, and compiled-in defaults last. ! 228: ! 229: Each program option is prefixed by a dash (`-') following the \unix/ ! 230: convention. ! 231: Unlike most \unix/-style options, ! 232: however, the options are words rather than single letters. ! 233: An option may be abbreviated to an unambiguous prefix. ! 234: Each \MH/ program has a \switch{help} option that ! 235: displays a brief summary of the program's available options. ! 236: ! 237: \subsection{Folders and Messages} ! 238: In a typical paper-oriented office, ! 239: new correspondence arrives and is stacked in an ``in box'', ! 240: while outgoing correspondence is placed in an ``out box''. ! 241: Processed material is stored in ! 242: appropriately labelled folders and filed away for future reference. ! 243: This state of affairs is modelled in \MH/ with {\it folders} ! 244: and {\it messages}, ! 245: which are simply text files (one message per file) stored ! 246: under the folder directories. ! 247: Most of the user's folders are kept under the \Mail/ directory. ! 248: ! 249: A folder is given an alphanumeric name permissible within the \unix/ file ! 250: system structure, ! 251: and each message stored therein is given a numeric name in the range 1..1999. ! 252: The upper bound on message numbers was ! 253: selected for efficient access to an internal representation, ! 254: an array of bits (a ``bit set''), ! 255: with each bit indicating the presence or ! 256: absence of a message with a number in the range 1..1999. ! 257: This internal representation also restricts the order of multiple ! 258: message reference to an ascending numerical sequence. ! 259: Other representations have been studied ! 260: (e.g., an unsorted sparse array of integers), ! 261: but have been rejected for reasons of efficiency. ! 262: Folders may contain subfolders, ! 263: corresponding to \unix/ tree-structured directories. ! 264: For the sake of completeness, ! 265: it might be said that ``sub-messages'' exist insofar as message ``digests'', ! 266: which nest messages inside other messages, ! 267: are supported by certain advanced \MH/ functions. ! 268: ! 269: The current working folder is the default folder selected for almost ! 270: all \MH/ commands. ! 271: To select explicitly a folder for mail handling ! 272: commands entails specifying the name of the folder, prefixing the name ! 273: with a plus-symbol (`+'). ! 274: An example is: \example refile\ 1\ 2\ 3\ +chron/yr.1984\endexample ! 275: This command re-files the selected messages ! 276: (\file{1}, \file{2}, and \file{3} here) ! 277: from the current working folder to a subfolder under the ! 278: folder \file{chron} named \file{yr.1984}. ! 279: To see the folder/subfolder relationship, refer to Figure~\MHfiles. ! 280: ! 281: The plus-symbol notation is specific to those folders immediately ! 282: subordinate to the \Mail/ directory. ! 283: This is analogous to ``absolute pathnames'' in \unix/---those ! 284: files whose positions in the file system ! 285: hierarchy are given starting with the system root, ! 286: names prefixed with the slash character (`/'). ! 287: To specify folders subordinate to the current working folder, ! 288: an at-sign (`@') is substituted for (`+'). ! 289: It is permitted to use \unix/ dot notation to specify parent folders. ! 290: Referring to Figure~\MHfiles, ! 291: if the current working folder were \eg{+chron/yr.1985}, ! 292: then the command \example folder\ @../yr.1984\endexample ! 293: \noindent ! 294: selects the subfolder \file{yr.1984} in the parent directory ! 295: \file{chron}, as the new current working folder. ! 296: While the current working folder is normally the default, it may be ! 297: specified explicitly as \eg{@.}. ! 298: ! 299: \subsection{The Context File} ! 300: The \profile/ contains static information about the user's ! 301: preferences. ! 302: A \context/ file, contained in the \Mail/ directory, ! 303: contains the current mail handling environment information, ! 304: which changes as different folders, messages, and named message lists ! 305: (called {\it message sequences\/}) are selected, created, and updated. ! 306: This information is retained between invocations of \MH/ commands, ! 307: and is preserved across system sessions. ! 308: ! 309: \tagdiagram{3}{Elaborated Reply Template}{replcomps} ! 310: \subsection{Templates} ! 311: The message draft composition functions ! 312: (\pgm{comp}, \pgm{repl}, \pgm{forw}, and \pgm{dist\/}) ! 313: use certain default header formats, ! 314: which may be changed by the user through the use of message templates. ! 315: The exact format of a template may vary among commands. ! 316: An example of an elaborated template for the reply command \pgm{repl} is ! 317: shown in Figure~\replcomps. ! 318: ! 319: This template specifies how the automatically-generated header for a ! 320: draft message in reply to a source message is to be formatted. ! 321: The syntax is capable of directing output of header lines based on the ! 322: presence or absence of other header lines in the source message. ! 323: ! 324: Other kinds of templates are used to specify the display formats of ! 325: messages, or to specify the way that messages are to be included in ! 326: other messages. This is similar to the functionality provided by BBN ! 327: Hermes\cite{HERMES}, ! 328: another powerful mail handling system for \tops20/ based systems. ! 329: ! 330: \subsection{Explaining All This to New Users} ! 331: There do exist people who do not like \MH/.% ! 332: \nfootnote{At UCI, these ! 333: people are reported to be weeded out at an early stage and quietly taken to the ! 334: Ministry of Love to be made {\it uncrimethinkful}.} ! 335: The emerging pattern of complaints from such people indicates that \MH/ ! 336: accentuates their perceptions of the deficiencies of \unix/, ! 337: to wit, lack of interactivity and lack of easily found help facilities. ! 338: Also, ! 339: some feel that the proximity of the mail handling environment to the ! 340: operating system is a distraction, rather than an asset. ! 341: There have been some attempts to make \MH/ more accessible to users who prefer ! 342: menu-oriented or monolithic mail system interfaces.% ! 343: \nfootnote{For example, ! 344: \pgm{mhe} from Brian Reid of Stanford University ! 345: and \pgm{emh} from Marshall Rose ! 346: are instances of macro packages for James Gosling's \EMACS/ extensible editor, ! 347: while the \pgm{hm} program from Jim Guyton of the Rand Corporation is a ! 348: monolithic \MH/ interface. ! 349: As of this writing, ! 350: none of these programs is documented in the literature.} ! 351: ! 352: In truth, ! 353: users new to \unix/ do not always acclimate to \MH/ easily. ! 354: The command set is undistinguishably mixed in with all other \unix/ ! 355: utilities, and it is not easy, without aid of a manual, ! 356: to pick out the necessary commands. ! 357: \MH/ does not provide any ``hand-holding'' to guide ! 358: the user through a minimally useful command subset. ! 359: ! 360: Another problem is that the initial default user profile is too often sparse, ! 361: containing only a \eg{Path:} parameter. ! 362: \MH/ commands will perform adequately without specific information ! 363: in the profile, ! 364: so new users often neglect optionally useful \MH/ capabilities, ! 365: eventually becoming frustrated with the limited default capabilities, ! 366: yet unable to determine without researching through the user's manual, ! 367: the necessary options that would solve their problems. ! 368: ! 369: The currently available means for learning how to use \MH/ are: ! 370: \medskip ! 371: {\advance\leftskip by 2\parindent ! 372: \item{$\bullet$} ! 373: One-on-one tutoring by knowledgeable \MH/ users, ! 374: which has so far shown the best results with new users. ! 375: ! 376: \item{$\bullet$} ! 377: Consulting the {\it \MH/ Tutorial\/}\cite{MRose84b}, ! 378: or the {\it \MH/ User's Manual\/}\cite{MRose85a}. ! 379: ! 380: \item{$\bullet$} ! 381: Using the \pgm{msh} (``\MH/ shell'') program as a training shell to read ! 382: bulletin boards. ! 383: The \pgm{msh} command is an interactive program that provides some help ! 384: messages and can list available \MH/ commands. ! 385: \par} ! 386: \medskip ! 387: ! 388: \noindent ! 389: No on-line tutorial materials are presently distributed with the \mh5 ! 390: system, although there are some plans in the works to provide a program ! 391: to help with setting up the user profile that would also provide ! 392: operational tips for \MH/ and \unix/. ! 393: ! 394: It should be noted that these perceived defects of \MH/ do not affect its ! 395: utility any more than analogous problems with any operating system ! 396: will diminish its actual capabilities. ! 397: Users may quarrel with the means chosen for orchestrating \MH/, ! 398: but the fact remains that \MH/ is a very ! 399: useful set of mail handling tools that is flexible, ! 400: infinitely interoperable with other \unix/ text handling tools, ! 401: and yet simple enough for new users to grasp once they are given the ! 402: proper start. ! 403: The fact that better tutorial materials and training do not exist only means ! 404: that some further work needs to be done in the area of user-education. ! 405: ! 406: \section{A Few Advanced Features} % mtr ! 407: We now consider certain advanced features in \MH/. ! 408: These features have been chosen to demonstrate some useful capabilities ! 409: available to the \MH/ user. ! 410: It should be noted that many capabilities of \MH/, ! 411: such as shell scripts for extensibility, ! 412: mail delivery hooks, ! 413: the personal aliasing facility, ! 414: and so forth, ! 415: are not described here for lack of space. ! 416: ! 417: \subsection{Draft Folders} % jns ! 418: The {\it draft folder} facility provides a method by which several ! 419: message drafts can be simultaneously composed and maintained until ! 420: sent. ! 421: The rationale for this is that partially composed message drafts, ! 422: perhaps elaborate sets of separate messages, ! 423: can be incrementally completed, ! 424: while a folder provides a consistent organization for drafts in progress. ! 425: This is comparable to similar situations in the ``paper world'' where ! 426: contracts, business correspondence, and other communications, ! 427: rather than being created serially with each posted in turn before composing ! 428: the next, ! 429: are usually left in various stages of ! 430: completion before they are eventually mailed. ! 431: ! 432: The \eg{Draft-Folder:} parameter value in the \MH/ profile is used to ! 433: specify a default draft folder, ! 434: where each draft is given a number and an ``artificial'' date stamp. ! 435: Provided that the proper header fields have been completed, ! 436: a \pgm{scan} listing of the draft folder provides a summary of ! 437: each draft in progress: ! 438: to whom the message is to be sent, ! 439: the subject, ! 440: the date of the draft's initial creation and optionally, ! 441: the current size of the draft in terms of characters. ! 442: Experienced users of \MH/ may often keep as many as five to ten unfinished ! 443: drafts in their draft folder. ! 444: ``Draft clutter'' can be remedied easily with the \pgm{rmm} command. ! 445: ! 446: \subsection{Message Selection} % stef ! 447: \MH/ commands accept {\it message sequence} specifications to specify which ! 448: \arg{msg} or \arg{msgs} are to be operated upon. ! 449: Here are some examples: ! 450: \example scan\ 1\ 3\ 5\ 19\ 185\endexample ! 451: to get a scan listing of messages 1, 3, 5, 19 and 185. ! 452: \example scan\ pseq\endexample ! 453: to get a scan listing of whatever message sequence was given to the previous ! 454: MH command (in this case 1, 3, 5, 19, and 185). ! 455: \example show\ first\ last\endexample ! 456: to get a display of the first and last messages in the folder. ! 457: The \MH/ sequences named \eg{first} and \eg{last} are system defined pseudo ! 458: sequences which act like explicit sequences when given to MH commands. ! 459: Others are \eg{cur}, \eg{next}, \eg{prev}, ! 460: and \eg{all} which respectively specify the ``current'' message, ! 461: the ``next'' after cur, ! 462: the ``previous'' message before cur, ! 463: or ``all'' messages in the current-folder. ! 464: The \pgm{scan} assumes \eg{all} while show assumes \eg{cur}, ! 465: unless overridden on the command line. ! 466: Over-ride precedence is: command-line first, ! 467: \profile/ second, ! 468: and compiled-in default last. ! 469: ! 470: Users can define additional sequences for similar use, ! 471: but must avoid using reserved names. ! 472: A few optional sequence names have been preempted by \MH/, ! 473: such as \eg{pseq} to mean the ! 474: ``sequence used by the previous MH command,'' ! 475: and \eg{unseen} to mean the ``messages not yet seen by the user.'' ! 476: Sometimes these preempted names can be changed by resetting them in the ! 477: user's \MH/ profile, ! 478: but these facilities are beyond the scope of this discussion. ! 479: ! 480: The mark command can be used to set the values for user-defined sequences: ! 481: \example mark\ 1\ 3\ 5\ -seq\ zzz\\ ! 482: mark\ 4\ 5\ 9\ -seq\ zzz\ -nozero\endexample ! 483: will create a user-sequence named \eg{zzz} and put the sequence \eg{1 3 5} ! 484: in it. ! 485: The \pgm{mark} command assumes that any prior content in an ! 486: existing user-sequence should be ``zeroed'' before the new sequence value is ! 487: recorded. ! 488: This can be prevented with a \switch{nozero} switch on the command line, ! 489: to add \eg{4 5 9} to the original \eg{1 3 5} to yield \eg{1 3 4 5 9}. ! 490: \example mark\ pseq\ zzz\ -seq\ zzznew\endexample ! 491: will create a new sequence named \eg{zzznew} and set its value to the combined ! 492: (inclusive or) of the existing user-sequences in \eg{pseq} and \eg{zzz} for ! 493: its value. ! 494: ! 495: Another more powerful way to set the values of a user-sequence is with ! 496: the pick command, which provides full string search capabilities: ! 497: \example pick\ -from\ mrose\ -seq\ yyy\\ ! 498: pick\ -from\ mrose\ -seq\ yyy\ -list\endexample ! 499: will search though all the \eg{From:} fields in the current folder for the ! 500: string \eg{mrose} and place the list of ``hits'' ! 501: in the sequence named \eg{yyy}. ! 502: The \switch{list} switch will cause the resulting list to also be displayed on ! 503: the user's terminal. ! 504: If no \switch{seq\ name} switch is given, ! 505: pick will assume \switch{list} ! 506: and will simply display the resulting list of hits on the user's terminal. ! 507: ! 508: This \switch{list} behavior of pick allows users to take advantage of the ! 509: \unix/ backquoting facility to embed searches in other \MH/ commands. ! 510: \example scan\ \bq{pick\ -from\ mrose}\endexample ! 511: will produce a scan listing of \switch{from\ mrose} hits because the ! 512: \unix/ shell will spawn a process to execute the ! 513: \eg{pick\ -from\ mrose} segment and return the \switch{list} ! 514: results as the message sequence to be scanned. ! 515: \example mark\ pseq\ -seq\ zzz\endexample ! 516: could then be used to capture the ``previous sequence'' in zzz for later use. ! 517: ! 518: One last facility should be mentioned here. ! 519: It is also possible to negate a sequence to specify a new sequence. ! 520: The default negation string is \eg{not}. ! 521: \example scan\ notzzz\\ ! 522: mark\ notzzz\ -seq\ zzznot\endexample ! 523: will give the user a scan listing of all the messages in the current folder ! 524: that are not included in the sequence \eg{zzz}. ! 525: The mark example will of course record the negation of zzz in zzznot. ! 526: It is a bad idea to use the string \eg{not} as the beginning of any ! 527: user-sequence name, ! 528: if \eg{not} is defined as the negation string. ! 529: (Users can choose a different negation string.) ! 530: ! 531: From this discussion, ! 532: it should be clear that \MH/ provides a uniform set of ways to capture ! 533: and use sequences to augment the user's short- and long-term ! 534: memory and to manipulate lists of interesting messages. ! 535: User-sequences are normally stored as RFC822 labeled text lines in a file ! 536: (e.g., \sequences/) ! 537: in the folder with the messages referred to in the sequence. ! 538: If a user does not have write access to a folder, ! 539: then the \MH/ \pgm{mark} and \pgm{pick} commands will ! 540: create a ``private'' sequence in the user's \context/ file. ! 541: Switches are available to give the user control over ! 542: the choice of \switch{private} or \switch{public} sequence options. ! 543: ! 544: Since user-sequences are stored as ordinary text lines in RFC822 labeled ! 545: fields, ! 546: there is no prohibition against someone writing programs to perform ! 547: any kind of useful manipulation on \MH/ sequences. ! 548: Boolean operators can be implemented, ! 549: or complex indexing structures could be developed to serve special purposes. ! 550: If a DBMS can utilize \unix/ pathnames or \MH/ \arg{+folder} and ! 551: message names, ! 552: then the full power of the DBMS might be applied. ! 553: The intention of \MH/ development teams has always been to leave open the ! 554: widest possible array of options for later extension. ! 555: The only restrictions should be the user's ingenuity, ! 556: programming prowess, and the available machine resources. ! 557: Unfortunately these resources always seem to be available in ! 558: limited quantities. ! 559: ! 560: \subsection{Distribution Lists} % mtr ! 561: \MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.% ! 562: \nfootnote{The UCI BBoards facility can run under either the \MMDF/ or ! 563: \SendMail/, ! 564: or in a more restricted form under stand-alone \MH/.} ! 565: This facility permits the efficient distribution of interest group messages ! 566: on a single host, ! 567: to a group of hosts under a single administration, ! 568: and to the ARPA Internet community. ! 569: ! 570: Described simply, an interest group is composed of a number of subscribers ! 571: with a common interest. ! 572: These subscribers post mail to a single address, known as a ! 573: {\it distribution} address (e.g., {\tx MH-Workers@UCI}). ! 574: From this distribution address, a copy of the message is sent to each ! 575: subscriber. ! 576: Each group has a {\it moderator}, ! 577: which is the person that runs the group. ! 578: This moderator can usually be reached at a special address, ! 579: known as a {\it request} address (e.g., {\tx MH-Workers-Request@UCI}). ! 580: Usually, the responsibilities of the moderator are quite simple, ! 581: since the mail system handles distribution to subscribers automatically. ! 582: In some interest groups, ! 583: instead of each separate message being distributed directly to subscribers, ! 584: a batch of (related) messages are put into a {\it digest} format by the ! 585: moderator and then sent to the subscribers. ! 586: Although this requires more work on the part of the moderator ! 587: and introduces delays, ! 588: such groups tend to be better organized. ! 589: ! 590: Unfortunately, some problems arise with the scheme outlined above. ! 591: First, if two users on the same host subscribe to the same interest group, ! 592: two copies of the message will be delivered. ! 593: This is wasteful of both processor and disk resources at that host. ! 594: ! 595: Second, ! 596: some groups carry a lot of traffic. ! 597: Although subscription to a group does indicate interest on the part of a ! 598: subscriber, ! 599: it is usually not interesting to get 50 messages or so delivered to ! 600: the user's private maildrop each day, ! 601: interspersed with {\it personal} mail, ! 602: that is likely to be of a much more important and timely nature. ! 603: ! 604: Third, if a subscriber's address in a distribution list ! 605: becomes ``bad'' somehow and causes failed mail to be returned, ! 606: the originator of the message is normally notified. ! 607: It is not uncommon for a large list to have several bogus addresses. ! 608: This results in the originator being flooded with ``error messages'' from ! 609: mailers across the Internet stating that a given address on the list was ! 610: bad. ! 611: Needless to say, ! 612: the originator usually does not care if the bogus addresses got a copy ! 613: of the message or not. ! 614: The originator is merely interested in posting a message ! 615: to the group at large. ! 616: On the other hand, ! 617: the moderator of the group does care if there are bogus addresses on the list, ! 618: but ironically does not receive notification. ! 619: ! 620: To solve all of these problems, ! 621: the UCI BBoards facility introduces a new entity into the picture: ! 622: all interest group mail is handled by a special component of the mail system. ! 623: The distribution address maps to a special {\it channel} that performs ! 624: several actions. ! 625: First, if local delivery is to be performed, ! 626: then a copy of the message is placed in a global maildrop for the interest ! 627: group with a timestamp and a unique number. ! 628: Local users can read messages posted for the interest group by reading this ! 629: ``public'' maildrop. ! 630: Second, if further distribution is to take place, ! 631: a copy of the message is sent to the distribution address in such a way that ! 632: if any of the addresses are bogus, ! 633: failure notices will be returned to the local maintainer of the group ! 634: address list, rather than the originator of the message. ! 635: ! 636: This scheme has several advantages: ! 637: First, messages delivered to the local host are processed and saved once ! 638: in a globally accessible area. ! 639: The UCI BBoards facility supports software which allows a user to query an ! 640: interest group for new messages and to read and process ! 641: those messages in the \MH/-style. ! 642: Second, once a host administrator subscribes to an interest group, ! 643: each user can join or quit the list's readership without ! 644: contacting anyone. ! 645: Third, a hierarchical distribution scheme can be constructed to ! 646: reduce the amount of delivery effort. ! 647: Fourth, errors are prevented from propagating. ! 648: When an address on the distribution list goes bad, ! 649: the list moderator who is immediately responsible for the address is notified. ! 650: If a local moderator does not exist, ! 651: then the local PostMaster is notified (not the global group moderator). ! 652: ! 653: In addition to solving the problems outlined above, ! 654: the UCI BBoards facility supports several other capabilities. ! 655: BBoards may be automatically archived in order to conserve disk space and ! 656: reduce processing time when reading current items. ! 657: Also, ! 658: the archives can be separately maintained on tape for access by interested ! 659: researchers. ! 660: ! 661: Special alias files may be generated which allow the \MH/ user to shorten ! 662: address type-in. ! 663: For example, instead of sending to {\tx SF-Lovers@Rutgers}, ! 664: a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing ! 665: facility automatically makes the appropriate expansion in the headers of the ! 666: outgoing message. ! 667: Hence, ! 668: the user need only know the name of an interest group and not its global ! 669: network address. ! 670: ! 671: Finally, the UCI BBoards facility supports {\it private} interest groups ! 672: using the \unix/ group access mechanism. ! 673: This allows a group of people on the same or different machines to conduct a ! 674: private discussion. ! 675: ! 676: The practical upshot of all this is that the UCI BBoards facility automates ! 677: the vast majority of BBoards handling from the point of view of both the ! 678: PostMaster and the user. ! 679: ! 680: \MH/ provides three programs to deal with interest groups. ! 681: The \pgm{bbc} program is used to check on the status of one or more groups, ! 682: and to optionally start an \MH/ shell on those groups which the user is ! 683: interested in. ! 684: The \pgm{bbl} program can be used to perform manual maintenance on a ! 685: discussion group beyond the normal automatic capabilities of the UCI BBoards ! 686: facility. ! 687: Finally, ! 688: the \pgm{msh} program implements an \MH/ shell for reading BBoards, ! 689: in which nearly all of the \MH/ commands are implemented in a single program. ! 690: ! 691: Observant readers may note that the use of \pgm{msh} is contrary to the \MH/ ! 692: philosophy of using relatively small, single-purposed programs. ! 693: Sadly, ! 694: the authors admit that this is true. ! 695: In an effort to avoid some problems with shared-access and message naming ! 696: conventions (which are beyond the scope of this paper), ! 697: BBoards are kept in maildrop format (monolithic) instead of folders. ! 698: Some research has gone into overcoming this problem in order to restore ! 699: \MH/'s purity of purpose, ! 700: but all solutions proposed to date are either unworkable or require ! 701: significant recoding of \MH/'s internals. ! 702: ! 703: \subsection{Encapsulation} % mtr ! 704: As described above, ! 705: some interest groups appear in digest form. ! 706: This means that the messages which appear in such a forum actually ! 707: encapsulate other messages in their body. ! 708: It turns out that the generation of a digest is not at all unlike the ! 709: generation of a draft which forwards one or more messages. ! 710: In RFC934\cite{MRose85b}, ! 711: a method is proposed to standardize message encapsulation for the ARPA ! 712: Internet community. ! 713: \MH/ uses this method for the generation of digests, ! 714: forwardings, ! 715: and blind-carbon-copies. ! 716: ! 717: A key requisite for using an encapsulation technique for digests and ! 718: forwardings is the ability to later decapsulate the contents. ! 719: Without this ability, ! 720: the forwarded messages are of little use to the recipients because they can ! 721: not be distributed, forwarded, replied-to, searched-for, ! 722: or otherwise processed as separate individual messages. ! 723: In the case of a digest, ! 724: a bursting capability is especially useful. ! 725: Not only does the ability to burst a digest permit a recipient of the digest ! 726: to reply to an individual digestified message, ! 727: but it also allows the recipient to selectively process the other messages ! 728: encapsulated in the digest. ! 729: ! 730: For example, ! 731: a single digest issue usually contains more than one topic. ! 732: A subscriber may only be interested in a subset of the topic discussed in a ! 733: particular issue. ! 734: With a bursting capability, ! 735: the subscriber can burst the digest, ! 736: scan the headers, ! 737: and process those messages which are of interest. ! 738: The others can be ignored, ! 739: if the user so desires. ! 740: ! 741: Note that with proper encapsulation technology, ! 742: one can argue for the re-distribution of messages simply becoming ! 743: special cases of message forwarding. ! 744: For example, ! 745: the NBS Standard for Mail Interchange\cite{FIPS98} ! 746: and the recent CCITT draft on Mail Handling Systems standards\cite{X.400} ! 747: both discourage the re-distribution facility in favor of forwarding ! 748: by encapsulation. ! 749: ! 750: \subsection{Encapsulation and Blind-Carbon-Copies} % mtr ! 751: Many user agents support a blind-carbon-copy facility. ! 752: \MH/ implements this using a form of encapsulation. ! 753: It may not be apparent to the reader as to why encapsulation of the original ! 754: message is a good way to deliver blind-carbon-copies. ! 755: With a blind-carbon-copy facility, ! 756: two types of addressees are possible in the draft to be sent: ! 757: {\it visible} and {\it blind}. ! 758: The visible recipients are listed as addresses in the \eg{To:} and \eg{cc:} ! 759: fields, ! 760: and the blind recipients are listed in the \eg{Bcc:} fields of the draft. ! 761: The idea behind this facility is that copies of the draft which are ! 762: delivered to the \eg{To:} and \eg{cc:} recipients should show the visible ! 763: recipients only. ! 764: ! 765: A major concern with a blind-carbon-copy facility ! 766: is that blind recipients should be prevented from accidentally replying to the ! 767: message in such a way that the visible recipients are included as addressees ! 768: in the reply. ! 769: ! 770: There are several methods to implement this facility. ! 771: Most rely on posting two drafts with the \MTS/. ! 772: One draft is destined for visible recipients, ! 773: and simply lacks the \eg{Bcc:} fields of the original draft. ! 774: The second draft is destined for the blind recipients. ! 775: The question then arises as to what form this latter draft posted should take. ! 776: ! 777: One approach might be to disable the \eg{To:} and \eg{cc:} fields of the ! 778: draft sent to the blind recipients ! 779: (e.g., by prefixing the string \eg{BCC-} to these fields). ! 780: Unfortunately, ! 781: this is often very confusing to the blind recipients ! 782: because it differs from what the visible recipients got. ! 783: Although accidental replies are not possible, ! 784: it is often difficult to tell that the message received is the result of a ! 785: blind-carbon-copy. ! 786: ! 787: The method used by \MH/ is to post two drafts, ! 788: a visible draft for the visible recipients, ! 789: and a blind draft for the blind recipients. ! 790: The visible draft consists of the original draft without any \eg{Bcc:} fields. ! 791: The blind draft contains the visible message as a forwarded message. ! 792: The headers for the blind draft contain the minimal RFC822 headers ! 793: (\eg{From:} and \eg{Date:}) ! 794: and, ! 795: if the original draft had a ``Subject:'' field, ! 796: then this header field is also included. ! 797: In addition, ! 798: \MH/ alerts the recipient that the message is a blind-carbon-copy by ! 799: placing this information in the initial encapsulation information in the ! 800: blind recipient's copy. ! 801: This scheme prevents inadvertent replies while allowing the recipient ! 802: full access to an exact copy of what was sent to the visible recipients. ! 803: ! 804: \section{\MH/ as a Record Handler} % stef ! 805: Although message format standards such as RFC822 ! 806: (and its predecessors) were originally devised to facilitate ! 807: computer processing of interpersonal messages, ! 808: there is no special reason why the concept should be ! 809: limited to interpersonal message processing. ! 810: Messages are just one of a variety of useful record forms that might ! 811: be created in one place and transfered to another for processing. ! 812: In this regard, ! 813: RFC822 wisely left open the option for higher level applications to use ! 814: arbitrary header names or field contents by proscribing \MTS/ use ! 815: of header names beginning with \eg{X-}. ! 816: ! 817: \MH/ carries though on this idea by allowing the \pgm{pick} command ! 818: to accept any arbitrary field name for string searches, ! 819: so MH users can select on any arbitrary field name without prior definition. ! 820: Beyond this, ! 821: since all messages are simply files in \unix/ directories, ! 822: applications can be developed to apply any programmable process to ! 823: any selected message. ! 824: ! 825: For example, ! 826: a {\it Time Card Form} might be called up by an \MH/ user with ! 827: \example comp\ -form\ timecomps\endexample ! 828: to enter time and attendance information into \eg{X-time$\tdots$:} fields in a ! 829: draft message record. ! 830: The \file{timecomps} form would include the address of a ! 831: supervisor who should validate the information, ! 832: along with empty fields to be filled in with data. ! 833: In fancy applications, ! 834: this might be done with a sophisticated interactive data entry tool ! 835: which would validate entered information, ! 836: but this is an open choice within the \MH/ framework. ! 837: Another ! 838: alternative would be to use a received message as the blank form to add a ! 839: degree of central control over time and attendance reporting forms. ! 840: ! 841: Receiving supervisors could simply register approval by using the \MH/ ! 842: \pgm{dist} command to resend subordinates' time cards to higher approval ! 843: levels, or ! 844: to send them to a time card collection address. ! 845: The \MH/ \pgm{dist} command automatically inserts ``ReSent'' header fields ! 846: showing who resent it and the resending date. ! 847: Alternatively, ! 848: the MH \pgm{forw} command could be used to transfer a batch of approved time ! 849: cards to the next processing station. ! 850: If desired, a new ``approval'' command could be programmed to provide a more ! 851: trusted authentication, perhaps with encryption of the content. ! 852: Trusted mail systems, such as \trustedmail/\cite{MRose85c}, ! 853: are becoming available for this purpose. ! 854: ! 855: At the final collection destination, ! 856: an automated User Agent could be programmed to directly load the data into ! 857: the Time and Attendance DBMS by ! 858: parsing and decoding the data contained in the \eg{X-time$\tdots$:} fields. ! 859: It might be noted that while the RFC822 does not restrict the ! 860: internal forms of messages, ! 861: it is necessary to conform to the interchange standard if specialized filters ! 862: for message headers are not to be built to serve as {\it export laundries} ! 863: (a term originating with Stephen H.~Willson to describe conformance ! 864: transformations in \Ada/). ! 865: ! 866: \subsection{Mapping Between Record Modes (DBMS/MHS)} ! 867: This time and attendance example suggests that it is possible to define ! 868: one-to-one mappings between RFC822 fields and DBMS data elements. ! 869: For every DBMS data element definition, ! 870: there is a potential corresponding RFC822 transferable equivalent ! 871: definition which can facilitate mail transfers of record information. ! 872: Indeed, ! 873: a large portion of the definitional work is already done where a Data Base ! 874: has already been defined. ! 875: All that remains is to define the RFC822 equivalents. ! 876: ! 877: The suggestion that a batch of time cards be forwarded inside a ``cover'' ! 878: message implies that it is possible in the \MH/ framework to recursively ! 879: bundle messages within messages, and be able to recover the originals for ! 880: separate processing at a receiving destination. ! 881: The \MH/ \pgm{burst} command can be applied recursively for this purpose ! 882: because \MH/ encapsulation uses an unambiguous scheme to delimit messages ! 883: that are enclosed inside other messages. ! 884: Thus, ! 885: it should be possible to extract a structured set of records from a DBMS ! 886: and mail the set to a foreign site for processing, or reinsertion into ! 887: another DBMS. ! 888: As long as the DBMS data element definitions ! 889: correctly correspond to the RFC822 definitions, ! 890: it is not even necessary ! 891: for the source and destination DBMS systems to be the same. ! 892: ! 893: From this discussion, ! 894: it is concluded that the \MH/ framework can be useful ! 895: for building distributed record handling systems where people at widely ! 896: scattered locations must create and submit record forms for processing ! 897: at distant locations. ! 898: This might prove to be especially effective when ! 899: a mail system is also needed for other communication purposes. ! 900: A network of sales offices is a good example, ! 901: where general message service would be used for communications ! 902: with remote manufacturing and distribution centers, ! 903: and could also be used for an order entry system. ! 904: ! 905: Another example might be for structured communications, as occur in ! 906: requisition and purchasing systems. ! 907: Requisitions could be filled in and mailed to approval offices, ! 908: and resent or forwarded to others for action. ! 909: At some point, ! 910: the requisitions could flow into other other more suitable ! 911: processing systems as needed. ! 912: At the very least, the ability to originate ! 913: requisitions can be distributed to anyone with access to a mail system ! 914: that can originate a proper requisition form. ! 915: ! 916: As a last example, ! 917: \MH/ already supports group discussions with its BBoard facilities ! 918: which allow for automatic sorting of mail by group address, ! 919: with shared private or public group access to contributed items. ! 920: As has been shown to be possible with administrative record systems, ! 921: there is no obvious limit to the ways that group discussion traffic ! 922: might be organized into structured collections with indices, ! 923: annotations, or reference pointers ! 924: to aid in making conference archives more useful. ! 925: Indeed, \MH/ tools could even be used to feed discussion items into ! 926: existing conference systems. ! 927: ! 928: \section{Distributed Mail} % mtr ! 929: Next, we consider how \MH/ might be used in a distributed mail environment. ! 930: Two schemes are discussed: ! 931: one in which connectivity is high and connections are relatively ``cheap'', ! 932: and one in which connectivity is low and connections are ``expensive''. ! 933: ! 934: \subsection{The ARPA Internet Environs} % mtr ! 935: The ARPA Internet community consists of many types of heterogeneous nodes. ! 936: Some hosts are large mainframe computers, ! 937: others are personal workstations. ! 938: All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}. ! 939: Messages which conform to the Standard for the Format of ARPA Internet Text ! 940: Messages\cite{DCroc82} ! 941: are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}. ! 942: ! 943: On smaller nodes in the ARPA Internet it is often impractical to maintain ! 944: a message transport agent. ! 945: For example, ! 946: a workstation may not have sufficient resources (cycles, disk space) ! 947: in order to permit an SMTP server and associated local mail delivery system ! 948: to be kept resident and continuously running. ! 949: Furthermore, ! 950: the workstation could be off-net for extended periods of time. ! 951: Similarly, ! 952: it may be expensive (or impossible) to keep a personal computer ! 953: interconnected to an IP-style network for long periods of time. ! 954: In other words, ! 955: the node is lacking the resource known as ``connectivity''. ! 956: ! 957: Despite this, ! 958: it is often desirable to be able to process mail with \MH/ on these smaller ! 959: nodes, ! 960: and they often support a user agent to aid the tasks of mail handling. ! 961: To solve this problem, ! 962: a network node which can support a message transport entity ! 963: (known as {\it service} host) offers ! 964: a maildrop service to these less endowed nodes ! 965: (known as {\it client} hosts). ! 966: The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a ! 967: workstation to dynamically access a maildrop on a service host to pick-up ! 968: mail.% ! 969: \nfootnote{Actually, ! 970: there are three different descriptions of the POP. ! 971: The first, cited in \cite{JReyn84}, ! 972: was the original description of the protocol, ! 973: which suffered from certain problems. ! 974: Since then, ! 975: two alternate descriptions have been developed. ! 976: The official revision of the POP\cite{MButl85}, ! 977: and the revision of the POP which \MH/ uses ! 978: (which is documented in an internal memorandum in the \MH/ release). ! 979: This paper considers the POP in the context of the \MH/ release.} ! 980: The level of access includes the ability to ! 981: determine the number of messages in the maildrop and the size of each message, ! 982: as well as to retrieve and delete individual messages. ! 983: More sophisticated implementations of the POP server ! 984: are able to distinguish between the header and body portion of each message, ! 985: and send $n$ lines of a message to the POP client. ! 986: This capability is useful in thinly connected environments where conservation ! 987: of bandwidth is important. ! 988: By utilizing a more intelligent POP client, ! 989: a user may generate ``scan~listings'' and dynamically decide which messages ! 990: are worth taking delivery on. ! 991: The philosophy of the POP is to put intelligence in the ! 992: POP clients and not the POP servers. ! 993: ! 994: The underlying paradigm in which the POP functions is that of a ! 995: split-slot/remote-\UA/ model. ! 996: The client host (such as a workstation) is without a co-resident ! 997: {\it message transport agent} (\MTA/), ! 998: and thus makes use of a service host with an \MTA/ to obtain posting (SMTP) ! 999: and delivery (POP) services. ! 1000: The entity which supports this type of environment is called a remote-\UA/ ! 1001: since the user agent resides on a different host than its associated message ! 1002: transport agent. ! 1003: ! 1004: One very important issue which must be raised at this point is one of ! 1005: authentication. ! 1006: The POP requires that a client identify itself to the server using a ! 1007: server-specific user-id and a server/user-specific password. ! 1008: This authentication is required to prevent unauthorized entities from ! 1009: accessing a maildrop on a POP service host. ! 1010: It must be emphasized that the POP client is not a ``trusted'' entity of the ! 1011: \MTS/ in any sense at all. ! 1012: ! 1013: Ideally, ! 1014: one would also like to authenticate mail as it is posted on the POP service ! 1015: host using the SMTP. ! 1016: Currently, ! 1017: in the ARPA Internet community, ! 1018: no authentication is done with SMTP transactions. ! 1019: This is considered a shortcoming by those interested in researching the ! 1020: split-\UA/ model of distributed mail. ! 1021: The MZnet environment, ! 1022: discussed in the next section, ! 1023: has authentication facilities for posting mail. ! 1024: ! 1025: The current release of \MH/ supports the above model fully: ! 1026: a POP client program is available to retrieve a maildrop on a POP service ! 1027: host. ! 1028: In addition, ! 1029: using the SMTP configuration for delivery in \MH/, ! 1030: a user is able to specify a search-list of service hosts (and networks) ! 1031: with which to try to post mail. ! 1032: Using this search-list, ! 1033: when an \MH/ user posts a draft, ! 1034: the \pgm{post} program will attempt to establish an SMTP connection ! 1035: with each host in the list to post the message until it succeeds. ! 1036: Initial experimentation with the split-\UA/ ! 1037: in a local network environment has proved quite successful. ! 1038: ! 1039: \subsection{The MZnet Environs} % jns ! 1040: In 1983, ! 1041: the MZnet project\cite{EStef84} at the University of California, Irvine ! 1042: set out to study the problems involved with bringing ! 1043: Internet-class mail handling facilities to personal computers. ! 1044: The project used Apple~II computers running the CP/M 2.2 operating system. ! 1045: Programming was done in a subset of the C language called BDS C. ! 1046: The transport system was based on the \MMDF/ PhoneNet software, ! 1047: and implemented a {\it split-slot} arrangement between a personal computer ! 1048: and a larger, ! 1049: centralized mail distribution system that performed user ! 1050: authentication and provided a relatively secure mail transfer channel. ! 1051: The user agent, CP/MH, was based on \MH/. ! 1052: ! 1053: A conclusion of the experiment was that small personal computer systems ! 1054: with dial-up phone connections constrain user agent systems design in ! 1055: ways that require use of a {\it split-slot} interface between the \UA/ ! 1056: and its supporting \MTA/, and that this interface ! 1057: best provides the required services if it has error controlled command ! 1058: and data transfer facilities, with interactive behavior. ! 1059: Another conclusion indicated that a good design for a user agent in such ! 1060: a small personal computer ! 1061: environment could be based on a very modular architecture, ! 1062: such as \MH/. ! 1063: A final conclusion was that session-level authentication of the client \UA/ ! 1064: is required for both posting and delivery. ! 1065: ! 1066: It should be noted that the MZnet project had a profound influence on the ! 1067: development of the POP used by \MH/. ! 1068: A somewhat more detailed discussion of the relations between the two ! 1069: environments can be found in the POP description contained ! 1070: in the \MH/ release. ! 1071: ! 1072: \section{A Final Note} % jns ! 1073: With the fifth major release of the \MH/ system, ! 1074: it has become clear that most major increases in functionality can come ! 1075: only at the expense of either efficiency or portability. ! 1076: Although there has been great effort to keep \MH/ portable to a number of ! 1077: \unix/ implementations,% ! 1078: \nfootnote{As of this writing, ! 1079: there are approximately 75~sites running \mh5 ! 1080: on five different implementations of \unix/.} ! 1081: the divergence in process management facilities, ! 1082: file system enhancements, ! 1083: and even C~compiler capabilities ! 1084: has already presented obstacles to some attempts to rehost the \MH/ code. ! 1085: ! 1086: There has been some discussion of implementing specialized \MH/ daemons ! 1087: that maintain context information over one or more sessions, ! 1088: thus decreasing the amount of overhead involved in starting each \MH/ command. ! 1089: Unfortunately, ! 1090: even if such daemons were to be implemented, ! 1091: they would be very difficult to move to versions of \unix/ ! 1092: without sophisticated process management facilities, ! 1093: and even then the differences in ``philosophies'' ! 1094: of process management\cite{WJoy83,EOlse84} ! 1095: would tend to keep such daemons system specific. ! 1096: A better solution seems to be simply to tune existing code. ! 1097: ! 1098: \section{Acknowledgements} ! 1099: The authors would like to thank Norman Z.~Shapiro and ! 1100: Phyllis Kantar of the Rand Corporation for their invaluable comments during ! 1101: the preparation of this paper. ! 1102: ! 1103: \section{Distribution Information} ! 1104: For information concerning distribution mechanics for the current release of ! 1105: \MH/, please contact: ! 1106: $$\displayindent=\leftskip \advance\displayindent by1.5\parindent ! 1107: \halign{\leftline{#}\cr ! 1108: Support Group\cr ! 1109: Attn: MH Distribution\cr ! 1110: Department of Information and Computer Science\cr ! 1111: University of California, Irvine\cr ! 1112: Irvine, CA 92717\qquad USA\cr ! 1113: \cr ! 1114: 714/856--6852\cr ! 1115: }$$
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.