comparison papers/realwork/text.tex @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bce86c4163a3
1 % begin text
2
3 \banner
4
5 \section{Introduction} % mtr
6 The UCI version of the Rand Message Handling System, \MH/,
7 is a software system that performs two functions:
8 \underbar{first},
9 it interfaces a user to a message transport system,
10 so the user may receive and send mail;
11 \underbar{second},
12 it permits the user to maintain an organized mail environment to facilitate
13 the composition of new messages and the reading of old messages.
14 In short,
15 while not responsible for the delivery of messages,
16 \MH/ aids the user in handling mail.
17
18 \MH/ was originally developed by the Rand Corporation,
19 and initially was proprietary software.
20 The Department of Information and Computer Science at
21 University of California, Irvine,
22 shortly after joining the Computer Science Network (CSnet),
23 acquired a copy of \MH/,
24 and began additional development of the software.
25 Since that time,
26 the Rand Corporation has declared \MH/ to be in the public domain,
27 and the UCI version of \MH/ has passed through four major releases.
28 The current version, \mh5,
29 is available from U.C.~Irvine for a nominal distribution fee,
30 or may be retrieved from the University of Delaware via anonymous FTP.
31
32 Much credit must be given to the initial designers and implementors of \MH/:
33 Bruce Borden, Stockton Gaines, and Norman Shapiro.
34 Although \MH/ has suffered significant development at UCI
35 since Rand's initial release,
36 the fundamental concepts of \MH/'s environs have remained nearly unchanged.
37 In addition,
38 the authors of the current release gratefully acknowledge the comments of the
39 many sites which have run various releases of \MH/ in the past.
40 In particular,
41 the dozen or so beta test sites for \mh5
42 provided tremendous help in stabilizing the current release.
43
44 \MH/ runs on different versions of the \unix/ operating system
45 (such as Berkeley~4.2\bsd/ and various flavors of v7).
46 In addition,
47 \MH/ supports four different message transport interfaces:
48 \SendMail/\cite{EAllm83},
49 the standard mailer for 4.2\bsd/ systems;
50 \MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84},
51 the Multi-Channel Memo Distribution Facility developed by the University of
52 Delaware
53 which forms the software-backbone for CSnet\cite{DCome83} mail relay service;
54 SMTP,
55 the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP};
56 and,
57 a stand-alone delivery system.
58
59 This paper is organized in a straight-forward fashion:
60 Initially,
61 the \MH/ philosophy of mail handling is presented,
62 along with a description of the environment which the \MH/ user is given to
63 process mail.
64 Following this,
65 certain advanced features of \MH/ are discussed in more detail,
66 such as facilities for selecting messages,
67 and ``advanced'' concepts in {\it draft} handling.
68 In addition,
69 user interface issues in mail handling are addressed,
70 and the merits of \MH/'s approach is critically examined.
71 Next,
72 the \mh5 distribution package is described.
73 Finally,
74 we conclude by discussing the authors' experience with \MH/ development
75 and introducing areas where \MH/ may be further developed.
76
77 Although familiarity with \MH/ is not assumed on the part of the reader,
78 some knowledge of the \unix/ operating system is useful.
79 Appendix~A gives a short synopsis of the \MH/ commands.
80
81 \section{The \MH/ Philosophy} % mtr
82 Although \MH/ has many traits which tend to distinguish it from other systems
83 which handle mail,
84 there is a single fundamental design decision which influences the interface
85 between \MH/ and the user:
86 \MH/ differs from most other systems in that it is composed of many small
87 programs instead of one very large one.
88 This architecture gives \MH/ much of its strength,
89 since intermediate and advanced users are able to take advantage of this
90 flexibility.
91
92 The key to this flexibility is that the \unix/ shell
93 (usually the {\it C} shell or the {\it Bourne} shell),
94 is the user's interface to \MH/.
95 This means that when handling mail,
96 the entire power of the shell is at the user's disposal,
97 in addition to the
98 facilities which \MH/ provides.
99 Hence,
100 the user may intersperse mail handling commands with other commands in an
101 arbitrary fashion,
102 making use of command handling capabilities which
103 the user's shell provides.
104
105 Furthermore,
106 rather than storing messages in a complicated data structure
107 within a monolithic file,
108 each message in \MH/ is a \unix/ file,
109 and each folder (an object which holds groups of messages)
110 in \MH/ is a \unix/ directory.
111 That is,
112 the directory- and file-structure of \unix/ is used directly.
113 As a result,
114 any \unix/ file-handling command can be applied to any message.
115
116 To the novice,
117 this may not make much sense or may not seem important.
118 However,
119 as users of \MH/ become more experienced,
120 they find this capability attractive.
121 In addition,
122 this approach is often quite pleasing to system implementors,
123 because it minimizes the amount of coding to be performed,
124 and given a modular design,
125 changes to the software system can be maintained easily.
126 There are, however, performance penalties to be paid with this scheme.
127 This issue is considered later in the paper.
128
129 Having described how \MH/ fits into the \unix/ environment,
130 we now discuss the mail handling environment which is available to the \MH/
131 user.
132
133 \subsection{The \MH/ Environs} % jlr
134 In the \file{\$HOME} directory of each \MH/ user, a file named
135 \profile/ contains static information about the user's \MH/ environment,
136 and default arguments for \MH/ programs.
137 For the latter case,
138 each line of profile takes the form:
139 \example program-name:\ options\endexample
140 Each \MH/ program consults the user's \profile/ for its options.
141 These options are consulted prior to evaluating any command-line arguments,
142 and so provide the \MH/ user the capability to customize the defaults for each
143 command.
144 Futher, by using the \unix/ link facility,
145 different names can be given to the same command.
146 Since each \MH/ command looks
147 in the \profile/
148 for a component with the name by which it was invoked,
149 it's possible to have different defaults for the same program.
150 For example,
151 it is not uncommon to link \pgm{prompter}
152 (a simple prompting editor front-end)
153 under the name \pgm{rapid} in the
154 user's \file{bin/} directory, and add to the \profile/:
155 \example rapid:\ -prepend\ -rapid\endexample
156 As a result,
157 when \pgm{prompter} is invoked as \pgm{rapid},
158 it automatically uses the \switch{prepend} and \switch{rapid} options.
159
160 The profile component \eg{Path:} is the path to the user's
161 \MH/-directory, usually \Mail/.
162 In addition to containing the user's folders,
163 the \MH/-directory also contains {\it skeletons} and
164 {\it templates} used by the \MH/ programs,
165 and the user's \context/ file.
166 This latter file has the same format as the user's \profile/,
167 and contains the dynamic,
168 context-dependent information about the user's environment.
169 Whenever \MH/ looks for an \MH/-specific file,
170 such as a template or skeleton,
171 it first consults the user's \MH/-directory,
172 and then a system-wide library area.
173
174 The \MH/ user always has a {\it current folder},
175 which is the folder in which
176 the user is currently (or was last) working.
177 Since any \MH/ program which deals with folders implicitly manipulates this
178 information,
179 the name of the current folder is stored in the \file{context}
180 component \eg{Current-Folder:}.
181 Every folder has a {\it current message} known as \arg{cur}.
182 These values are the defaults for \MH/ commands which
183 accept folder and/or messages arguments.
184
185 \MH/ programs make use of a set of envariables
186 which further customize their behavior.
187 The \file{\$MH} envariable, if present,
188 specifies the name of an alternate profile for the user.
189 This allows a user of \MH/ to
190 easily maintain multiple mail-handling environments.
191
192 In terms of command syntax,
193 most \MH/ commands accept an optional {\it folder} argument,
194 such as \arg{+outbox}.
195 Unlike most \unix/ commands,
196 all \MH/ commands have switches which are words, rather than single letters.
197 Switches may be abbreviated to the least unambiguous prefix.
198 All \MH/ commands also support a \switch{help} switch,
199 which lists the syntax of the command along with available switches,
200 and the version number of the command.
201 Most \MH/ commands also take a \arg{msg} or \arg{msgs} argument
202 which takes the form of a message number (\eg{1}), a message range (\eg{1-2}),
203 a standard sequence name (\eg{cur}),
204 or a user-defined sequence name (\eg{select}).
205
206 \tagdiagram{1}{An \MH/ Session}{session}
207 \subsection{An \MH/ Transcript} % jlr
208 Figure~\session\ contains a transcript of a simple \MH/ session.
209 First, \pgm{inc} is run to incorporate the new mail into the
210 user's \eg{+inbox} folder.
211
212 A \pgm{scan} listing of the mail is printed while
213 it is being incorporated.
214 (The user could run \pgm{scan} explicitly to generate additional \pgm{scan}
215 listings later on.)
216 The \pgm{scan} listing gives the message number, followed
217 by the date, message sender, and subject.
218 (If the message originated from the user generating the listing,
219 the \eg{to:} addressee is displayed instead of the sender.)
220 If the subject is short,
221 the first part of the message body is displayed after the characters \eg{<<}.
222 The plus sign (`+') after
223 the message number indicates the current message.
224
225 The user \pgm{show\/}s the message, and decides to \pgm{repl\/}y.
226 A reply draft
227 is created using the headers of the message being replied-to,
228 using the default \file{replcomps} template.
229 The default editor, \pgm{prompter}, is called to edit the draft.
230 When an EOT is typed, \pgm{prompter} exits and the
231 user is left at the \whatnow/ prompt.
232 The option \pgm{send} is chosen.
233 Since there were no problems in posting the draft with the message transport
234 system,
235 no additional output is produced.
236 (\MH/ is not verbose by default.)
237
238 The user then decides to compose a new message.
239 The default skeleton, \file{components}, is copied to the draft,
240 and \pgm{prompter} is once again called.
241 After entering the addresses, subject, and body,
242 the user then \pgm{send\/}s the \file{draft} from the \whatnow/ prompt,
243 using \eg{send\ -verbose}, which causes
244 \MH/ to list out the message addresses as it submits them
245 to the message transport system.
246
247 \section{Some \MH/ Features} % mtr
248 We now consider certain advanced features in \MH/.
249 These features have been chosen to demonstrate some useful capabilities
250 available to the \MH/ user.
251
252 \subsection{Message Sequences and Selection} % jlr
253 \MH/ has several built-in message sequence names, which may
254 be used anywhere a \arg{msg} or \arg{msgs} argument is expected.
255 These are:
256 \arg{cur}, \arg{next}, \arg{prev}, \arg{first}, \arg{last}, and \arg{all}.
257 Message ranges may also be specified.
258 For example, \arg{all} is actually \arg{first-last}, and
259 \arg{+mh\ last:5} references the last five messages in your
260 \arg{+mh} folder.
261 A powerful capability of \MH/ is the ability to use not only the pre-defined
262 message sequence names,
263 but also arbitrary user-defined message sequence names.
264
265 Although all \MH/ programs recognize user-defined sequences when appropriate,
266 the \pgm{pick} and \pgm{mark} commands can create and modify
267 user-defined message sequences.
268 The \pgm{mark} command allows low-level manipulation of sequences,
269 and is not particularly interesting in our discussion.
270
271 The \pgm{pick} command selects certain messages out of a folder.
272 The criteria used for selection may be a search string and/or a date range.
273
274 Searching is performed on either a specific header in the message
275 (e.g., \eg{To:}),
276 or anywhere within the message.
277 By default,
278 \pgm{pick} lists out the message numbers that matched
279 the selection criteria.
280 Thus, \pgm{pick} is useful in backquoted operations to the shell.
281 For example, to scan all the messages in the current folder from ``frated'',
282 the \MH/ user issues the command:
283 \example scan\ \bq{pick\ -from\ frated}\endexample
284 To perform more complicated message selection,
285 user-defined sequences are employed.
286 Supplying a \switch{sequence\ name}
287 argument to \pgm{pick}, will cause it to define the
288 sequence \arg{name} as those messages matched.
289
290 Giving \pgm{pick} a list of messages causes it to limit its search to just
291 those messages.
292 For example,
293 to find all the messages in the current folder from ``frated'' also dated
294 before friday:
295 \example pick\ -from\ frated\ -sequence\ select\\
296 pick\ select\ -before\ friday\ -sequence\ select\endexample
297 With the first \pgm{pick} command,
298 the sequence \eg{select} is defined
299 to be all those messages from ``frated''.
300 In the second command, only those messages already in the \eg{select}
301 sequence are searched, and the \eg{select} sequence is redefined to be
302 only those messages which are also
303 dated before friday.
304 Those messages could then be \pgm{show\/}n with:
305 \example show\ select\endexample
306 When a \switch{sequence\ name} argument is given to \pgm{pick},
307 the default behavior --- listing the message numbers
308 matched --- is inhibited.
309 To re-enable this behavior, the \switch{list} option may be given.
310 As a result,
311 advanced users of \MH/ often put the following line in their \profile/:
312 \example pick:\ -sequence\ select\ -list\endexample
313 which allows them to easily make use of the \arg{select} sequence as the
314 messages last selected with \pgm{pick}.
315
316 Often it is desirable to act upon those messages which
317 are {\it not} members of a given sequence.
318 For this purpose,
319 the \eg{Sequence-Negation:} profile entry is useful.
320 If the name of a user-defined sequence is prefixed with the value of the
321 sequence-negation profile entry,
322 \MH/ commands will operate upon those messages which are {\it not} members
323 of that sequence.
324 For example, given a profile entry of:
325 \example Sequence-Negation:\ not\endexample
326 those messages which
327 are not in the \arg{select} sequence could be \pgm{scan\/}'d with:
328 \example scan\ notselect\endexample
329
330 Obviously, some confusion could result if an attempt was made
331 to define a sequence name
332 which began with the sequence-negation string (e.g., \eg{notselect}).
333 For this reason, \MH/ users will often use a single
334 character,
335 which their shell doesn't interpret,
336 as their sequence-negation string
337 (e.g., up-caret (`\^{}') for {\it C} Shell users,
338 and exclamation-mark (`!') for {\it Bourne} shell users).
339
340 \MH/ also provides a way of automatically remembering the last
341 message list given to
342 an \MH/ command.
343 This facility is implemented by using a profile entry called
344 \eg{Previous-Sequence:}.
345
346 \subsection{Draft Handling} % jlr
347 After the initial edit of a message draft,
348 the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} programs
349 give the user a \whatnow/ prompt.
350 The valid responses include:
351 \pgm{edit} to re-edit the draft,
352 \pgm{quit} to exit without sending the draft,
353 \pgm{send} to send the draft, and
354 \pgm{push} to send the draft in the background.
355
356 When the \pgm{send} option is given,
357 the draft is posted with the message transport system.
358 If there problems posting the draft,
359 the \whatnow/ prompt is re-issued,
360 so errors in the draft may be corrected.
361
362 Since posting the draft can be slow,
363 the \pgm{push} option allows the \MH/ user to send the draft in the
364 background, and return immediately to the shell.
365 If there are problems posting the message,
366 the user will not see the diagnostics produced by
367 the message transport system.
368 For this reason,
369 if \pgm{push} is used instead of \pgm{send},
370 and the message is not successfully posted,
371 \MH/ mails a message to the user
372 containing any diagnostics which the message transport system produced
373 along with a copy of the message.
374 Later,
375 the draft may be re-edited by entering \eg{comp\ -use}.
376
377 A relatively new feature of \MH/ is the ability to use a folder to store
378 multiple drafts.
379 These drafts are kept in an ordinary \MH/ folder,
380 and may be operated upon by \MH/ commands.
381 To enable this feature,
382 the \MH/ user selects a folder-name for the draft-folder,
383 and creates an entry in the \profile/:
384 \example Draft-Folder:\ +foldername\endexample
385 From this point on,
386 when a message is composed,
387 the draft will be created as a message in that folder,
388 instead of using the \file{draft} file in the user's \MH/ directory.
389 Unfortunately,
390 if posting problems occur on a message which has been \pgm{push\/}'d,
391 it may be difficult to re-edit the draft with
392 \eg{comp\ -use}.
393 This might be the case if the user had started composing another message,
394 while that first draft was being posted.
395 In that event,
396 the current-message in the draft-folder would no longer point
397 to the failed draft.
398
399 There is a solution for this problem, however.
400 By default,
401 \pgm{push} assumes the \switch{forward} option,
402 which says that if the message draft fails to be posted,
403 it should be forwarded back to the user in the
404 error report which \pgm{push} generates.
405 The failed draft may then be extracted with the \pgm{burst} program
406 (discussed later).
407
408 \subsection{BBoards} % mtr
409 \MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.%
410 \nfootnote{The UCI BBoards facility can run under either the \MMDF/ or
411 \SendMail/,
412 or in a more restricted form under stand-alone \MH/.}
413 This facility permits the efficient distribution of interest group messages
414 on a single host,
415 to a group of hosts under a single administration,
416 and to the ARPA Internet community.
417
418 Although most readers are probably familiar with the concept of an interest
419 group in the Internet context, a brief description is now given.
420 Observant readers will notice that the distributed nature of the
421 ``network news'' (a.k.a.~USENET)
422 tends to avoid many of the problems described below.
423
424 Described simply, an interest group is composed of a number of subscribers
425 with a common interest.
426 These subscribers post mail to a single address, known as the
427 {\it distribution} address (e.g., {\tx MH-Workers@UCI}.
428 From this distribution address, a copy of the message is sent to each
429 subscriber.
430 Each group has a {\it moderator},
431 who is the person that runs the group.
432 This moderator can usually be reached at a special address,
433 known as the {\it request} address (e.g., {\tx MH-Workers-Request@UCI}).
434 Usually, the responsibilities of the moderator are quite simple,
435 since the mail system handles distribution to subscribers automatically.
436 In some interest groups,
437 instead of each separate message being distributed directly to subscribers,
438 a batch of (hopefully related) messages
439 are put into a {\it digest} format by the
440 moderator and then sent to the subscribers.
441 (This is similar to a newsletter format.)
442 Although this requires more work on the part of the moderator
443 and introduces delays,
444 such groups tend to be better organized.
445
446 Unfortunately, some problems arise with the scheme outlined above.
447 First, if two users on the same host subscribe to the same interest group,
448 two copies of the message are delivered.
449 This is wasteful of both processor and disk resources at that host.
450
451 Second,
452 some groups carry a lot of traffic.
453 Although subscription to a group does indicate interest on the part of a
454 subscriber,
455 it is usually not interesting to get 50 or so messages delivered
456 each day
457 to the user's private maildrop,
458 interspersed with {\it personal} mail,
459 which is likely to be of a much more important and timely nature.
460
461 Third, if a subscriber's address in a distribution list
462 becomes ``bad'' somehow and causes failed mail to be returned,
463 the originator of the message is normally notified.
464 It is not uncommon for a large list to have several bogus addresses.
465 This results in the originator being flooded with ``error messages'' from
466 mailers across the Internet stating that a given address on the list was
467 bad.
468 Needless to say,
469 the originator usually does not care if the bogus addresses got a copy
470 of the message or not.
471 The originator is merely interested in posting a message
472 to the group at large.
473 On the other hand,
474 the moderator of the group does care if there are bogus addresses on the list,
475 but ironically does not receive notification.
476
477 To solve these problems,
478 the UCI BBoards facility introduces a new entity into the picture:
479 a {\it distribution channel}.
480 All interest group mail is handled by
481 the special mail system component.
482 The distribution address for an interest-group
483 maps mail for that interest-group to the distribution channel,
484 which then performs
485 several actions.
486 First, if local delivery is to be performed,
487 a copy of the message is placed in a global maildrop for the interest
488 group with a timestamp and a unique number.
489 Local users can read messages posted for the interest group by reading this
490 ``public'' maildrop.
491 Second, if further distribution is to take place,
492 a copy of the message is sent to the distribution address in such a way that
493 if any of the addresses are bogus,
494 failure notices will be returned to the local maintainer of the group
495 address list, rather than the originator of the message.
496
497 This scheme has several advantages:
498 First, messages delivered to the local host are processed and saved once
499 in a globally accessible area.
500 The UCI BBoards facility supports software which allows a user to query an
501 interest group for new messages and to read and process
502 those messages in the \MH/-style.
503 Second, once a host administrator subscribes to an interest group,
504 each user may join or quit the list's readership without
505 contacting anyone.
506 Third, a hierarchical distribution scheme can be constructed to
507 reduce the amount of delivery effort.
508 Finally, errors are prevented from propagating.
509 When an address on the distribution list goes bad,
510 the list moderator who is responsible for the address is notified.
511 If a local moderator does not exist,
512 then the local PostMaster is notified (not the global group moderator).
513
514 In addition to solving the problems outlined above,
515 the UCI BBoards facility supports several other capabilities.
516 BBoards may be automatically archived in order to conserve disk space and
517 reduce processing time when reading current items.
518 Also,
519 the archives can be separately maintained on tape for access by interested
520 researchers.
521
522 Special alias files may be generated which allow the \MH/ user to shorten
523 address entry.
524 For example, instead of sending to {\tx SF-Lovers@Rutgers},
525 a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing
526 facility automatically makes the appropriate expansion in the headers of the
527 outgoing message.
528 Hence,
529 the user need only know the name of an interest group and not its global
530 network address.
531
532 Finally, the UCI BBoards facility supports {\it private} interest groups
533 using the \unix/ group access mechanism.
534 This allows a group of people on the same or different machines to conduct a
535 private discussion.
536
537 The practical upshot of all this is that the UCI BBoards facility automates
538 the vast majority of BBoards handling from the point of view of both the
539 PostMaster and the user.
540
541 \MH/ provides three programs to deal with interest groups.
542 The \pgm{bbc} program is used to check on the status of one or more groups,
543 and to optionally start an \MH/ shell on those groups which the user is
544 interested in.
545 The \pgm{bbl} program can be used to manually perform maintenance on a
546 discussion group beyond the normal automatic capabilities of the UCI BBoards
547 facility.
548 Finally,
549 the \pgm{msh} program implements an \MH/ shell for reading BBoards,
550 in which nearly all of the \MH/ commands are implemented in a single program.
551
552 Observant readers may note that the use of \pgm{msh} is contrary to the \MH/
553 philosophy of using relatively small, single-purpose programs.
554 Sadly,
555 the authors admit that this is true.
556 In an effort to minimize use of system resources however,
557 BBoards are kept in maildrop format instead of folders.%
558 \nfootnote{When the message transport system delivers a message to a user
559 it stores it in a single file, called a {\it maildrop}.
560 Since many messages may be present in a single maildrop,
561 (in theory) there is a unique string acting as a separator between messages
562 in the maildrop.
563 Although this is convenient for storage of messages,
564 it makes retrieval more difficult unless a separate index into the maildrop
565 is kept.
566 This latter approach is taken by the \pgm{msg} program available with \MMDFII/
567 and by \pgm{msh} as well.}
568 Some research has gone into overcoming this problem to restore
569 \MH/'s purity of purpose,
570 but all solutions proposed to date are either unworkable or require
571 significant recoding of \MH/'s internals.
572
573 \subsection{Bursting} % jlr
574 Internet interest group mail is often sent out in digest form.
575 The experienced \MH/ user may wish to deal with the digest messages on
576 an individual basis, however.
577 The \pgm{burst} program allows the \MH/ user to extract these digest
578 messages,
579 and store each as an individual \MH/ message.
580
581 \pgm{Burst} will also extract forwarded messages generated by \pgm{forw}
582 (or the forwarded message in the error report generated by \pgm{push},
583 as described above).
584 Although \pgm{burst} cannot always decapsulate
585 messages encapsulated by sites not running \MH/,
586 it adheres to the proposed standard described in \cite{MRose85b}.
587
588 \subsection{Distributed Mail} % mtr
589 The ARPA Internet community consists of many types of heterogeneous nodes.
590 Some hosts are large mainframe computers,
591 others are personal workstations.
592 All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}.
593 Messages which conform to the Standard for the Format of ARPA Internet Text
594 Messages\cite{DCroc82}
595 are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}.
596
597 On smaller nodes in the ARPA Internet,
598 it is often impractical to maintain
599 a message transport system (e.g., \SendMail/).
600 For example,
601 a workstation may not have sufficient resources (cycles, disk space)
602 in order to permit an SMTP server and associated local mail delivery system
603 to be kept resident and continuously running.
604 Furthermore,
605 the workstation could be off-net for extended periods of time.
606 Similarly,
607 it may be expensive (or impossible) to keep a personal computer
608 interconnected to an IP-style network for long periods of time.
609 In other words,
610 the node is lacking the resource known as ``connectivity''.
611
612 Despite this,
613 it is often desirable to be able to manage mail with \MH/ on these smaller
614 nodes,
615 and they often support a user agent to aid the tasks of mail handling.
616 To solve this problem,
617 a network node which can support a message transport entity
618 (known as {\it service} host) offers
619 a maildrop service to these less endowed nodes
620 (known as {\it client} hosts).
621 The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a
622 workstation to dynamically access a maildrop on a service host to pick-up
623 mail.%
624 \nfootnote{Actually,
625 there are three different descriptions of the POP.
626 The first, cited in \cite{JReyn84},
627 was the original description of the protocol,
628 which suffered from certain problems.
629 Since then,
630 two alternate descriptions have been developed.
631 The official revision of the POP\cite{MButl85},
632 and the revision of the POP which \MH/ uses
633 (which is documented in an internal memorandum in the \MH/ release).
634 This paper considers the POP in the context of the \MH/ release.}
635 The level of access includes the ability to
636 determine the number of messages in the maildrop and the size of each message,
637 as well as to retrieve and delete individual messages.
638 More sophisticated implementations of the POP server
639 are able to distinguish between the header and body portion of each message,
640 and send $n$ lines of a message to the POP client.
641 This capability is useful in thinly connected environments where conservation
642 of bandwidth is important.
643 By utilizing a more intelligent POP client,
644 a user may generate ``scan~listings'' and decide dynamically which messages
645 are worth taking delivery on.
646 The philosophy of the POP is to put intelligence in the
647 POP clients and not the POP servers.
648
649 The current release of \MH/ supports the above model fully.
650 A POP client program is available to retrieve a maildrop from a POP service
651 host.
652 In addition,
653 using the SMTP configuration for delivery in \MH/
654 (either in conjunction with \SendMail/ or the \MMDF/),
655 a user is able to specify a search-list of service hosts (and/or networks)
656 to try to post mail.
657 Using this search-list,
658 when an \MH/ user posts a draft,
659 the \pgm{post} program will attempt to establish an SMTP connection
660 with each host in the search-list to post the message until it succeeds.
661 Initial experimentation using the POP and \MH/
662 in a local network environment has proved quite successful.
663
664 \section{User Interface Issues in \MH/} % mtr
665 At this point,
666 it is perhaps useful to take a step backwards and examine the success
667 and problems of \MH/'s approach to user interfaces.
668
669 \subsection{Creeping Featurism} % mtr
670 A complaint often heard about systems which undergo substantial development
671 by many people over a number of years, is that more and more options are
672 introduced which add little to the functionality but greatly increase the
673 amount of information a user needs to know in order to get useful work done.
674 This is usually referred to as {\it creeping featurism}.
675
676 Unfortunately \MH/,
677 having undergone six years of off-and-on development by ten or so
678 well-meaning programmers (the present authors included),
679 suffers mightily from this.
680 For example,
681 the \pgm{send} command has twenty-five visible switches,
682 and at least nine hidden switches,
683 for a total of thirty-four.
684 The poor user who types \example send\ -help\endexample watches the options
685 scroll off the screen
686 (since the \switch{help} switch also lists out four other lines of
687 information).%
688 \nfootnote{Recently,
689 this was fixed by compressing the way in which switches are presented.
690 The solution is only temporary however,
691 as \pgm{send} will no doubt acquire an {\it endless} number of switches in
692 the years to come.}
693 The sad part is that all of these switches are useful in one form or another.
694
695 There are a lot of good things to be said for the
696 ``one program, one function'' philosophy of system design.
697 In the \MH/ case, however,
698 each program really does only one mail handling activity
699 (with a few minor exceptions).
700 The options associated with each command are present to modify the program's
701 behavior to perform similar, but slightly different tasks.
702 In further defense of \MH/,
703 note that there are~32 \MH/ commands at present,
704 all performing different tasks.
705
706 The problem with creeping featurism though,
707 is that while the functionality of the system increases sub-linearly,
708 the complexity of the system increases linearly.
709 That is,
710 although the number of switches that a program takes might double,
711 it is unlikely that the program's functionality or capabilities will double.
712
713 \subsection{Templates versus Switches} % mtr
714 One way to trim the explosion of available options,
715 while still increasing functionality,
716 is to introduce options with a richer domain.
717 Hence,
718 instead of using options which take {\it on} or {\it off} forms
719 or simple numeric or string values,
720 the possible values which an option might take on is given a large space.
721 There are several ways that this might be accomplished.
722
723 \tagdiagram{2}{Draft Skeleton}{components}
724 The \pgm{comp}, \pgm{dist}, and \pgm{forw} programs
725 use draft {\it skeletons} (simple form fill-in files) to construct the
726 general format of the draft being composed.
727 An example of a draft skeleton used for composing new messages
728 (by \pgm{comp\/}) is shown in Figure~\components.
729 The approach is to let the user specify (and later edit) both arbitrary
730 headers of draft and the body of the draft.
731 Note while most of the fields are empty,
732 the first \eg{Fcc:} field already contains a value.
733 By using the simple prompting editor, \pgm{prompter},
734 the user can speedily enter the headers of the message.
735 The \pgm{prompter} program given the skeleton in Figure~\components\ would
736 prompt the user for the contents of each field,
737 except for the second \eg{fcc:},
738 which it would include verbatim.
739 It would then read the body of the message up to an end-of-file.
740 Naturally,
741 the \MH/ user is free to use {\it any} editor to edit {\it any} part of the
742 draft (headers or body).
743 This example
744 demonstrates the flexibility achieved by not limiting what headers a
745 draft may contain (which most mail sending programs do),
746 while still retaining the simplicity of being able to treat the entire
747 message draft as a \unix/ file.
748
749 \tagdiagram{3}{Reply Template}{replcomps}
750 Another more interesting approach is used by the \pgm{repl} command,
751 which constructs a draft in reply-to a previously received message.
752 Instead of adding switches to indicate which fields of the draft should be
753 derived from the message being replied-to,
754 and how they should be derived,
755 a single option,
756 the ability to specify a {\it template}, was made available.
757 An example of a reply template is shown in Figure~\replcomps.
758 Put simply,
759 based on the presence of certain fields in the message being replied-to,
760 and a few switches given by the user,
761 using the reply template,
762 \pgm{repl} generates the reply draft automatically.
763
764 \tagdiagram{4}{The \file{tripcomps} Reply Template}{tripcomps}
765 This facility, for example,
766 can be used to generate automatic replies.%
767 \nfootnote{\MH/ supports the notion of a user-defined {\it mail hook}
768 which is invoked each time a user receives mail.}
769 One function might be to write a \pgm{rcvtrip} shell script
770 which automatically answered messages when mail wasn't being read for a
771 period of time
772 (e.g., while attending a conference).
773 An example of a reply template at the heart of such a script
774 is shown in Figure~\tripcomps.
775
776 \tagdiagram{5}{The \file{bombcomps} Reply Template}{bombcomps}
777 Finally,
778 another application might be to utilize
779 the highly useful letter bomb protocol.%
780 \nfootnote{The authors wish to credit Ron Natalie of the Ballistics Research
781 Laboratory in Aberdeen, Maryland for formalizing the
782 use of this protocol in the ARPA Internet community.}
783 The important thing to note about this template is that it generates not only
784 the headers of the reply draft (with a creative \eg{Reply-to:} address),
785 but the body as well.
786 Hence,
787 the commands
788 \example
789 repl\ -form\ bombcomps\ -noedit\ ;\ rmm\\
790 What\ now?\ push%
791 \endexample
792 are very handy for dealing with disturbing mail in a straight-forward manner.
793 Of course, \pgm{repl} could be linked to \pgm{bomb} in the user's \file{bin/}
794 directory and an appropriate line could be added to the user's \MH/ profile,
795 in order to further shorten type-in.
796
797 \tagdiagram{6}{Display Template}{mhlforward}
798 A variation on the reply template is the {\it display template}.
799 A display template, as used by the \pgm{mhl} program,
800 contains instructions on how to format a message.
801 In addition to being used by \pgm{show}, et.~al.,
802 the \pgm{forw} program can also use a display template to format each
803 message being forwarded.
804 Similarly,
805 although \pgm{repl} uses a reply template to construct the draft
806 being composed,
807 it also may use a display template to format the body of the message
808 being replied-to for enclosure in the reply.
809 Furthermore,
810 the \pgm{post} program may use a display template to format the body of a
811 blind-carbon-copy.
812 An example of a display template used for formatting forwarded messages
813 is shown in Figure~\mhlforward.
814
815 As with reply templates,
816 display templates can offer a lot of functionality.
817 For example,
818 the one line display template:
819 \example
820 body:nocomponent,overflowtext=,overflowoffset=0,width=10000%
821 \endexample
822 can be used to extract the body of a message,
823 while ignoring the headers.
824 Hence,
825 if a \pgm{shar} archive arrived in the mail,
826 a convenient way to unpack it,
827 assuming the above display template was called \file{mhl.body},
828 would be:
829 \example show\ -form\ mhl.body\ |\ sh\endexample
830
831 The biggest win with display templates,
832 of course,
833 is that all those annoying header lines which mailers
834 everywhere generate can be simply and easily filtered out.
835
836 \subsection{Modularity versus Monolithicity} % jlr
837 Since \MH/ is a set of programs
838 which perform separate tasks,
839 as opposed to being a single, monolithic program,
840 the power of the shell is used directly to aid in mail-handling.
841 One powerful capability which this design achieves is the ability to extend
842 the \MH/ command set,
843 by developing shell scripts which use the standard \MH/
844 programs to accomplish complicated or specialized tasks.
845
846 \tagdiagram{7}{The \pgm{mpick} Script}{mpick}
847 For example,
848 in the \MH/ distribution there is a shell script
849 called \pgm{mpick} (shown in Figure~\mpick)
850 which tries to locate all the messages which pertain to a given discussion,
851 by looking at the \eg{Message-ID:} and \eg{In-reply-to:} headers,
852 to find matching message-ids.%
853 \nfootnote{Note that the shell scripts included in the \MH/ distribution
854 are written for the {\it Bourne} shell,
855 and have a `:' as the first character of the first line,
856 so they will be portable to all versions of \unix/,
857 not just those which support the
858 Berkeley `\#!' enhancement.}
859
860 \tagdiagram{8}{The \pgm{append} Editor}{appended}
861 Unfortunately, some parts of \MH/ are somewhat monolithic.
862 An example of this is the \whatnow/ prompt.
863 There are only a few options at this prompt,
864 and one cannot give a normal shell command.
865 Some \MH/ users seem to feel that more options should be added to
866 the \whatnow/ prompt, such as an \pgm{insert-file} option.
867 It was argued that just about any editor would allow you to
868 insert a file, and another \whatnow/ option was not needed.
869 These users persisted, however, so the
870 problem was solved, by writing a trivial shell
871 script ``editor'' (see Figure~\appended)
872 which could be invoked by the \pgm{edit} option:
873 \example What now?\ edit\ append\ filename\endexample
874
875 A better interface at this point is really needed, however.
876 One possibility is to simply pass any unrecognized commands on
877 to a shell for interpretation, supplying the path name of the draft file
878 as an argument.
879 A solution which shows more promise is to give you a sub-shell
880 {\it instead} of the \whatnow/ prompt,
881 and setup certain envariables so that
882 the \MH/ commands would act upon the \file{draft} by default.
883 For example, \pgm{show} with no \arg{msgs} arguments
884 would show the draft instead of the current message.
885 This alternative has recently been implemented and is under testing.
886
887 \section{The \MH/ Distribution} % mtr
888 The \mh5 distribution is now briefly described,
889 both in terms of static configuration methods
890 and dynamic tailoring.
891 Appendix~B describes the mechanics of receiving an \mh5 distribution.
892
893 \subsection{Configurable \MH/} % jlr
894 The \MH/ distribution currently runs on a large number of different \unix/
895 versions,
896 ranging from MicroSoft XENIX to Berkeley 4.2\bsd/.
897 All the code which is specific to a particular target environment is
898 enabled via the C-preprocessor \eg{\#ifdef} mechanism,
899 so compilation under different versions of \unix/ is trivial.
900 There are,
901 however,
902 a large number of compile-time options which may vary from site to site,
903 so an automated configuration method was needed.
904
905 \tagdiagram{9}{Sample \MH/ Configuration File}{mhconfig}
906 The \MH/-installer must create a configuration file,
907 which contains a list of the compile-time options
908 and the values which are desired for them.
909 Compile-time options include the installation location for \MH/,
910 what kind of message transport system is to be used,
911 and the default editor for the installation.
912 An example of such a configuration file is shown in Figure~\mhconfig.
913
914 After creating this file (several examples are included in the distribution),
915 the installer runs the \pgm{mhconfig} program,
916 which customizes the \file{Makefile\/}s and some of the programs,
917 for that site's particular installation.
918 No hand-editing of any source code should be necessary,
919 under normal circumstances.
920
921 \subsection{Interface to the Message Transport System} % jlr & mtr
922 \MH/ will run with a number of message transport systems,
923 including \SendMail/, \MMDFII/, and a small stand-alone system.
924 One flexible method of posting mail is through an SMTP connection.
925 There are a couple of major wins in using this configuration:
926 First,
927 none of the \MH/ programs need to know where the interface programs to
928 the message transport system are located,
929 which makes them easier to move between systems.
930 Second,
931 mail can be posted on relay hosts,
932 and the local host of an \MH/ user may not need a message transport system at
933 all (as alluded to in the preceeding discussion on the POP).
934
935 \tagdiagram{10}{Sample MTS Tailor File}{mtstailor}
936 Those parts of \MH/ which interact with the local message transport agent
937 read additional tailoring information when they start.%
938 \nfootnote{This simple facility is based on a more extensive
939 tailoring capability found in \MMDFII/.}
940 This information includes
941 the location of standard and alternate maildrops,
942 maildrop delimiter strings,
943 the locking directory and locking style,
944 and other tailoring information specific for the particular
945 message transport system in use
946 (e.g., the default server search-list when mail is posted with the SMTP).
947 In most cases,
948 by using a tailor file,
949 each site running a similar \MH/ configuration is able to simply transfer
950 \MH/ binaries between hosts.
951 An example of such a tailor file is shown in Figure~\mtstailor.
952
953 A continuing question which is often raised is how intelligent should user
954 agents (like \MH/ and UCB \pgm{Mail}\/) be with respect to the environment in
955 which they operate.
956 At present, \MH/ likes to determine
957 the official hostnames for addresses when posting mail.
958 Many argue that this is improper or unnecessary behavior for a user agent,
959 and that the local message transport agent should handle these functions.
960 Unfortunately,
961 this implies that the message transport agent should munge headers when mail
962 is posted to remove local host aliases and only permit address fields with
963 fully-qualified addresses.
964 Sadly, neither \SendMail/ nor \MMDFII/ really gets this right
965 (flames to \file{/dev/null} please).
966 The current \MH/ maintainers believe that the resolution of host aliases to
967 official names should be a well-supported interface with the local message
968 transport agent.
969 However, to provide equal time to those who hold opposite views,
970 \MH/ supports a configuration option called \eg{DUMB} which disables \MH/'s
971 attempts to resolve addresses into fully-qualified strings.
972
973 \section{Concluding Remarks} % jlr and mtr
974 While \MH/ has undergone significant development since
975 the original
976 Rand release, the authors have
977 tried to keep the fundamental concepts of
978 \MH/ unchanged.
979 % specific vs. general
980 The authors have continually had to battle against
981 well-meaning \MH/ users who wanted to make \MH/
982 more like other (less powerful) user agents.
983 More and more ``features'' were often suggested for \MH/,
984 usually at the expense of making \MH/ less general, and more specific.
985 In nearly all cases, the ``features'' which these users wanted
986 were already present in \MH/ in a slightly different form,
987 or could be realized by simply writing a short shell script.
988 A classic example is the repeated requests by one user to have \pgm{dist}
989 take a list of messages rather than a single message and distribute each one
990 of them in turn.
991 A simple shell script which called \pgm{dist} repeatedly,
992 perhaps with ``canned'' arguments so the user typed in addressing information
993 only once, would easily meet this request.
994
995 % generality
996 A number of \MH/ comands have a large number of options.
997 When adding options, the authors have tried to make the options
998 general, while still accomodating the requests of specific users.
999 An example of a specific request which was implemented as a
1000 general feature is the \eg{Previous-Sequence} profile entry
1001 (mentioned above).
1002 If you use this profile entry, every \MH/ command is forced to write
1003 out \context/ changes, making every command somewhat slower.
1004 Since only a few users wanted this capability, it was implemented
1005 in such a way that users who didn't want it, didn't have to pay
1006 the cost of slowing down every \MH/ command.
1007
1008 % naive user :: MH
1009 \MH/ has a powerful tailoring capability provided by the \profile/.
1010 Using profile entries, users may
1011 customize their own environment without affecting others.
1012 Novice users often take advantage of the \MH/-tailoring
1013 capabilities to try to make \MH/ work similarly to
1014 other user agents they've used.
1015 This has the advantage of allowing them to quickly begin
1016 using \MH/ to handle their mail.
1017 However, since these novice users don't take advantange of all the
1018 capabilities of \MH/,
1019 they frequently will complain about things they think can't
1020 be done with \MH/, or could be done ``better'' some other way.
1021 Fortunately,
1022 as these users become more experienced with both \MH/ and \unix/,
1023 they can modify their environment to take better advantage of
1024 all of \MH/'s capabilities.
1025 Novice \MH/ users who see features lacking
1026 are encouraged to take a better look at what \MH/ {\it can} do,
1027 instead of trying to make \MH/ into something it isn't.
1028 This may sound rather inflammatory,
1029 but it would really be a much nicer world for us all if users of software
1030 systems would read the manual prior to asking questions.
1031
1032 % speed consideration
1033 For a moment, let's consider the evolution of one \MH/ feature which has
1034 proved itself to be very useful.
1035 As users began employing \MH/ to handle their mail,
1036 the number of messages that could be processed
1037 in a given amount of time increased greatly.
1038 As the volume of messages increased however,
1039 it became clear that some \MH/ operations were too slow,
1040 in particular the interaction with the (slow) message transport system.
1041 To overcome this problem, the \pgm{push} option
1042 was added at the \whatnow/ prompt.
1043 Originally, this option was hidden from novice users
1044 and did little more than send the message in the background:
1045 any output generated by
1046 the background \pgm{send} process would be printed
1047 asyncronously on the terminal.
1048 If a message failed posting with the message transport system,
1049 it would simply be left in the \file{draft} file.
1050
1051 Gradually, other features were added to \pgm{push}.
1052 Since users wanted to be able to send more than one draft
1053 at a time, \pgm{push} was changed to optionally
1054 rename the draft file before posting it.
1055 (This is what the hidden \switch{unique} option does.)
1056 Having message transport system diagnostics
1057 written asyncronously on the user's terminal was annoying,
1058 so \pgm{push} was made to intercept these diagnostics,
1059 and mail the user a report containing them.
1060 Although the diagnostic report mailed back by \pgm{push} contains
1061 the name of the draft which failed,
1062 a useful added feature was the ability to have \pgm{push}
1063 include the failed draft as well.
1064 Eventually, the draft-folder mechanism was implemented to make
1065 handling multiple message drafts much easier.
1066
1067
1068 \subsection{TODO} % mtr
1069 There are, no doubt, a number of improvements which could be made to \MH/.
1070 At the present time,
1071 what further development should \MH/ suffer?
1072 Although not by any means inclusive,
1073 here's a list:
1074 \smallskip
1075 {\advance\leftskip by\parindent
1076 \item{1.} Performance Enhancements\hbreak
1077 Hardware gets faster all the time, but people always complain that software
1078 is too slow.
1079 Owing to its user interface style,
1080 \MH/ is somewhat slower than monolithic programs like UCB \pgm{Mail}.
1081 It would be nice if \MH/ could be tuned or accelerated somehow.
1082
1083 \item{2.} Port to System~5\hbreak
1084 \MH/ runs on 4.2\bsd/~\unix/ and Version~7 variants.
1085 It should not be difficult to port \MH/ to a SYS5 environment.
1086 This should significantly increase the number of hosts
1087 on which \MH/ can run.
1088 The authors,
1089 lacking a SYS5 machine (and experience with SYS5) to perform the port,
1090 are actively seeking a System~5 guru to attempt this feat.
1091
1092 \item{3.} Interface to the Network News\hbreak
1093 Not all sites that run \MH/ are in the ARPA Internet,
1094 and as such the UCI BBoards facility may not be of much use to them.
1095 A good \MH/ interface to the network news would allow users on hosts with a
1096 news feed to employ the same interface for reading and sending both mail and
1097 news.
1098
1099 \item{4.} Programmed Instruction for Beginners\hbreak
1100 The complexity of \MH/ is often intimidating to new users.
1101 It would be nice to develop a set of \pgm{learn} lessons for those users who
1102 don't like \pgm{man} pages and non-interactive tutorials.
1103
1104 \item{5.} Message List Expansion\hbreak
1105 At present, when a list of messages is given to an \MH/ command,
1106 it expands the list and processes each message in numerical order
1107 rather than the order in which the messages were given
1108 (e.g., \eg{show\ 2\ 1} \pgm{show\/}s message~1
1109 and then message~2).
1110 It would be nice if \MH/ processed messages in the order
1111 they were given.
1112
1113 \item{6.} Context Changes\hbreak
1114 In nearly all cases,
1115 an \MH/ command does not write out context changes until it is about to exit
1116 successfully.
1117 There is some controversy as to whether this is the correct behavior
1118 in all cases.
1119 Some argue that once an \MH/ command has fully parsed its argument list,
1120 the context should be updated.
1121 \par}