docs/master

changeset 76:2e61e0004a8f

Rework of existing text.
author markus schnalke <meillo@marmaro.de>
date Tue, 05 Jun 2012 19:00:15 +0200
parents 0927d38589af
children 0947c24dd4c6
files ch03.roff
diffstat 1 files changed, 289 insertions(+), 210 deletions(-) [+]
line diff
     1.1 --- a/ch03.roff	Tue Jun 05 11:15:18 2012 +0200
     1.2 +++ b/ch03.roff	Tue Jun 05 19:00:15 2012 +0200
     1.3 @@ -12,21 +12,22 @@
     1.4  .P
     1.5  MH had been considered an all-in-one system for mail handling.
     1.6  The community around nmh has a similar understanding.
     1.7 -In fundamental difference, I believe that mmh should be a MUA but
     1.8 -nothing more. I believe that all-in-one mail systems are not the way
     1.9 -to go. There are excellent specialized MTAs, like Postfix;
    1.10 +In fundamental difference, should be a MUA only.
    1.11 +I believe that all-in-one mail systems are obsolete.
    1.12 +There are excellent specialized MTAs, like Postfix;
    1.13  there are specialized MDAs, like Procmail; there are specialized
    1.14  MRAs, like Fetchmail. I believe it's best to use them instead of
    1.15 -providing the same function ourselves. Doing something well requires to
    1.16 -focus on this particular aspect or a small set of aspects. The more
    1.17 +providing the same function ourselves. Doing something well, requires to
    1.18 +focus on a small set of aspects. The more
    1.19  it is possible to focus, the better the result in this particular
    1.20 -area will be. The limiting resource in Free Software community development
    1.21 -usually is human power. If the low development power is even parted
    1.22 -into multiple development areas, it will hardly be possible to 
    1.23 +area will be. Usually, the limiting resource in Free Software
    1.24 +community development is man power.
    1.25 +If the development power is even spread over a large
    1.26 +development area, it becomes more difficult to
    1.27  compete with the specialists in the various fields. This is even
    1.28  increased, given the small community \(en developers and users \(en
    1.29  that MH-based mail systems have. In consequence, I believe that the
    1.30 -available resources should be concentrated at the point where MH is
    1.31 +available resources should be focused to the point where MH is
    1.32  most unique. This is clearly the MUA part.
    1.33  .P
    1.34  The goal for mmh was to remove peripheral parts and stream-line
    1.35 @@ -38,100 +39,121 @@
    1.36  In contrast to nmh, which also provides mail submission and mail retrieval
    1.37  facilities, mmh is a MUA only.
    1.38  This general difference in the view on the character of nmh
    1.39 -strongly supported the development of mmh.
    1.40 +initiated the development of mmh.
    1.41  Removing the mail transfer facilities had been the first work task
    1.42 -for the mmh project.
    1.43 +in the mmh project.
    1.44  .P
    1.45  The MSA is called \fIMessage Transfer Service\fP (MTS) in nmh.
    1.46 -The facility establishes TCP/IP connections and speaks SMTP to submit
    1.47 +The facility established network connections and spoke SMTP to submit
    1.48  messages for relay to the outside world.
    1.49 -This part is implemented in the
    1.50 +This part was implemented by the
    1.51  .Pn post
    1.52  command.
    1.53 -Demanded by the changes in
    1.54 -emailing, this part of nmh required changes in the last years.
    1.55 -Encrypted connections needed to be supported, hence SASL was introduced
    1.56 +The changes in emailing
    1.57 +demanded changes in this part of nmh in the last years.
    1.58 +Encryption and authetication for network connections
    1.59 +needed to be supported, hence TLS and SASL were introduced
    1.60  into nmh. This added complexity to the nmh without improving it in
    1.61  its core functions. Also, keeping up with recent developments in
    1.62 -this field needs requires development power and specialists.
    1.63 -Mmh cuts this whole facility off and depends on an external MTA instead.
    1.64 +this field requires development power and specialists.
    1.65 +For mmh this whole facility was cut off.
    1.66 +.Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
    1.67 +.Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3
    1.68 +.Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b
    1.69 +Instead, mmh depends on an external MTA.
    1.70  The only outgoing interface available to mmh is the
    1.71  .Pn sendmail
    1.72  command.
    1.73  Almost any MTA provides a
    1.74  .Pn sendmail
    1.75  command.
    1.76 -It not, any program can be substituted if it reads the
    1.77 +If not, any program can be substituted if it reads the
    1.78  message from the standard input, extracts the recipient addresses
    1.79  from the message header and does not conflict
    1.80 -with sendmail-specific command line arguments.
    1.81 +with sendmail-specific command line options.
    1.82  .P
    1.83  To retrieve mail, the
    1.84  .Pn inc
    1.85 -command in nmh has the ability to establish TCP/IP connections
    1.86 -and speaks POP3 to retrieve mail from remote servers.
    1.87 -As with mail submission, here encrypted connections are required
    1.88 -today, thus SASL support was added.
    1.89 -As POP3 is superseded by IMAP more and more, support for message
    1.90 -retrieval through IMAP will become necessary to be added soon.
    1.91 -Mmh has no support for retrieving mail from remote locations.
    1.92 -It depends on an external tool to cover this task.
    1.93 -There are two ways for messages to enter mmh's mail storage:
    1.94 -Incorporate them with
    1.95 +command established network connections
    1.96 +and spoke POP3 to retrieve mail from remote servers.
    1.97 +As with mail submission, the network connections required encryption and
    1.98 +authentication, thus TLS and SASL was added.
    1.99 +As POP3 becomes more and more superseded by IMAP, support for message
   1.100 +retrieval through IMAP will become necessary to be added soon, too.
   1.101 +Mmh has dropped the support for retrieving mail from remote locations.
   1.102 +.Ci ab7b48411962d26439f92f35ed084d3d6275459c
   1.103 +Instead, it depends on an external tool to cover this task.
   1.104 +There exist two paths for messages to enter mmh's mail storage:
   1.105 +They can be incorporate with
   1.106  .Pn inc
   1.107 -from the system maildrop, or with
   1.108 +from the system maildrop, or
   1.109  .Pn rcvstore
   1.110 -from the standard input.
   1.111 -In consequence, mmh has not any longer networking code
   1.112 -and thus does no more need to do transfer encryption and authentication.
   1.113 -Two large functional units are removed.
   1.114 +reads them from the standard input.
   1.115  .P
   1.116  With the removal of the MSA and MRA, mmh converted from an all-in-one
   1.117  mail system to being only a MUA.
   1.118 -Following the Unix philosophy, it focuses on one job and to do that well.
   1.119 +Following the Unix philosophy, it focuses on one job and
   1.120 +tries to do that one well.
   1.121 +Not only the programs follow that tenet but also the project itself does so.
   1.122  Now, of course, mmh depends on third-party software.
   1.123  An external MTA/MSA is required to transfer mail to the outside world;
   1.124  an external MRA is required to retrieve mail from remote machines.
   1.125  There exist excellent implementations of such software,
   1.126 -which do this specific task likely much better than the internal
   1.127 -versions of nmh do it. Also, this provides the choice for the best
   1.128 -suiting one of the available implementation.
   1.129 +which do this specific task likely better than the internal
   1.130 +versions had done it. Also, the best suiting programs can be freely chosen.
   1.131  .P
   1.132  As it had already been possible to use an external MSA or MRA,
   1.133  why not keep the internal version for convenience?
   1.134 -If this would question the sense in having a fall-back pager in all
   1.135 -the command line tools, in case
   1.136 +The question whether there is sense in having a fall-back pager in all
   1.137 +the command line tools, for the cases when
   1.138  .Pn more
   1.139  or
   1.140  .Pn less
   1.141 -wouldn't be available, the answer is intuitively seen.
   1.142 -Now, an MSA or MRA is clearly more complex than a text pager, but
   1.143 -still the concept holds: If programs become complex, split them;
   1.144 -if projects become complex, split them.
   1.145 -Complexity is demanded by the problem to solve. Decades ago,
   1.146 -emailing had been small and simple.
   1.147 -(Remember,
   1.148 +aren't available, appears to be ridiculous.
   1.149 +Now, an MSA or MRA is clearly more complex than a text pager,
   1.150 +and not necessarily available but still the concept holds:
   1.151 +design the system orthogonally.
   1.152 +If it is conceptionally more elegant to have the MTA to be a separate tool
   1.153 +\(en as the RFCs propose this split, this is likely the case \(en
   1.154 +then separate.
   1.155 +.P
   1.156 +Further more, if programs become complex, they should be split;
   1.157 +and if projects become complex, they should be split, too.
   1.158 +Essential complexity is defined by the problem.
   1.159 +Decades ago, emailing had been small and simple.
   1.160 +(\c
   1.161  .Pn /bin/mail
   1.162 -had once covered anything there was to email and still had been small.)
   1.163 -As the complexity in emailing increased, MH remainded mostly unchanged.
   1.164 -Nontheless, in nmh the POP server, which the original MH had included,
   1.165 -was removed. Now is the time to take one step further and remove
   1.166 -the MSA and MRA.
   1.167 +had once covered anything there was to email and still had been small
   1.168 +and simple.)
   1.169 +Then the essential complexity of email increased.
   1.170 +Email tools needed to react.
   1.171 +In nmh, for instance, the POP server, which the original MH had included,
   1.172 +was removed.
   1.173 +Now is the time to go one step further and remove the MSA and MRA.
   1.174  Not only does it decrease the code amount of the project,
   1.175  but more important, it removes the whole field of message transfer
   1.176 -with all its implications from the project.
   1.177 +with all its implications for the project.
   1.178 +It removes the need to adjust to any changes concerning network transfer.
   1.179 +This independence is received by depending on an external program
   1.180 +that covers the field.
   1.181 +Today, this is a reasonable exchange.
   1.182  .P
   1.183 -If a project needs some kind of function, there's always the choice
   1.184 -between implementing the the function in the project directly or
   1.185 -depending on a library that provides the function or depending on
   1.186 +To add some kind of function, there's always the choice
   1.187 +among implementing the function in the project directly,
   1.188 +depending on a library that provides the function, or depending on
   1.189  a program that provides the function.
   1.190  Whereas adding the function directly to the project increases the
   1.191 -code size most, it makes the project most independent.
   1.192 -On the other end, interfacing external programs keeps the interface
   1.193 -smallest, but the depencency highest.
   1.194 -Using a library is in the middle.
   1.195 -Adding the function directly to the project is a bad choice for
   1.196 -any function of higher complexity, unless it's not available in other ways.
   1.197 +code size most and requires most maintenance and development work,
   1.198 +it makes the project most independent.
   1.199 +Using libraries or external programs require less
   1.200 +maintenance work.
   1.201 +Programs have the smallest interfaces, providing the most separation
   1.202 +but possibly limiting the information exchange.
   1.203 +External libraries are stronger connected than external programs but 
   1.204 +allow better information exchange.
   1.205 +Adding more code to a project does always increase maintenance work.
   1.206 +Implementing complex functions directly in the project will add
   1.207 +a lot of code. This should be avoided if possible.
   1.208  Hence, the dependencies only change in kind, not in their existence.
   1.209  In mmh, library dependencies on
   1.210  .Pn libsasl2
   1.211 @@ -145,11 +167,12 @@
   1.212  This made mmh's code base about 12\|% smaller.
   1.213  Reducing the projects code size by such an amount without actually
   1.214  losing function is a convincing argument.
   1.215 +Actually, as external MSAs and MRAs are likely better
   1.216 +than the project's internal version, the user even gains functionality.
   1.217  .P
   1.218 -Users of MH should have not problem to set up an external MSA and MRA.
   1.219 +Users of MH should not have problems to set up an external MSA and MRA.
   1.220  Also, the popular MSAs and MRAs have large communities and a lot
   1.221  of documentation available.
   1.222 -.P
   1.223  Choices for MSAs range from the full-featured
   1.224  .I Postfix
   1.225  over mid-size solutions like
   1.226 @@ -170,25 +193,32 @@
   1.227  
   1.228  .H2 "Removal of non-MUA Tools
   1.229  .P
   1.230 -Some of nmh's tools were removed from mmh because they didn't
   1.231 -match the main focus of adding to the MUA's task.
   1.232 +Some MH tools were removed because they didn't add to the MUA's job.
   1.233 +It is a design goal of mmh to remove the parts that are rarely used.
   1.234 +The project shall become more stream-lined and focused.
   1.235 +Rarely used and loosely related tools distract from the lean appearance.
   1.236 +They require maintenance work without adding to the core task.
   1.237 +In mmh the following tools are not available anymore:
   1.238  .BU
   1.239  .Pn conflict
   1.240  was removed because it is a mail system maintenance tool.
   1.241 +.Ci 8b235097cbd11d728c07b966cf131aa7133ce5a9
   1.242  Besides, it even checks
   1.243  .Fn /etc/passwd
   1.244  and
   1.245  .Fn /etc/group
   1.246  for consistency, which has nothing at all to do with emailing.
   1.247  The tool might be useful, but it should not be shipped with mmh.
   1.248 +.\" XXX historic reasons?
   1.249  .BU
   1.250  .Pn rcvtty
   1.251  was removed because its usecase of writing to the user's terminal
   1.252 -on receiving of mail is hardly wanted today. If users like to be
   1.253 -informed of new mail, then using the shell's
   1.254 +on receiving of mail is obsolete.
   1.255 +.Ci 14767c94b3827be7c867196467ed7aea5f6f49b0
   1.256 +If users like to be
   1.257 +informed of new mail, the shell's
   1.258  .Ev MAILPATH
   1.259 -variable or graphical notifications are likely more
   1.260 -appealing.
   1.261 +variable or graphical notifications are more appealing.
   1.262  Writing directly to a terminals is hardly ever wanted today.
   1.263  If though one wants to have it this way, the standard tool
   1.264  .Pn write
   1.265 @@ -198,100 +228,139 @@
   1.266  .DE
   1.267  .BU
   1.268  .Pn viamail
   1.269 -was removed when the new attachment system was introduced, because
   1.270 +was removed when the new attachment system was activated, because
   1.271  .Pn forw
   1.272 -could can now the task itself.
   1.273 +could then cover the task itself.
   1.274 +.Ci eda72d6a7a7c20ff123043fb7f19c509ea01f932
   1.275  The program
   1.276  .Pn sendfiles
   1.277  was rewritten as a shell script wrapper around
   1.278  .Pn forw .
   1.279 +.Ci 0e82199cf3c991a173e0ac8aa776efdb3ded61e6
   1.280  .BU
   1.281  .Pn msgchk
   1.282 -was removed, because it lost its usefulness when POP support was removed.
   1.283 +was removed, because it lost its use case when POP support was removed.
   1.284 +.Ci bb9360ead7eb7a3fedcce2eeedfc660014e41dbe
   1.285 +A call to
   1.286  .Pn msgchk
   1.287 -provides hardly more information than:
   1.288 +provided hardly more information than
   1.289  .DS
   1.290  ls -l /var/mail/meillo
   1.291  .DE
   1.292 -It does separate between old and new mail, but that's merely a detail
   1.293 -and can be done with
   1.294 -.Pn stat (1)
   1.295 +though it distinguished between old and new mail.
   1.296 +This detail information and can be retrieved with
   1.297 +.Pn stat (1),
   1.298  too.
   1.299  A very small shell script could be written to output the information
   1.300 -in a convenient way, if truly necessary.
   1.301 -As mmh's inc only incorporates mail from the user's local maildrop
   1.302 +in a similar way, if truly necessary.
   1.303 +As mmh's
   1.304 +.Pn inc
   1.305 +only incorporates mail from the user's local maildrop
   1.306  and thus no data transfers over slow networks are involved,
   1.307 -there's hardly need to check for new mail before incorporating it.
   1.308 +there's hardly any need to check for new mail before incorporating it.
   1.309  .BU
   1.310  .Pn msh
   1.311 -was removed because the tool was in conflict with the
   1.312 -philosophy of MH. It provided an interactive shell to access the
   1.313 -features of MH. One major feature of MH is being a tool chest.
   1.314 -.Pn msh
   1.315 -wouldn't be just another shell, tailored to the needs of mail
   1.316 -handling, but one large program to have the MH tools built in.
   1.317 -It's main use was for accessing Bulletin Boards, which have seized to
   1.318 +was removed because the tool was in conflict with the philosophy of MH.
   1.319 +.Ci 916690191222433a6923a4be54b0d8f6ac01bd02
   1.320 +It provided an interactive shell to access the features of MH,
   1.321 +but it wasn't just a shell, tailored to the needs of mail handling.
   1.322 +Instead it was one large program that had several MH tools built in.
   1.323 +This conflicts with the major feature of MH of being a tool chest.
   1.324 +.Pn msh 's
   1.325 +main use case had been accessing Bulletin Boards, which have seized to
   1.326  be popular.
   1.327  .P
   1.328  Removing
   1.329  .Pn msh ,
   1.330 -together with the truly obsolete code relicts
   1.331 +together with the truly archaic code relicts
   1.332  .Pn vmh
   1.333  and
   1.334  .Pn wmh ,
   1.335  saved more than 7\|000 lines of C code \(en
   1.336  about 15\|% of the project's original source code amount.
   1.337 -Having the same functionality in less code (with equal readability,
   1.338 -of course) is an advantage.
   1.339 +.P
   1.340 +Having less code (with equal readability, of course)
   1.341 +for the same functionality is an advantage.
   1.342  Less code means less bugs and less maintenance work.
   1.343 -If
   1.344 +As
   1.345  .Pn rcvtty
   1.346  and
   1.347  .Pn msgchk
   1.348  are rarely used and can be implemented in different ways,
   1.349  then why should one keep them?
   1.350 +Removing them stream-lines mmh.
   1.351  .Pn viamail 's
   1.352  use case is now partly obsolete and partly covered by
   1.353  .Pn forw ,
   1.354 -hence there's no reason to still have
   1.355 -.Pn viamail
   1.356 -around.
   1.357 +hence there's no reason to still maintain it.
   1.358  .Pn conflict
   1.359 -is not related with the mail client, and
   1.360 +is not related to the mail client, and
   1.361  .Pn msh
   1.362  conflicts with the basic concept of MH.
   1.363 -Both tools could still be useful, but not as part of mmh.
   1.364 +Theses two tools might still be useful, but they should not be part of mmh.
   1.365  .P
   1.366 -It is a design goal of mmh to remove those parts that are rarely used.
   1.367 -The project shall become more stream-lined.
   1.368 -Rarely used and loosely related tools distract from the lean appearance.
   1.369 -They require maintenance cost without adding to the core task.
   1.370 -Therefore they were removed.
   1.371 +Finally, there's
   1.372 +.Pn slocal .
   1.373 +.Pn slocal
   1.374 +is an MDA and thus not directly MUA-related.
   1.375 +Conceptionally, it should be removed.
   1.376 +But
   1.377 +.Pn slocal
   1.378 +provides rule-based processing of messages, like filing them into
   1.379 +different folders, which is otherwise not available in mmh.
   1.380 +Further more,
   1.381 +.Pn slocal
   1.382 +does neither pull dependencies nor a whole new technical area
   1.383 +into the project.
   1.384 +(See section XXX for the removing of the ndbm dependency.)
   1.385 +Still,
   1.386 +.Pn slocal
   1.387 +accounts for about 1\|000 lines of code that need to be maintained.
   1.388 +As
   1.389 +.Pn slocal
   1.390 +is almost self-standing, it should be split off into a separate project.
   1.391 +This would cut the strong connection between the MUA mmh and the MDA
   1.392 +.Pn slocal .
   1.393 +The MDA would become an alternative to
   1.394 +.I procmail ,
   1.395 +as it would no longer be the need to install a complete MH system, too.
   1.396 +Likewise, mmh users could decide to use
   1.397 +.I procmail
   1.398 +without having a second, unused MDA (\c
   1.399 +.Pn slocal )
   1.400 +installed.
   1.401 +That's conceptionally the best solution.
   1.402 +Yet,
   1.403 +.Pn slocal
   1.404 +is not removed,
   1.405 +but as its existence does not affect the rest of mmh,
   1.406 +it can be removed at any time.
   1.407  
   1.408  
   1.409 -.H2 "Merge of \f(CWshow\fP and \f(CWmhshow\fP
   1.410 +.H2 "\fLshow\fP and \fPmhshow\fP
   1.411  .P
   1.412  Since the very beginning \(en already in the first concept paper \(en
   1.413  .Pn show
   1.414  had been MH's message display program.
   1.415  .Pn show
   1.416 -found out which pathnames the relevant messages had and invoked
   1.417 +mapped message numbers and sequences to files and invoked
   1.418  .Pn mhl
   1.419 -then to have the content formated.
   1.420 -With the advent of MIME, this approach wasn't sufficient anymore.
   1.421 +to have the files formated.
   1.422 +For MIME, this approach wasn't sufficient anymore.
   1.423  MIME messages can consist of multiple parts, some of which aren't
   1.424  directly displayable, and text content might be encoded in
   1.425  foreign charsets.
   1.426  .Pn show 's
   1.427 -simple approach and
   1.428 +understanding of messages and
   1.429  .Pn mhl 's
   1.430  limited display facilities couldn't cope with the task any longer.
   1.431  .P
   1.432 -Instead of extending these tools, additional ones were written from scratch
   1.433 +Instead of extending these tools, additional tools were written from scratch
   1.434  and then added to the MH tool chest. Doing so is encouraged by the
   1.435  tool chest approach. The new tools could be added without interfering
   1.436 -with the existing ones. This is great. The ease of adding new tools
   1.437 -even made MH the first MUA to implement MIME.
   1.438 +with the existing ones. This is an advantage. The ease of adding new tools
   1.439 +made MH the first MUA to implement MIME.
   1.440 +.\" XXX ref
   1.441  .P
   1.442  First, the new MIME features were added in form of the single program
   1.443  .Pn mhn .
   1.444 @@ -307,9 +376,13 @@
   1.445  which replaced the
   1.446  .Cl "mhn \-show
   1.447  call.
   1.448 +It was capable to display a MIME message appropriately.
   1.449  .P
   1.450 -From then on, two message display tools were part of nmh.
   1.451 -Because it should not require user actions to invoke the right tool
   1.452 +From then on, two message display tools were part of nmh:
   1.453 +.Pn show
   1.454 +and
   1.455 +.Pn mhshow .
   1.456 +Because the user should not need to invoke the right tool
   1.457  whether the message uses MIME or not,
   1.458  .Pn show
   1.459  was extended to automatically hand the job over to
   1.460 @@ -317,10 +390,6 @@
   1.461  if displaying the message would be beyond
   1.462  .Pn show 's
   1.463  abilities.
   1.464 -For convenience,
   1.465 -.Pn show
   1.466 -would still display MIME messages if they contained only a single text
   1.467 -part.
   1.468  In consequence, the user would invoke
   1.469  .Pn show
   1.470  (possibly through
   1.471 @@ -335,16 +404,20 @@
   1.472  (There was also a switch for
   1.473  .Pn show
   1.474  to never invoke
   1.475 -.Pn mhshow .)
   1.476 +.Pn mhshow .
   1.477 +.Pn show
   1.478 +was able to display MIME messages if they contained only a single text
   1.479 +part.)
   1.480  .P
   1.481  Having two similar tools for essentially the same task is redundant.
   1.482 -Both programs needed to be developed syncronously as they were
   1.483 -used as a single tool by the user. Thus they needed to act in a
   1.484 -similar way to not distract the user.
   1.485 +The development of both programs needed to be in sync,
   1.486 +to ensure that the programs behaved in a similar way,
   1.487 +because they were used like a single tool.
   1.488 +Different behavior would have surprised the user.
   1.489  .P
   1.490  Today, non-MIME messages are rather seen to be a special case of
   1.491  MIME messages, than MIME messages are seen to be an extension to
   1.492 -original mail.
   1.493 +original email.
   1.494  As
   1.495  .Pn mhshow
   1.496  had already be able to display non-MIME messages, it was natural
   1.497 @@ -353,24 +426,28 @@
   1.498  in favor of using
   1.499  .Pn mhshow
   1.500  exclusively.
   1.501 +This decision followed the idea of orthogonal design.
   1.502 +For convenience,
   1.503 +.Pn mhshow
   1.504 +was then renamed to
   1.505 +.Pn show .
   1.506  .Ci 4c1efddfd499300c7e74263e57d8aa137e84c853
   1.507 -This decision follows the idea of orthogonal design.
   1.508  .P
   1.509 -To allow this replacement,
   1.510 +To prepare for this transition,
   1.511  .Pn mhshow
   1.512  was reworked to behave more like
   1.513  .Pn show
   1.514  first.
   1.515 -Section XXX describes this rework from a different perspective.
   1.516 +(Section XXX describes this rework from a different perspective.)
   1.517  Once the tools behaved similar, the replacing became a natural decision.
   1.518  In mmh,
   1.519  .Pn show
   1.520  is the one single message display program again, but it handles
   1.521  MIME messages as well as non-MIME messages.
   1.522 -There's only one program to maintain and users don't need to deal
   1.523 +Now, there's only one program to maintain, and users don't need to deal
   1.524  with the existance of two display programs.
   1.525  .P
   1.526 -Though, there's one reason why removing the old
   1.527 +There's one reason why removing the old
   1.528  .Pn show
   1.529  hurts: It had been such a simple program.
   1.530  Its lean elegance is missing to
   1.531 @@ -383,24 +460,22 @@
   1.532  
   1.533  .H2 "Removal of Configure Options
   1.534  .P
   1.535 -Choice is a double-edged sword.
   1.536 -It allows customization and thus better suiting solutions,
   1.537 -but that comes with costs.
   1.538 -First, there is the cost of code complexity to have choice.
   1.539 -Second, there is the cost of less tested setups, because there are
   1.540 +Customization is a double-edged sword.
   1.541 +It allows better suiting setups, but not for free.
   1.542 +There is the cost of code complexity to be able to customize.
   1.543 +There is the cost of less tested setups, because there are
   1.544  more possible setups and especially corner-cases.
   1.545 -Third, there is the cost of choice itself.
   1.546 -The code complexity affects the developers.
   1.547 +And, there is the cost of choice itself.
   1.548 +The code complexity directly affects the developers.
   1.549  Less tested code affects both, users and developers.
   1.550 -The problem of choice affects the users, for once simply by having to
   1.551 -choose but also by complexer interfaces that require more documentation.
   1.552 +The problem of choice affects the users, for once by having to
   1.553 +choose, but also by complexer interfaces that require more documentation.
   1.554  Whenever options add little advantages, they should be considered for
   1.555  removal.
   1.556 -.P
   1.557  I have reduced the number of project-specific configure options from 
   1.558  fifteen to three.
   1.559  
   1.560 -.U3 "Mail Transfer Facility Options
   1.561 +.U3 "Mail Transfer Facilities
   1.562  .P
   1.563  With the removal of the mail transfer facilities five option vanished:
   1.564  .IP \f(CW--with-mts=[smtp|sendmail]\fP
   1.565 @@ -417,8 +492,9 @@
   1.566  
   1.567  .U3 "Backup Prefix
   1.568  .P
   1.569 -The default backup prefix, i.e. the string that was prepended to message
   1.570 -filenames to tag them as deleted, had been the comma `\f(CW,\fP'.
   1.571 +The backup prefix is the string that was prepended to message
   1.572 +filenames to tag them as deleted.
   1.573 +By default it had been the comma character `\f(CW,\fP'.
   1.574  There was a configure option to change the default to the hash symbol
   1.575  `\f(CW#\fP':
   1.576  .CW --with-hash-backup .
   1.577 @@ -439,31 +515,31 @@
   1.578  .Pe backup-prefix ,
   1.579  which allows to specify an arbitrary string as backup prefix.
   1.580  .Ci 6c40d481d661d532dd527eaf34cebb6d3f8ed086
   1.581 -This did not remove the choice but moved it to a location where
   1.582 +Profile entries are the common method to change mmh's behavior.
   1.583 +This change did not remove the choice but moved it to a location where
   1.584  it suited better.
   1.585 -Profile entries are the common method to change mmh's behavior.
   1.586 -The name of the
   1.587 -.Fn .mh-sequences ,
   1.588 -for instance, is specified there, too.
   1.589 -Moving the specification of the backup prefix there, appears to be right.
   1.590 -Eventually, the new trash folder obsoleted the concept of the
   1.591 +.P
   1.592 +Eventually, however, the new trash folder obsoleted the concept of the
   1.593  backup prefix completely.
   1.594  (Well, there still are corner-cases to remove until the backup
   1.595  prefix can be layed to rest, eventually.)
   1.596  .\" FIXME: Do this work in the code!
   1.597 +
   1.598 +.U3 "Editor and Pager
   1.599  .P
   1.600  The two configure options
   1.601  .CW --with-editor=EDITOR
   1.602  .CW --with-pager=PAGER
   1.603  were used to specify the default editor and pager at configure time.
   1.604  Doing so at configure time made sense in the Eighties,
   1.605 -when the available editors and pagers varied more across different systems.
   1.606 -Today, the situation is much more homegenic.
   1.607 +when the set of available editors and pagers varied much across
   1.608 +different systems.
   1.609 +Today, the situation is more homegeneic.
   1.610  The programs
   1.611  .Pn vi
   1.612  and
   1.613  .Pn more
   1.614 -can be expected to be available anywhere on every Unix system,
   1.615 +can be expected to be available on every Unix system,
   1.616  as they are specified by POSIX since two decades.
   1.617  (The specifications for
   1.618  .Pn vi
   1.619 @@ -484,14 +560,13 @@
   1.620  .Pe editor
   1.621  and
   1.622  .Pe moreproc
   1.623 -profile entries, which allowed the user to change the default
   1.624 -by personal preference.
   1.625 +profile entries, which allowed the user to override the system defaults.
   1.626  Later, the concept was reworked to respect the standard environment
   1.627  variables
   1.628  .Ev VISUAL
   1.629  and
   1.630  .Ev PAGER
   1.631 -if they were set.
   1.632 +if they are set.
   1.633  Today, mmh determines the editor to use in the following order,
   1.634  taking the first available and non-empty item:
   1.635  .IP (1)
   1.636 @@ -510,7 +585,9 @@
   1.637  Command
   1.638  .Pn vi .
   1.639  .P
   1.640 -The pager to use is deteminded in the following order,
   1.641 +.Ci f85f4b7ae62e3d05a945dcd46ead51f0a2a89a9b
   1.642 +.P
   1.643 +The pager to use is deteminded in a similar order,
   1.644  also taking the first available and non-empty item:
   1.645  .IP (1)
   1.646  Environment variable
   1.647 @@ -527,18 +604,16 @@
   1.648  Command
   1.649  .Pn more .
   1.650  .P
   1.651 -.Ci f85f4b7ae62e3d05a945dcd46ead51f0a2a89a9b
   1.652  .Ci 0c4214ea2aec6497d0d67b436bbee9bc1d225f1e
   1.653  .P
   1.654 -The new behavior confirms better to the common behavior on Unix
   1.655 -systems, as
   1.656 +By respecting the
   1.657  .Ev VISUAL /\c
   1.658  .Ev EDITOR
   1.659  and
   1.660  .Ev PAGER
   1.661 -are respected.
   1.662 -Additionally, the new approach is more uniform and
   1.663 -without surprise for users.
   1.664 +environment variables,
   1.665 +the new behavior confirms better to the common style on Unix systems.
   1.666 +Additionally, the new approach is more uniform and clearer to users.
   1.667  
   1.668  .U3 "Locale
   1.669  .P
   1.670 @@ -548,7 +623,7 @@
   1.671  support.
   1.672  .Ci ccf4f175ef4c4e7522f9510a4a1149c15d810dd9
   1.673  
   1.674 -.U3 "\fLslocal\fP Supress Duplicates
   1.675 +.U3 "ndbm
   1.676  .P
   1.677  .Pn slocal
   1.678  is an MDA included in mmh.
   1.679 @@ -559,11 +634,13 @@
   1.680  yet it remains being part of mmh.
   1.681  This is likely to change in the future.
   1.682  Already,
   1.683 -.Pn slocal was stripped down.
   1.684 +.Pn slocal
   1.685 +was stripped down.
   1.686  It used to depend on
   1.687  .I ndbm ,
   1.688  a database library.
   1.689 -The database is used to store the message ids of all messages delivered.
   1.690 +The database is used to store the `\fLMessage-ID\fP's of all
   1.691 +messages delivered.
   1.692  This enables
   1.693  .Pn slocal
   1.694  to suppress delivering the same message to the same user twice.
   1.695 @@ -582,6 +659,7 @@
   1.696  .P
   1.697  By removing the suppress duplicates feature of
   1.698  .Pn slocal ,
   1.699 +.Ci ecd6d6a20cb7a1507e3a20d6c4cb3a1cf14c6bbf
   1.700  the dependency on
   1.701  .I ndbm
   1.702  was removed and 120 lines of complex autoconf could be saved.
   1.703 @@ -596,46 +674,46 @@
   1.704  .Sw --disable-mhe
   1.705  was removed when the mh-e support was reworked. 
   1.706  Mh-e is the Emacs front-end to MH.
   1.707 -It requires MH to act different in some minor ways.
   1.708 -The configure option could switch the extension off.
   1.709 -After removing support for old versions of mh-e,
   1.710 +It requires MH to provide minor additional functions.
   1.711 +The
   1.712 +.Sw --disable-mhe
   1.713 +configure option could switch these extensions off.
   1.714 +After removing the support for old versions of mh-e,
   1.715  only the
   1.716  .Sw -build
   1.717 -switches for
   1.718 +switches of
   1.719  .Pn forw
   1.720  and
   1.721  .Pn repl
   1.722 -are left to be mh-e-specific.
   1.723 -They are now always available because they add little code and complexity.
   1.724 -This change was first done in nmh and thereafter merged into mmh.
   1.725 -The interface changes in mmh require mh-e to be adjusted to use mmh
   1.726 -as the back-end. This requires minor changes to mh-e, though removing
   1.727 -the
   1.728 -.Sw -build
   1.729 -switches would require larger adjustments.
   1.730 -The
   1.731 +are left to be mh-e extensions.
   1.732 +They are now always built in because they add little code and complexity.
   1.733 +In consequence, the
   1.734  .Sw --disable-mhe
   1.735 -configure option was removed and the remaining support for mh-e is always
   1.736 -built in.
   1.737 +configure option was removed
   1.738  .Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643
   1.739  Removing the option removed a second code setup that would have
   1.740  needed to be tested.
   1.741 +This change was first done in nmh and thereafter merged into mmh.
   1.742 +.P
   1.743 +The interface changes in mmh require mh-e to be adjusted in order
   1.744 +to be able to use mmh as back-end.
   1.745 +This will require minor changes to mh-e, but removing the
   1.746 +.Sw -build
   1.747 +switches would require more rework.
   1.748  
   1.749  .U3 "Masquerading
   1.750  .P
   1.751  The configure option
   1.752  .Sw --enable-masquerade
   1.753 -could take up to three items: draft_from, mmailid, username_extension.
   1.754 +could take up to three arguments:
   1.755 +`draft_from', `mmailid', and `username_extension'.
   1.756  They activated different types of address masquerading.
   1.757  All of them were implemented in the SMTP-speaking
   1.758  .Pn post
   1.759 -command.
   1.760 -Mmh no longer speaks SMTP and the replacing
   1.761 -.Pn spost
   1.762 -command no longer does MTA jobs like this one.
   1.763 -Because address masquerading is an MTA's task and mmh does not cover
   1.764 -this field anymore, the funtion needs to be implemented in the
   1.765 -external MTA used.
   1.766 +command, which provided an MSA.
   1.767 +Address masquerading is an MTA's task and mmh does not cover
   1.768 +this field anymore.
   1.769 +Hence, true masquerading needs to be implemented in the external MTA.
   1.770  .P
   1.771  The
   1.772  .I mmailid
   1.773 @@ -645,7 +723,7 @@
   1.774  .I username
   1.775  to
   1.776  .I fakeusername
   1.777 -mapping, based on the value of the password file's GECOS field.
   1.778 +mapping, based on the password file's GECOS field.
   1.779  The man page
   1.780  .Mp mh-tailor(5)
   1.781  described the use case as being the following:
   1.782 @@ -658,21 +736,21 @@
   1.783  ``First [Middle] Last <First.Last>''
   1.784  .P
   1.785  As mmh sends outgoing mail via the local MTA only,
   1.786 -it is the best location to do such global rewrites.
   1.787 +the best location to do such global rewrites is there.
   1.788  Besides, the MTA is conceptionally the right location because it
   1.789  does the reverse mapping for incoming mail (aliasing), too.
   1.790 -The masquerading set up there is set up once for all
   1.791 +Further more, masquerading set up there is readily available for all
   1.792  mail software on the system.
   1.793 +Hence, mmailid masquerading was removed.
   1.794  .Ci 0836c8000ccb34b59410ef1c15b1b7feac70ce5f
   1.795  .P
   1.796  The
   1.797  .I username_extension
   1.798 -masquerading type did not replace the username but could append a suffix
   1.799 -to it.
   1.800 -The suffix needed to be specified by the
   1.801 +masquerading type did not replace the username but would append a suffix,
   1.802 +specified by the
   1.803  .Ev USERNAME_EXTENSION
   1.804 -environment variable.
   1.805 -It provided support for the
   1.806 +environment variable, to it.
   1.807 +This provided support for the
   1.808  .I user-extension
   1.809  feature of qmail and the similar
   1.810  .I "plussed user
   1.811 @@ -680,31 +758,32 @@
   1.812  The decision to remove this username_extension masquerading was
   1.813  motivated by the fact that
   1.814  .Pn spost
   1.815 -hadn't supported it.
   1.816 -.Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9_username_extension
   1.817 -Mmh now provides a more general, though in this case less convenient,
   1.818 -kind of masquerading.
   1.819 +hadn't supported it already.
   1.820 +.Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9
   1.821 +Username extensions are possible in mmh, but less convenient to use.
   1.822 +.\" XXX format file %(getenv USERNAME_EXTENSION)
   1.823  .P
   1.824  The
   1.825  .I draft_from
   1.826  masquerading type instructed
   1.827  .Pn post
   1.828  to use the value of the `From:' header as SMTP envelope sender.
   1.829 -This allowes to replace the sender address completely.
   1.830 +Sender addresses could be replaced completely.
   1.831  .Ci b14ea6073f77b4359aaf3fddd0e105989db9
   1.832 -Mmh now offers a kind of masquerading similar in effect, but
   1.833 +Mmh offers a kind of masquerading similar in effect, but
   1.834  with technical differences.
   1.835 -As mmh does not transfer messages itself, the local MTA has full control
   1.836 -over the sending address. Any masquerading mmh introduces may be reverted
   1.837 -by the MTA. In times of pedantic spam checking, an MTA will likely do so
   1.838 -to keep its own reputation up.
   1.839 -Nonetheless, the MUA can set the `From:' header and thus propose
   1.840 -a sender address to be used to the MTA.
   1.841 +As mmh does not transfer messages itself, the local MTA has final control
   1.842 +over the sender's address. Any masquerading mmh introduces may be reverted
   1.843 +by the MTA.
   1.844 +In times of pedantic spam checking, an MTA will take care to use
   1.845 +sensible envelope sender addresses to keep its own reputation up.
   1.846 +Nonetheless, the MUA can set the `From:' header and thereby propose
   1.847 +a sender address to the MTA.
   1.848  The MTA may then decide to take that one or generate the canonical sender
   1.849  address for use as envelope sender address.
   1.850  .P
   1.851  In mmh, the MTA will always extract the recipient and sender from the
   1.852 -headers (\c
   1.853 +message headers (\c
   1.854  .Pn sendmail 's
   1.855  .Sw -t
   1.856  switch).
   1.857 @@ -716,10 +795,10 @@
   1.858  Two configure options remain in mmh.
   1.859  One is the locking method to use:
   1.860  .Sw --with-locking=[dot|fcntl|flock|lockf] .
   1.861 -Removing all other methods except the portable dot locking and having
   1.862 -that as default is appealing, but requires deeper investigation into the
   1.863 -topic.
   1.864 -The other,
   1.865 +The idea of removing all methods except the portable dot locking
   1.866 +and having that one as the default is appealing, but this change
   1.867 +requires deeper technical investigation into the topic.
   1.868 +The other option,
   1.869  .Sw --enable-debug ,
   1.870  compiles the programs with debugging symbols and does not strip them.
   1.871  This option is likely to stay.