comparison ch03.roff @ 100:6ae7dc4a3a02

Included changes proposed by Lydi.
author markus schnalke <meillo@marmaro.de>
date Tue, 19 Jun 2012 10:54:50 +0200
parents d894191d7a33
children e8e6adb14beb
comparison
equal deleted inserted replaced
99:468c2bdc6b1a 100:6ae7dc4a3a02
8 Current changes of nmh will be mentioned only as side notes. 8 Current changes of nmh will be mentioned only as side notes.
9 .\" XXX where do I discuss the parallel development of nmh? 9 .\" XXX where do I discuss the parallel development of nmh?
10 10
11 11
12 12
13 .H1 "Stream-lining 13 .H1 "Stream-Lining
14 14
15 .P 15 .P
16 MH had been considered an all-in-one system for mail handling. 16 MH had been considered an all-in-one system for mail handling.
17 The community around nmh has a similar understanding. 17 The community around nmh has a similar understanding.
18 In fundamental difference, mmh shall be a MUA only. 18 In fundamental difference, mmh shall be a MUA only.
27 I believe that it is best to use such specialized tools instead of 27 I believe that it is best to use such specialized tools instead of
28 providing the same function again as a side-component in the project. 28 providing the same function again as a side-component in the project.
29 .P 29 .P
30 Doing something well, requires to focus on a small set of specific aspects. 30 Doing something well, requires to focus on a small set of specific aspects.
31 Under the assumption that focused development produces better results 31 Under the assumption that focused development produces better results
32 in the particular area, specialized projects will likely be superior 32 in the particular area, specialized projects will be superior
33 in their field of focus. 33 in their field of focus.
34 Hence, all-in-one mail system projects \(en no matter if monolithic 34 Hence, all-in-one mail system projects \(en no matter if monolithic
35 or modular \(en will never be the best choice in any of the fields. 35 or modular \(en will never be the best choice in any of the fields.
36 Even in providing the best consistent all-in-one system they are likely 36 Even in providing the best consistent all-in-one system they are likely
37 to be beaten by projects that focus only on integrating existing mail 37 to be beaten by projects that focus only on integrating existing mail
45 The concrete situation for MH-based mail systems is even tougher, 45 The concrete situation for MH-based mail systems is even tougher,
46 given the small and aged community, including both developers and users, 46 given the small and aged community, including both developers and users,
47 it has. 47 it has.
48 .P 48 .P
49 In consequence, I believe that the available development resources 49 In consequence, I believe that the available development resources
50 should be focused on the point where MH is most unique. 50 should focus on the point where MH is most unique.
51 This is clearly the user interface \(en the MUA. 51 This is clearly the user interface \(en the MUA.
52 Peripheral parts should be removed to stream-line mmh for the MUA task. 52 Peripheral parts should be removed to stream-line mmh for the MUA task.
53 53
54 54
55 .H2 "Removal of the Mail Transfer Facilities 55 .H2 "Mail Transfer Facilities
56 .P 56 .P
57 In contrast to nmh, which also provides mail submission and mail retrieval 57 In contrast to nmh, which also provides mail submission and mail retrieval
58 agents, mmh is a MUA only. 58 agents, mmh is a MUA only.
59 This general difference in the view on the character of nmh 59 This general difference initiated the development of mmh.
60 initiated the development of mmh.
61 Removing the mail transfer facilities had been the first work task 60 Removing the mail transfer facilities had been the first work task
62 in the mmh project. 61 in the mmh project.
63 .P 62 .P
64 The MSA is called \fIMessage Transfer Service\fP (MTS) in nmh. 63 The Mail Submission Agent (MSA) is called
64 \fIMessage Transfer Service\fP (MTS) in nmh.
65 The facility established network connections and spoke SMTP to submit 65 The facility established network connections and spoke SMTP to submit
66 messages for relay to the outside world. 66 messages for relay to the outside world.
67 This part was implemented by the 67 This part was implemented by the
68 .Pn post 68 .Pn post
69 command. 69 command.
93 exec qmail-inject 93 exec qmail-inject
94 VE 94 VE
95 The requirement to parse the recipient addresses out of the message header 95 The requirement to parse the recipient addresses out of the message header
96 is likely to be removed in the future. 96 is likely to be removed in the future.
97 Then mmh would give the recipient addresses as command line arguments. 97 Then mmh would give the recipient addresses as command line arguments.
98 This is clearly the better interface, but mmh does not provide it yet. 98 This appears to be the better interface.
99 .\" XXX implement it 99 .\" XXX implement it
100 .P 100 .P
101 To retrieve mail, the 101 To retrieve mail, the
102 .Pn inc 102 .Pn inc
103 command established network connections 103 command acted as Mail Retrieval Agent (MRA).
104 It established network connections
104 and spoke POP3 to retrieve mail from remote servers. 105 and spoke POP3 to retrieve mail from remote servers.
105 As with mail submission, the network connections required encryption and 106 As with mail submission, the network connections required encryption and
106 authentication, thus TLS and SASL were added. 107 authentication, thus TLS and SASL were added.
107 Support for message retrieval through IMAP will become necessary 108 Support for message retrieval through IMAP will become necessary
108 to be added soon, too, and so on for any changes in mail transfer. 109 to be added soon, too, and likewise for any other changes in mail transfer.
109 Mmh has dropped the support for retrieving mail from remote locations. 110 Not so for mmh because it has dropped the support for retrieving mail
111 from remote locations.
110 .Ci ab7b48411962d26439f92f35ed084d3d6275459c 112 .Ci ab7b48411962d26439f92f35ed084d3d6275459c
111 Instead, it depends on an external tool to cover this task. 113 Instead, it depends on an external tool to cover this task.
112 In mmh there exist two paths for messages to enter mmh's mail storage: 114 In mmh exist two paths for messages to enter mmh's mail storage:
113 (1) Mail can be incorporate with 115 (1) Mail can be incorporated with
114 .Pn inc 116 .Pn inc
115 from the system maildrop, or (2) with 117 from the system maildrop, or (2) with
116 .Pn rcvstore 118 .Pn rcvstore
117 by reading them, one at a time, from the standard input. 119 by reading them, one at a time, from the standard input.
118 .P 120 .P
119 With the removal of the MSA and MRA, mmh converted from an all-in-one 121 With the removal of the MSA and MRA, mmh converted from an all-in-one
120 mail system to being a MUA only. 122 mail system to being a MUA only.
121 Following the Unix philosophy, it now focuses on one job and
122 tries to do that one well.
123 Not only the programs follow that tenet but also the project itself does so.
124 Now, of course, mmh depends on third-party software. 123 Now, of course, mmh depends on third-party software.
125 An external MSA is required to transfer mail to the outside world; 124 An external MSA is required to transfer mail to the outside world;
126 an external MRA is required to retrieve mail from remote machines. 125 an external MRA is required to retrieve mail from remote machines.
127 There exist excellent implementations of such software, 126 There exist excellent implementations of such software,
128 which do this specific task likely better than the internal 127 which do this specific task likely better than the internal
135 the command line tools, for the cases when 134 the command line tools, for the cases when
136 .Pn more 135 .Pn more
137 or 136 or
138 .Pn less 137 .Pn less
139 aren't available, appears to be ridiculous. 138 aren't available, appears to be ridiculous.
140 Now, an MSA or MRA is more complex than a text pager 139 Of course, MSAs and MRAs are more complex than text pagers
141 and not necessarily available but still the concept of orthogonal 140 and not necessarily available but still the concept of orthogonal
142 design holds: ``Write programs that do one thing and do it well.'' 141 design holds: ``Write programs that do one thing and do it well.''
143 .[ 142 .[
144 mcilroy unix phil 143 mcilroy unix phil
145 p. 53 144 p. 53
151 to the programs but to the project itself. 150 to the programs but to the project itself.
152 In other words: 151 In other words:
153 ``Develop projects that focus on one thing and do it well.'' 152 ``Develop projects that focus on one thing and do it well.''
154 Projects grown complex should be split for the same reasons programs grown 153 Projects grown complex should be split for the same reasons programs grown
155 complex should be split. 154 complex should be split.
156 If it is conceptionally more elegant to have the MSA and MRA 155 If it is conceptionally more elegant to have the MSA and MRA as
157 separate projects then they should be separated. 156 separate projects then they should be separated.
158 This is the case here, in my opinion. 157 This is the case here, in my opinion.
159 The RFCs propose this separation by clearly distinguishing the different 158 The RFCs propose this separation by clearly distinguishing the different
160 mail handling tasks. 159 mail handling tasks.
161 .[ 160 .[
162 rfc 821 161 rfc 821
163 .] 162 .]
164 The small interfaces between the mail agents support the separation. 163 The small interfaces between the mail agents support the separation.
165 .P 164 .P
166 In the beginning, email had been small and simple. 165 In the beginning, email had been small and simple.
167 (\c 166 At that time,
168 .Pn /bin/mail 167 .Pn /bin/mail
169 had once covered anything there was to email and still had been small 168 had covered anything there was to email and still had been small
170 and simple.) 169 and simple.
171 Then the essential complexity of email increased. 170 Later, the essential complexity of email increased.
172 (Essential complexity is the complexity defined by the problem itself.\0 171 (Essential complexity is the complexity defined by the problem itself.\0
173 .[[ 172 .[[
174 brooks no silver bullet 173 brooks no silver bullet
175 .]]) 174 .]])
176 Email systems reacted to this change: They grew. 175 Email systems reacted to this change: They grew.
177 RFCs started to introduce mail agents and separated the various tasks 176 RFCs started to introduce the concept of mail agents to separate the
178 because the existing tasks became more extensive and new tasks appeared. 177 various tasks because they became more extensive and new tasks appeared.
179 Again, email systems grew, or they split parts off. 178 As the mail systems grew even more, parts were split off.
180 In nmh, for instance, the POP server, which the original MH had included, 179 In nmh, for instance, the POP server, which was included in the original
181 was removed. 180 MH, was removed.
182 Now is the time to go one step further and remove the MSA and MRA, too. 181 Now is the time to go one step further and split the MSA and MRA off, too.
183 Not only does this decrease the code size of the project, 182 Not only does this decrease the code size of the project,
184 but, more important, it unburdens mmh of the whole field of 183 but, more important, it unburdens mmh of the whole field of
185 message transfer with all its implications for the project. 184 message transfer with all its implications for the project.
186 There's no more need to concern with changes in network transfer. 185 There is no more need to concern with changes in network transfer.
187 This independence is received by depending on an external program 186 This independence is received by depending on an external program
188 that covers the field. 187 that covers the field.
189 Today, this is a reasonable exchange. 188 Today, this is a reasonable exchange.
190 .P 189 .P
191 Function can be added in three different ways: 190 Functionality can be added in three different ways:
192 .BU 191 .BU
193 Implementing the function originally in the project. 192 Implementing the function originally in the project.
194 .BU 193 .BU
195 Depending on a library that provides the function. 194 Depending on a library that provides the function.
196 .BU 195 .BU
205 but possibly limit the information exchange. 204 but possibly limit the information exchange.
206 External libraries are stronger connected than external programs, 205 External libraries are stronger connected than external programs,
207 thus information can be exchanged more flexible. 206 thus information can be exchanged more flexible.
208 Adding code to a project increases maintenance work. 207 Adding code to a project increases maintenance work.
209 .\" XXX ref 208 .\" XXX ref
210 Implementing complex functions originally in the project will add 209 Implementing complex functions originally in the project adds
211 a lot of code. 210 a lot of code.
212 This should be avoided if possible. 211 This should be avoided if possible.
213 Hence, the dependencies only change in kind, not in their existence. 212 Hence, the dependencies only change in kind, not in their existence.
214 In mmh, library dependencies on 213 In mmh, library dependencies on
215 .Pn libsasl2 214 .Pn libsasl2
247 .I mpop 246 .I mpop
248 and 247 and
249 .I fdm . 248 .I fdm .
250 249
251 250
252 .H2 "Removal of non-MUA Tools 251 .H2 "Non-MUA Tools
253 .P 252 .P
254 One goal of mmh is to remove the tools that are not part of the MUA's task. 253 One goal of mmh is to remove the tools that are not part of the MUA's task.
255 Further more, any tools that don't improve the MUA's job significantly 254 Further more, any tools that don't improve the MUA's job significantly
256 should be removed. 255 should be removed.
257 Loosely related and rarely used tools distract from the lean appearance. 256 Loosely related and rarely used tools distract from the lean appearance.
258 They require maintenance work without adding much to the core task. 257 They require maintenance work without adding much to the core task.
259 On removing these tools, the project shall become more stream-lined 258 By removing these tools, the project shall become more stream-lined
260 and focused. 259 and focused.
261 In mmh the following tools are not available anymore: 260 In mmh the following tools are not available anymore:
262 .BU 261 .BU
263 .Pn conflict 262 .Pn conflict
264 was removed 263 was removed
280 because its use case of writing to the user's terminal 279 because its use case of writing to the user's terminal
281 on receiving of mail is obsolete. 280 on receiving of mail is obsolete.
282 If users like to be informed of new mail, the shell's 281 If users like to be informed of new mail, the shell's
283 .Ev MAILPATH 282 .Ev MAILPATH
284 variable or graphical notifications are technically more appealing. 283 variable or graphical notifications are technically more appealing.
285 Writing directly to a terminals is hardly ever wanted today. 284 Writing directly to terminals is hardly ever wanted today.
286 If though one wants to have it this way, the standard tool 285 If though one wants to have it this way, the standard tool
287 .Pn write 286 .Pn write
288 can be used in a way similar to: 287 can be used in a way similar to:
289 .VS 288 .VS
290 scan -file - | write `id -un` 289 scan -file - | write `id -un`
310 .Pn msgchk 309 .Pn msgchk
311 provided hardly more information than: 310 provided hardly more information than:
312 .VS 311 .VS
313 ls -l /var/mail/meillo 312 ls -l /var/mail/meillo
314 VE 313 VE
315 It did distinguished between old and new mail, but 314 It did distinguish between old and new mail, but
316 this detail information and can be retrieved with 315 this detail information can be retrieved with
317 .Pn stat (1), 316 .Pn stat (1),
318 too. 317 too.
319 A very small shell script could be written to output the information 318 A small shell script could be written to print the information
320 in a similar way, if truly necessary. 319 in a similar way, if truly necessary.
321 As mmh's 320 As mmh's
322 .Pn inc 321 .Pn inc
323 only incorporates mail from the user's local maildrop, 322 only incorporates mail from the user's local maildrop,
324 and thus no data transfers over slow networks are involved, 323 and thus no data transfers over slow networks are involved,
342 .Pn vmh 341 .Pn vmh
343 and 342 and
344 .Pn wmh , 343 .Pn wmh ,
345 saved more than 7\|000 lines of C code \(en 344 saved more than 7\|000 lines of C code \(en
346 about 15\|% of the project's original source code amount. 345 about 15\|% of the project's original source code amount.
347 .P 346 Having less code \(en with equal readability, of course \(en
348 Having less code (with equal readability, of course)
349 for the same functionality is an advantage. 347 for the same functionality is an advantage.
350 Less code means less bugs and less maintenance work. 348 Less code means less bugs and less maintenance work.
351 As 349 As
352 .Pn rcvtty 350 .Pn rcvtty
353 and 351 and
367 .P 365 .P
368 Finally, there's 366 Finally, there's
369 .Pn slocal . 367 .Pn slocal .
370 .Pn slocal 368 .Pn slocal
371 is an MDA and thus not directly MUA-related. 369 is an MDA and thus not directly MUA-related.
372 It should be removed, because including it is a violation 370 It should be removed from mmh, because including it conflicts with
373 of the idea that mmh is a MUA only. 371 the idea that mmh is a MUA only.
374 It should become a separate project. 372 .Pn slocal
373 should rather become a separate project.
375 However, 374 However,
376 .Pn slocal 375 .Pn slocal
377 provides rule-based processing of messages, like filing them into 376 provides rule-based processing of messages, like filing them into
378 different folders, which is otherwise not available in mmh. 377 different folders, which is otherwise not available in mmh.
379 Although 378 Although
380 .Pn slocal 379 .Pn slocal
381 does neither pull in dependencies nor does it include a separate 380 does neither pull in dependencies nor does it include a separate
382 technical area (cf. Sec. XXX), 381 technical area (cf. Sec. XXX), still,
383 still it accounts for about 1\|000 lines of code that need to be maintained. 382 it accounts for about 1\|000 lines of code that need to be maintained.
384 As 383 As
385 .Pn slocal 384 .Pn slocal
386 is almost self-standing, it should be split off into a separate project. 385 is almost self-standing, it should be split off into a separate project.
387 This would cut the strong connection between the MUA mmh and the MDA 386 This would cut the strong connection between the MUA mmh and the MDA
388 .Pn slocal . 387 .Pn slocal .
389 For anyone not using MH, 388 For anyone not using MH,
390 .Pn slocal 389 .Pn slocal
391 would become yet another independent MDA, like 390 would become yet another independent MDA, like
392 .I procmail . 391 .I procmail .
393 The need to install a complete MH system to have 392 Then
394 .Pn slocal 393 .Pn slocal
395 would be gone. 394 could be installed without the complete MH system.
396 Likewise, mmh users could decide to use 395 Likewise, mmh users could decide to use
397 .I procmail 396 .I procmail
398 without having a second, unused MDA, 397 without having a second, unused MDA,
399 .Pn slocal , 398 .Pn slocal ,
400 installed. 399 installed.
401 That's conceptionally the best solution. 400 That appears to be conceptionally the best solution.
402 Yet, 401 Yet,
403 .Pn slocal 402 .Pn slocal
404 is not split off. 403 is not split off.
405 I feel unsure with removing it from mmh. 404 I defer the decision over
406 Hence, I defer the decision over
407 .Pn slocal .
408 In the meanwhile
409 .Pn slocal 405 .Pn slocal
410 does not hurt because it is unrelated to the rest of mmh. 406 in need for deeper investigation.
407 In the meanwhile, it remains part of mmh.
408 That does not hurt because
409 .Pn slocal
410 is unrelated to the rest of the project.
411 411
412 412
413 .H2 "\fLshow\fP and \fPmhshow\fP 413 .H2 "\fLshow\fP and \fPmhshow\fP
414 .P 414 .P
415 Since the very beginning \(en already in the first concept paper \(en 415 Since the very beginning \(en already in the first concept paper \(en
418 .Pn show 418 .Pn show
419 mapped message numbers and sequences to files and invoked 419 mapped message numbers and sequences to files and invoked
420 .Pn mhl 420 .Pn mhl
421 to have the files formatted. 421 to have the files formatted.
422 With MIME, this approach wasn't sufficient anymore. 422 With MIME, this approach wasn't sufficient anymore.
423 MIME messages can consist of multiple parts, some of which aren't 423 MIME messages can consist of multiple parts. Some parts are not
424 directly displayable, further more text content might be encoded in 424 directly displayable and text content might be encoded in
425 foreign charsets. 425 foreign charsets.
426 .Pn show 's 426 .Pn show 's
427 understanding of messages and 427 understanding of messages and
428 .Pn mhl 's 428 .Pn mhl 's
429 display capabilities couldn't cope with the task any longer. 429 display capabilities couldn't cope with the task any longer.
485 to ensure that the programs behaved in a similar way, 485 to ensure that the programs behaved in a similar way,
486 because they were used like a single tool. 486 because they were used like a single tool.
487 Different behavior would have surprised the user. 487 Different behavior would have surprised the user.
488 .P 488 .P
489 Today, non-MIME messages are rather seen to be a special case of 489 Today, non-MIME messages are rather seen to be a special case of
490 MIME messages, although it's the other way round. 490 MIME messages, although it is the other way round.
491 As 491 As
492 .Pn mhshow 492 .Pn mhshow
493 had already be able to display non-MIME messages, it appeared natural 493 had already be able to display non-MIME messages, it appeared natural
494 to drop 494 to drop
495 .Pn show 495 .Pn show
547 .Pn show . 547 .Pn show .
548 But there is no chance; 548 But there is no chance;
549 supporting MIME demands for higher essential complexity. 549 supporting MIME demands for higher essential complexity.
550 550
551 551
552 .H2 "Removal of Configure Options 552 .H2 "Configure Options
553 .P 553 .P
554 Customization is a double-edged sword. 554 Customization is a double-edged sword.
555 It allows better suiting setups, but not for free. 555 It allows better suiting setups, but not for free.
556 There is the cost of code complexity to be able to customize. 556 There is the cost of code complexity to be able to customize.
557 There is the cost of less tested setups, because there are 557 There is the cost of less tested setups, because there are
558 more possible setups and especially corner-cases. 558 more possible setups and especially corner-cases.
559 And, there is the cost of choice itself. 559 And, there is the cost of choice itself.
560 The code complexity directly affects the developers. 560 The code complexity directly affects the developers.
561 Less tested code affects both, users and developers. 561 Less tested code affects both, users and developers.
562 The problem of choice affects the users, for once by having to 562 The problem of choice affects the users, for once by having to
563 choose, but also by complexer interfaces that require more documentation. 563 choose, but also by more complex interfaces that require more documentation.
564 Whenever options add little advantages, they should be considered for 564 Whenever options add little advantages, they should be considered for
565 removal. 565 removal.
566 I have reduced the number of project-specific configure options from 566 I have reduced the number of project-specific configure options from
567 fifteen to three. 567 fifteen to three.
568 568
596 Still, conditional compilation of a code base creates variations 596 Still, conditional compilation of a code base creates variations
597 of the original program. 597 of the original program.
598 More variations require more testing and maintenance work. 598 More variations require more testing and maintenance work.
599 .P 599 .P
600 Two other options only specified default configuration values: 600 Two other options only specified default configuration values:
601 .Sw --with-mts=[smtp|sendmail] 601 .Sw --with-mts
602 defined the default transport service. 602 defined the default transport service, either
603 .Ar smtp
604 or
605 .Ar sendmail .
603 In mmh this fixed to 606 In mmh this fixed to
604 .Ar sendmail . 607 .Ar sendmail .
605 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 608 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
606 With 609 With
607 .Sw --with-smtpservers=[server1...] 610 .Sw --with-smtpservers
608 default SMTP servers for the 611 default SMTP servers for the
609 .Ar smtp 612 .Ar smtp
610 transport service could be specified. 613 transport service could be specified.
611 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9 614 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9
612 Both of them became irrelevant. 615 Both of them became irrelevant.
622 to change the default to the hash symbol `\f(CW#\fP'. 625 to change the default to the hash symbol `\f(CW#\fP'.
623 The choice was probably personal preference, because first, the 626 The choice was probably personal preference, because first, the
624 option was named 627 option was named
625 .Sw --with-backup-prefix. 628 .Sw --with-backup-prefix.
626 and had the prefix symbol as argument. 629 and had the prefix symbol as argument.
627 Because giving the hash symbol as argument caused to many problems 630 But giving the hash symbol as argument caused too many problems
628 for configure, 631 for Autoconf,
629 the option was limited to use the hash symbol as the default prefix. 632 thus the option was limited to use the hash symbol as the default prefix.
630 This makes me believe, that the choice for the hash was personal preference. 633 This supports the assumption, that the choice for the hash was
631 Being it related or not, words that start with the hash symbol 634 personal preference only.
635 Being related or not, words that start with the hash symbol
632 introduce a comment in the Unix shell. 636 introduce a comment in the Unix shell.
633 Thus, the command line 637 Thus, the command line
634 .Cl "rm #13 #15 638 .Cl "rm #13 #15
635 calls 639 calls
636 .Pn rm 640 .Pn rm
637 without arguments because the first hash symbol starts the comment 641 without arguments because the first hash symbol starts the comment
638 that reaches until the end of the line. 642 that reaches until the end of the line.
639 To delete the backup files, 643 To delete the backup files,
640 .Cl "rm ./#13 ./#15" 644 .Cl "rm ./#13 ./#15"
641 needs to be used. 645 needs to be used.
642 Using the hash as backup prefix can be seen as a precaution agains 646 Using the hash as backup prefix can be seen as a precaution against
643 data loss. 647 data loss.
644 .P 648 .P
645 I removed the configure option but added the profile entry 649 I removed the configure option but added the profile entry
646 .Pe backup-prefix , 650 .Pe backup-prefix ,
647 which allows to specify an arbitrary string as backup prefix. 651 which allows to specify an arbitrary string as backup prefix.
652 .P 656 .P
653 Eventually, however, the new trash folder concept 657 Eventually, however, the new trash folder concept
654 .Cf "Sec. XXX 658 .Cf "Sec. XXX
655 obsoleted the concept of the backup prefix completely. 659 obsoleted the concept of the backup prefix completely.
656 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173 660 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173
657 (Well, there still are corner-cases to remove until the backup 661 .\" (Well, there still are corner-cases to remove until the backup
658 prefix can be laid to rest, eventually.) 662 .\" prefix can be laid to rest, eventually.)
659 .\" FIXME: Do this work in the code! 663 .\" FIXME: Do this work in the code!
660 664
661 .U3 "Editor and Pager 665 .U3 "Editor and Pager
662 .P 666 .P
663 The two configure options 667 The two configure options
746 .Ev PAGER 750 .Ev PAGER
747 environment variables, 751 environment variables,
748 the new behavior confirms better to the common style on Unix systems. 752 the new behavior confirms better to the common style on Unix systems.
749 Additionally, the new approach is more uniform and clearer to users. 753 Additionally, the new approach is more uniform and clearer to users.
750 754
751 .U3 "Locale
752 .P
753 The configure option
754 .Sw --disable-locale
755 was removed because POSIX provides locale support and there's
756 hardly any need to disable locale support.
757 .Ci ccf4f175ef4c4e7522f9510a4a1149c15d810dd9
758 755
759 .U3 "ndbm 756 .U3 "ndbm
760 .P 757 .P
761 .Pn slocal 758 .Pn slocal
762 used to depend on 759 used to depend on
769 to suppress delivering the same message to the same user twice. 766 to suppress delivering the same message to the same user twice.
770 (This features was enabled by the 767 (This features was enabled by the
771 .Sw -suppressdup 768 .Sw -suppressdup
772 switch.) 769 switch.)
773 .P 770 .P
774 A variety of version of the database library exist. 771 A variety of versions of the database library exist.
775 .[ 772 .[
776 wolter unix incompat notes dbm 773 wolter unix incompat notes dbm
777 .] 774 .]
778 Complicated autoconf code was needed to detect them correctly. 775 Complicated autoconf code was needed to detect them correctly.
779 Further more, the configure switches 776 Further more, the configure switches
935 This option is likely to stay. 932 This option is likely to stay.
936 933
937 934
938 935
939 936
940 .H2 "Removal of Switches 937 .H2 "Command Line Switches
941 .P 938 .P
942 The command line switches of MH tools follow the X Window style. 939 The command line switches of MH tools follow the X Window style.
943 They are words, introduced by a single dash. 940 They are words, introduced by a single dash.
944 For example: 941 For example:
945 .Cl "-truncate" . 942 .Cl "-truncate" .
1019 .P 1016 .P
1020 Fig. XXX 1017 Fig. XXX
1021 .\" XXX Ref 1018 .\" XXX Ref
1022 displays the number of switches for each of the tools that is available 1019 displays the number of switches for each of the tools that is available
1023 in both, nmh and mmh. 1020 in both, nmh and mmh.
1024 Visible as well as hidden switches were counted, 1021 The tools are sorted by the number of switches they had in nmh.
1022 Visible and hidden switches were counted,
1025 but not the generic help and version switches. 1023 but not the generic help and version switches.
1026 Whereas in the beginning of the project, the average tool had 11 switches, 1024 Whereas in the beginning of the project, the average tool had 11 switches,
1027 now it has no more than 5 \(en only half as many. 1025 now it has no more than 5 \(en only half as many.
1028 If the `no' switches and similar inverse variant are folded onto 1026 If the `no' switches and similar inverse variant are folded onto
1029 their counter-parts, the average tool has 8 switches in pre-mmh to 4 now. 1027 their counter-parts, the average tool had 8 switches in pre-mmh times and
1028 has 4 now.
1030 The total number of functional switches in mmh dropped from 465 1029 The total number of functional switches in mmh dropped from 465
1031 to 234. 1030 to 234.
1032 1031
1033 .KS 1032 .KS
1034 .in 1c 1033 .in 1c
1048 the number of switches per command. 1047 the number of switches per command.
1049 1048
1050 1049
1051 .U3 "Draft Folder Facility 1050 .U3 "Draft Folder Facility
1052 .P 1051 .P
1053 A change early in the project was the completely transition from 1052 A change early in the project was the complete transition from
1054 the single draft message to the draft folder facility. 1053 the single draft message to the draft folder facility.
1055 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 1054 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860
1056 The draft folder facility was introduced in the mid-Eighties. 1055 The draft folder facility was introduced in the mid-Eighties, when
1057 (Rose and Romine called it a ``relatively new feature'' 1056 Rose and Romine called it a ``relatively new feature''.
1058 .[ 1057 .[
1059 rose romine real work 1058 rose romine real work
1060 .] 1059 .]
1061 in 1985.)
1062 Since then, the facility had existed but was deactivated by default. 1060 Since then, the facility had existed but was deactivated by default.
1063 The default activation and the related rework of the tools made it 1061 The default activation and the related rework of the tools made it
1064 possible to remove the 1062 possible to remove the
1065 .Sw -[no]draftfolder , 1063 .Sw -[no]draftfolder ,
1066 and 1064 and
1101 .U3 "Inplace Editing 1099 .U3 "Inplace Editing
1102 .P 1100 .P
1103 .Pn anno 1101 .Pn anno
1104 had the switches 1102 had the switches
1105 .Sw -[no]inplace 1103 .Sw -[no]inplace
1106 to either annotate the message inplace and thus preserve hard links, 1104 to either annotate the message in place and thus preserve hard links,
1107 or annotate a copy to replace the original message, breaking hard links. 1105 or annotate a copy to replace the original message, breaking hard links.
1108 Following the assumption that linked messages should truly be the 1106 Following the assumption that linked messages should truly be the
1109 same message, and annotating it should not break the link, the 1107 same message, and annotating it should not break the link, the
1110 .Sw -[no]inplace 1108 .Sw -[no]inplace
1111 switches were removed and the previous default 1109 switches were removed and the previous default
1225 1223
1226 1224
1227 .U3 "MIME Tools 1225 .U3 "MIME Tools
1228 .P 1226 .P
1229 The MIME tools, which were once part of 1227 The MIME tools, which were once part of
1230 .Pn mhn , 1228 .Pn mhn
1229 [sic!],
1231 had several switches that added little practical value to the programs. 1230 had several switches that added little practical value to the programs.
1232 The 1231 The
1233 .Sw -[no]realsize 1232 .Sw -[no]realsize
1234 switches of 1233 switches of
1235 .Pn mhbuild 1234 .Pn mhbuild
1447 1446
1448 .U3 "Suppressing Edits or the WhatNow Shell 1447 .U3 "Suppressing Edits or the WhatNow Shell
1449 .P 1448 .P
1450 The 1449 The
1451 .Sw -noedit 1450 .Sw -noedit
1452 switches of 1451 switch of
1453 .Pn comp , 1452 .Pn comp ,
1454 .Pn repl , 1453 .Pn repl ,
1455 .Pn forw , 1454 .Pn forw ,
1456 .Pn dist , 1455 .Pn dist ,
1457 and 1456 and
1482 occurring.) 1481 occurring.)
1483 .QE 1482 .QE
1484 .P 1483 .P
1485 Effectively, the 1484 Effectively, the
1486 .Sw -nowhatnowproc 1485 .Sw -nowhatnowproc
1487 switch stored a copy of the form file into the draft folder. 1486 switch creates only a draft message.
1488 As 1487 As
1489 .Cl "-whatnowproc true 1488 .Cl "-whatnowproc true
1490 causes the same behavior, the 1489 causes the same behavior, the
1491 .Sw -nowhatnowproc 1490 .Sw -nowhatnowproc
1492 switch was removed for being redundant. 1491 switch was removed for being redundant.
1493 Likely, however, the intention for specifying 1492 Likely, the
1494 .Sw -nowhatnowproc 1493 .Sw -nowhatnowproc
1495 is sending a fully prepared form file at once. 1494 switch was intended to be used by front-ends.
1496 This can be done with
1497 .Cl "-whatnowproc send" .
1498 1495
1499 1496
1500 .U3 "Compatibility Switches 1497 .U3 "Compatibility Switches
1501 .BU 1498 .BU
1502 The hidden 1499 The hidden
1649 1646
1650 1647
1651 .H1 "Modernizing 1648 .H1 "Modernizing
1652 1649
1653 1650
1654 .H2 "Removal of Code Relicts 1651 .H2 "Code Relicts
1655 .P 1652 .P
1656 The code base of mmh originates from the late Seventies, 1653 The code base of mmh originates from the late Seventies,
1657 had been extensively 1654 had been extensively
1658 worked on in the mid Eighties, and had been partly reorganized and extended 1655 worked on in the mid Eighties, and had been partly reorganized and extended
1659 in the Nineties. Relicts of all those times had gathered in the code base. 1656 in the Nineties. Relicts of all those times had gathered in the code base.
1899 foo 1896 foo
1900 1897
1901 1898
1902 1899
1903 1900
1904 .H1 "Code style 1901 .H1 "Code Style
1905 .P 1902 .P
1906 foo 1903 foo
1907 1904
1908 1905
1909 .H2 "Standard Code 1906 .H2 "Standard Code