comparison discussion.roff @ 169:f4ffe121a0a2

Applied excellent suggestions and corrections by Kate.
author markus schnalke <meillo@marmaro.de>
date Tue, 10 Jul 2012 13:08:51 +0200
parents 277eeb5ba223
children 346ff7e201f5
comparison
equal deleted inserted replaced
168:277eeb5ba223 169:f4ffe121a0a2
1 .H0 "Discussion 1 .H0 "Discussion
2 .P 2 .P
3 This main chapter discusses the practical work done in the mmh project. 3 This main chapter discusses the practical work accomplished in the
4 It is structured along the goals to achieve. 4 mmh project.
5 The concrete work done 5 It is structured along the goals set for the project.
6 The concrete work undertaken
6 is described in the examples of how the general goals were achieved. 7 is described in the examples of how the general goals were achieved.
7 The discussion compares the current version of mmh with the state of 8 The discussion compares the current version of mmh with the state of
8 nmh just before the mmh project started, i.e. Fall 2011. 9 nmh just before the mmh project started, i.e. Fall 2011.
9 Current changes of nmh will be mentioned only as side notes. 10 Current changes of nmh will be mentioned only as side notes.
10 .\" XXX where do I discuss the parallel development of nmh? 11 .\" XXX where do I discuss the parallel development of nmh?
13 14
14 .\" -------------------------------------------------------------- 15 .\" --------------------------------------------------------------
15 .H1 "Streamlining 16 .H1 "Streamlining
16 17
17 .P 18 .P
18 MH had been considered an all-in-one system for mail handling. 19 MH once provided anything necessary for email handling.
19 The community around nmh has a similar understanding. 20 The community around nmh has the similar understanding that nmh should
20 In fundamental difference, mmh shall be a MUA only. 21 provide a complete email system.
22 In fundamental contrast, mmh shall be a MUA only.
21 I believe that the development of all-in-one mail systems is obsolete. 23 I believe that the development of all-in-one mail systems is obsolete.
22 Today, email is too complex to be fully covered by single projects. 24 Today, email is too complex to be fully covered by single projects.
23 Such a project won't be able to excel in all aspects. 25 Such a project won't be able to excel in all aspects.
24 Instead, the aspects of email should be covered by multiple projects, 26 Instead, the aspects of email should be covered by multiple projects,
25 which then can be combined to form a complete system. 27 which then can be combined to form a complete system.
26 Excellent implementations for the various aspects of email exist already. 28 Excellent implementations for the various aspects of email already exist.
27 Just to name three examples: Postfix is a specialized MTA, 29 Just to name three examples: Postfix is a specialized MTA,
28 .\" XXX homepages verlinken 30 .\" XXX homepages verlinken
29 Procmail is a specialized MDA, and Fetchmail is a specialized MRA. 31 Procmail is a specialized MDA, and Fetchmail is a specialized MRA.
30 I believe that it is best to use such specialized tools instead of 32 I believe that it is best to use such specialized tools instead of
31 providing the same function again as a side-component in the project. 33 providing the same function again as a side-component in the project.
32 .\" XXX mail agent picture here 34 .\" XXX mail agent picture here
33 .P 35 .P
34 Doing something well, requires to focus on a small set of specific aspects. 36 Doing something well requires focusing on a small set of specific aspects.
35 Under the assumption that focused development produces better results 37 Under the assumption that development focussed on a particular area
36 in the particular area, specialized projects will be superior 38 produces better results there, specialized projects will be superior
37 in their field of focus. 39 in their field of focus.
38 Hence, all-in-one mail system projects \(en no matter if monolithic 40 Hence, all-in-one mail system projects \(en no matter if monolithic
39 or modular \(en will never be the best choice in any of the fields. 41 or modular \(en will never be the best choice in any of the fields.
40 Even in providing the best consistent all-in-one system they are likely 42 Even in providing the best consistent all-in-one system, they are likely
41 to be beaten by projects that focus only on integrating existing mail 43 to be beaten by projects that focus only on integrating existing mail
42 components to a homogeneous system. 44 components to create a homogeneous system.
43 .P 45 .P
44 The limiting resource in Free Software community development 46 The limiting resource in the community development of Free Software
45 is usually man power. 47 is usually man power.
46 If the development power is spread over a large development area, 48 If the development power is spread over a large development area,
47 it becomes even more difficult to compete with the specialists in the 49 it becomes even more difficult to compete with the specialists in the
48 various fields. 50 various fields.
49 The concrete situation for MH-based mail systems is even tougher, 51 The concrete situation for MH-based mail systems is even tougher,
50 given the small and aged community, including both developers and users, 52 given their small and aged community, concerning both developers and users.
51 it has.
52 .P 53 .P
53 In consequence, I believe that the available development resources 54 In consequence, I believe that the available development resources
54 should focus on the point where MH is most unique. 55 should focus on the point where MH is most unique.
55 This is clearly the user interface \(en the MUA. 56 This is clearly the user interface \(en the MUA.
56 Peripheral parts should be removed to streamline mmh for the MUA task. 57 Peripheral parts should be removed to streamline mmh for the MUA task.
60 .Id mail-transfer-facilities 61 .Id mail-transfer-facilities
61 .P 62 .P
62 In contrast to nmh, which also provides mail submission and mail retrieval 63 In contrast to nmh, which also provides mail submission and mail retrieval
63 agents, mmh is a MUA only. 64 agents, mmh is a MUA only.
64 This general difference initiated the development of mmh. 65 This general difference initiated the development of mmh.
65 Removing the mail transfer facilities had been the first work task 66 The removal of the mail transfer facilities was the first work task
66 in the mmh project. 67 in the mmh project.
67 .P 68 .P
68 Focusing on one mail agent role only is motivated by Eric Allman's 69 Focusing on one mail agent role only, is motivated by Eric Allman's
69 experience with Sendmail. 70 experience with Sendmail.
70 He identified the limitation of Sendmail to the MTA task as one reason for 71 He identified the limitation of Sendmail to the MTA task as one reason for
71 its success: 72 its success:
72 .[ [ 73 .[ [
73 costales sendmail 74 costales sendmail
84 \fIMessage Transfer Service\fP (MTS). 85 \fIMessage Transfer Service\fP (MTS).
85 This facility, implemented by the 86 This facility, implemented by the
86 .Pn post 87 .Pn post
87 command, established network connections and spoke SMTP to submit 88 command, established network connections and spoke SMTP to submit
88 messages to be relayed to the outside world. 89 messages to be relayed to the outside world.
89 The changes in email demanded changes in this part of nmh too. 90 The changes in email demanded changes in this part of nmh as well.
90 Encryption and authentication for network connections 91 Encryption and authentication for network connections
91 needed to be supported, hence TLS and SASL were introduced into nmh. 92 needed to be supported, hence TLS and SASL were introduced into nmh.
92 This added complexity to nmh without improving it in its core functions. 93 This added complexity to nmh without improving it in its core functions.
93 Also, keeping up with recent developments in the field of 94 Also, keeping up with recent developments in the field of
94 mail transfer requires development power and specialists. 95 mail transfer requires development power and specialists.
95 In mmh this whole facility was simply cut off. 96 In mmh, this whole facility was simply cut off.
96 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 97 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
97 .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3 98 .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3
98 .Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b 99 .Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b
99 Instead, mmh depends on an external MSA. 100 Instead, mmh depends on an external MSA.
100 The only outgoing interface available to mmh is the 101 The only outgoing interface available to mmh is the
109 #!/bin/sh 110 #!/bin/sh
110 exec qmail-inject # ignore command line arguments 111 exec qmail-inject # ignore command line arguments
111 VE 112 VE
112 The requirement to parse the recipient addresses out of the message header 113 The requirement to parse the recipient addresses out of the message header
113 is likely to be removed in the future. 114 is likely to be removed in the future.
114 Then mmh would give the recipient addresses as command line arguments. 115 Then mmh would pass the recipient addresses as command line arguments.
115 This appears to be the better interface. 116 This appears to be the better interface.
116 .\" XXX implement it 117 .\" XXX implement it
117 .P 118 .P
118 To retrieve mail, the 119 To retrieve mail, the
119 .Pn inc 120 .Pn inc
120 command acted as Mail Retrieval Agent (MRA). 121 command acted as an Mail Retrieval Agent (MRA).
121 It established network connections 122 It established network connections
122 and spoke POP3 to retrieve mail from remote servers. 123 and spoke POP3 to retrieve mail from remote servers.
123 As with mail submission, the network connections required encryption and 124 As with mail submission, the network connections required encryption and
124 authentication, thus TLS and SASL were added. 125 authentication, thus TLS and SASL were added.
125 Support for message retrieval through IMAP will become necessary 126 Support for message retrieval through IMAP will soon become necessary
126 to be added soon, too, and likewise for any other changes in mail transfer. 127 additions, too, and likewise for any other changes in mail transfer.
127 Not so for mmh because it has dropped the support for retrieving mail 128 Not so for mmh because it has dropped the support for retrieving mail
128 from remote locations. 129 from remote locations.
129 .Ci ab7b48411962d26439f92f35ed084d3d6275459c 130 .Ci ab7b48411962d26439f92f35ed084d3d6275459c
130 Instead, it depends on an external tool to cover this task. 131 Instead, it depends on an external tool to cover this task.
131 In mmh, two paths exist for messages to enter mmh's mail storage: 132 Mmh has two paths for messages to enter mmh's mail storage:
132 (1) Mail can be incorporated with 133 (1) Mail can be incorporated with
133 .Pn inc 134 .Pn inc
134 from the system maildrop, or (2) with 135 from the system maildrop, or (2) with
135 .Pn rcvstore 136 .Pn rcvstore
136 by reading them, one at a time, from the standard input. 137 by reading them, one at a time, from the standard input.
138 With the removal of the MSA and MRA, mmh converted from an all-in-one 139 With the removal of the MSA and MRA, mmh converted from an all-in-one
139 mail system to being a MUA only. 140 mail system to being a MUA only.
140 Now, of course, mmh depends on third-party software. 141 Now, of course, mmh depends on third-party software.
141 An external MSA is required to transfer mail to the outside world; 142 An external MSA is required to transfer mail to the outside world;
142 an external MRA is required to retrieve mail from remote machines. 143 an external MRA is required to retrieve mail from remote machines.
143 There exist excellent implementations of such software, 144 Excellent implementations of such software exist,
144 which likely are superior than the internal version. 145 which likely are superior than the internal version.
145 Additionally, the best suiting programs can be freely chosen. 146 Additionally, the best suiting programs can be freely chosen.
146 .P 147 .P
147 As it had already been possible to use an external MSA or MRA, 148 As it had already been possible to use an external MSA or MRA,
148 why not keep the internal version for convenience? 149 why not keep the internal version for convenience?
165 .] 166 .]
166 Here, this part of the Unix philosophy was applied not only 167 Here, this part of the Unix philosophy was applied not only
167 to the programs but to the project itself. 168 to the programs but to the project itself.
168 In other words: 169 In other words:
169 Develop projects that focus on one thing and do it well. 170 Develop projects that focus on one thing and do it well.
170 Projects grown complex should be split for the same reasons programs 171 Projects which have grown complex should be split, for the same
171 grown complex should be split. 172 reasons that programs which have grown complex should be split.
172 If it is conceptionally more elegant to have the MSA and MRA as 173 If it is conceptionally more elegant to have the MSA and MRA as
173 separate projects then they should be separated. 174 separate projects then they should be separated.
174 This is the case here, in my opinion. 175 In my opinion, this is the case here.
175 The RFCs propose this separation by clearly distinguishing the different 176 The RFCs propose this separation by clearly distinguishing the different
176 mail handling tasks. 177 mail handling tasks.
177 .[ 178 .[
178 rfc 821 179 rfc 821
179 .] 180 .]
180 The small interfaces between the mail agents support the separation. 181 The small interfaces between the mail agents support the separation.
181 .P 182 .P
182 In the beginning, email had been small and simple. 183 Email once had been small and simple.
183 At that time, 184 At that time,
184 .Pn /bin/mail 185 .Pn /bin/mail
185 had covered anything there was to email and still had been small 186 had covered everything there was to email and still was small and simple.
186 and simple.
187 Later, the essential complexity of email increased. 187 Later, the essential complexity of email increased.
188 (Essential complexity is the complexity defined by the problem itself.\0 188 (Essential complexity is the complexity defined by the problem itself.\0
189 .[[ 189 .[[
190 brooks no silver bullet 190 brooks no silver bullet
191 .]]) 191 .]])
192 Email systems reacted to this change: They grew. 192 Email systems reacted to this change: They grew.
193 RFCs started to introduce the concept of mail agents to separate the 193 RFCs started to introduce the concept of mail agents to separate the
194 various tasks because they became more extensive and new tasks appeared. 194 various tasks because they became more extensive and new tasks appeared.
195 As the mail systems grew even more, parts were split off. 195 As the mail systems grew even more, parts were split off.
196 In nmh, for instance, the POP server, which was included in the original 196 For instance, a POP server was included in the original MH;
197 MH, was removed. 197 it was removed in nmh.
198 Now is the time to go one step further and split off the MSA and MRA, too. 198 Now is the time to go one step further and split off the MSA and MRA, too.
199 Not only does this decrease the code size of the project, 199 Not only does this decrease the code size of the project,
200 but, more important, it unburdens mmh of the whole field of 200 more importantly, it unburdens mmh of the whole field of
201 message transfer with all its implications for the project. 201 message transfer with all its implications for the project.
202 There is no more need to concern with changes in network transfer. 202 There is no more need for concern with changes in network transfer.
203 This independence is received by depending on an external program 203 This independence is gained by depending on an external program
204 that covers the field. 204 that covers the field.
205 Today, this is a reasonable exchange. 205 Today, this is a reasonable exchange.
206 .P 206 .P
207 .\" XXX ueberleitung ??? 207 .\" XXX ueberleitung ???
208 Functionality can be added in three different ways: 208 Functionality can be added in three different ways:
209 .BU 209 .BU
210 Implementing the function originally in the project. 210 Implementing the function in the project itself.
211 .BU 211 .BU
212 Depending on a library that provides the function. 212 Depending on a library that provides the function.
213 .BU 213 .BU
214 Depending on a program that provides the function. 214 Depending on a program that provides the function.
215 .P 215 .P
216 .\" XXX Rework sentence 216 .\" XXX Rework sentence
217 While adding the function originally to the project increases the 217 While implementing the function in the project itself leads to the
218 code size most and requires most maintenance and development work, 218 largest increase in code size and requires the most maintenance
219 it makes the project most independent of other software. 219 and development work,
220 Using libraries or external programs require less maintenance work 220 it increases the project's independence of other software the most.
221 Using libraries or external programs requires less maintenance work
221 but introduces dependencies on external software. 222 but introduces dependencies on external software.
222 Programs have the smallest interfaces and provide the best separation 223 Programs have the smallest interfaces and provide the best separation,
223 but possibly limit the information exchange. 224 but possibly limit the information exchange.
224 External libraries are stronger connected than external programs, 225 External libraries are more strongly connected than external programs,
225 thus information can be exchanged more flexible. 226 thus information can be exchanged in a more flexible manner.
226 Adding code to a project increases maintenance work. 227 Adding code to a project increases maintenance work.
227 .\" XXX ref 228 .\" XXX ref
228 Implementing complex functions in the project itself adds 229 Implementing complex functions in the project itself adds
229 a lot of code. 230 a lot of code.
230 This should be avoided if possible. 231 This should be avoided if possible.
231 Hence, the dependencies only change in kind, not in their existence. 232 Hence, the dependencies only change in their character,
233 not in their existence.
232 In mmh, library dependencies on 234 In mmh, library dependencies on
233 .Pn libsasl2 235 .Pn libsasl2
234 and 236 and
235 .Pn libcrypto /\c 237 .Pn libcrypto /\c
236 .Pn libssl 238 .Pn libssl
237 were traded against program dependencies on an MSA and an MRA. 239 were traded against program dependencies on an MSA and an MRA.
238 This also meant trading build-time dependencies against run-time 240 This also meant trading build-time dependencies against run-time
239 dependencies. 241 dependencies.
240 Besides program dependencies providing the stronger separation 242 Besides providing stronger separation and greater flexibility,
241 and being more flexible, they also allowed 243 program dependencies also allowed
242 over 6\|000 lines of code to be removed from mmh. 244 over 6\|000 lines of code to be removed from mmh.
243 This made mmh's code base about 12\|% smaller. 245 This made mmh's code base about 12\|% smaller.
244 Reducing the project's code size by such an amount without actually 246 Reducing the project's code size by such an amount without actually
245 losing functionality is a convincing argument. 247 losing functionality is a convincing argument.
246 Actually, as external MSAs and MRAs are likely superior to the 248 Actually, as external MSAs and MRAs are likely superior to the
247 project's internal versions, the common user even gains functionality. 249 project's internal versions, the common user even gains functionality.
248 .P 250 .P
249 Users of MH should not have problems to set up an external MSA and MRA. 251 Users of MH should not have problems setting up an external MSA and MRA.
250 Also, the popular MSAs and MRAs have large communities and a lot 252 Also, the popular MSAs and MRAs have large communities and a lot
251 of documentation available. 253 of available documentation.
252 Choices for MSAs range from full-featured MTAs like 254 Choices for MSAs range from full-featured MTAs such as
253 .\" XXX refs 255 .\" XXX refs
254 .I Postfix 256 .I Postfix ,
255 over mid-size MTAs like 257 over mid-size MTAs such as
256 .I masqmail 258 .I masqmail
257 and 259 and
258 .I dma 260 .I dma ,
259 to small forwarders like 261 to small forwarders such as
260 .I ssmtp 262 .I ssmtp
261 and 263 and
262 .I nullmailer . 264 .I nullmailer .
263 Choices for MRAs include 265 Choices for MRAs include
264 .I fetchmail , 266 .I fetchmail ,
269 271
270 272
271 .H2 "Non-MUA Tools 273 .H2 "Non-MUA Tools
272 .P 274 .P
273 One goal of mmh is to remove the tools that are not part of the MUA's task. 275 One goal of mmh is to remove the tools that are not part of the MUA's task.
274 Further more, any tools that don't improve the MUA's job significantly 276 Further more, any tools that don't significantly improve the MUA's job
275 should be removed. 277 should be removed.
276 Loosely related and rarely used tools distract from the lean appearance. 278 Loosely related and rarely used tools distract from the lean appearance.
277 They require maintenance work without adding much to the core task. 279 They require maintenance work without adding much to the core task.
278 By removing these tools, the project shall become more streamlined 280 By removing these tools, the project shall become more streamlined
279 and focused. 281 and focused.
280 In mmh the following tools are not available anymore: 282 In mmh, the following tools are not available anymore:
281 .BU 283 .BU
282 .Pn conflict 284 .Pn conflict
283 was removed 285 was removed
284 .Ci 8b235097cbd11d728c07b966cf131aa7133ce5a9 286 .Ci 8b235097cbd11d728c07b966cf131aa7133ce5a9
285 because it is a mail system maintenance tool that is not MUA-related. 287 because it is a mail system maintenance tool that is not MUA-related.
299 because its use case of writing to the user's terminal 301 because its use case of writing to the user's terminal
300 on receival of mail is obsolete. 302 on receival of mail is obsolete.
301 If users like to be informed of new mail, the shell's 303 If users like to be informed of new mail, the shell's
302 .Ev MAILPATH 304 .Ev MAILPATH
303 variable or graphical notifications are technically more appealing. 305 variable or graphical notifications are technically more appealing.
304 Writing directly to terminals is hardly ever wanted today. 306 Writing directly to terminals is hardly ever desired today.
305 If though one wants to have it this way, the standard tool 307 If, though, one prefers this approach, the standard tool
306 .Pn write 308 .Pn write
307 can be used in a way similar to: 309 can be used in a way similar to:
308 .VS 310 .VS
309 scan -file - | write `id -un` 311 scan -file - | write `id -un`
310 VE 312 VE
332 provided hardly more information than: 334 provided hardly more information than:
333 .VS 335 .VS
334 ls -l /var/mail/meillo 336 ls -l /var/mail/meillo
335 VE 337 VE
336 It did distinguish between old and new mail, but 338 It did distinguish between old and new mail, but
337 this detail information can be retrieved with 339 these details can be retrieved with
338 .Pn stat (1), 340 .Pn stat (1),
339 too. 341 too.
340 A small shell script could be written to print the information 342 A small shell script could be written to print the information
341 in a similar way, if truly necessary. 343 in a similar way, if truly necessary.
342 As mmh's 344 As mmh's
343 .Pn inc 345 .Pn inc
344 only incorporates mail from the user's local maildrop, 346 only incorporates mail from the user's local maildrop,
345 and thus no data transfers over slow networks are involved, 347 and thus no data transfers over slow networks are involved,
346 there's hardly any need to check for new mail before incorporating it. 348 there is hardly any need to check for new mail before incorporating it.
347 .BU 349 .BU
348 .Pn msh 350 .Pn msh
349 was removed 351 was removed
350 .Ci 916690191222433a6923a4be54b0d8f6ac01bd02 352 .Ci 916690191222433a6923a4be54b0d8f6ac01bd02
351 because the tool was in conflict with the philosophy of MH. 353 because the tool was in conflict with the philosophy of MH.
352 It provided an interactive shell to access the features of MH, 354 It provided an interactive shell to access the features of MH,
353 but it wasn't just a shell tailored to the needs of mail handling. 355 but it wasn't just a shell tailored to the needs of mail handling.
354 Instead it was one large program that had several MH tools built in. 356 Instead, it was one large program that had several MH tools built in.
355 This conflicts with the major feature of MH of being a tool chest. 357 This conflicts with the major feature of MH of being a tool chest.
356 .Pn msh 's 358 .Pn msh 's
357 main use case had been accessing Bulletin Boards, which have ceased to 359 main use case had been accessing Bulletin Boards, which have ceased to
358 be popular. 360 be popular.
359 .P 361 .P
360 Removing 362 Removing
361 .Pn msh , 363 .Pn msh
362 together with the truly archaic code relicts 364 together with the truly archaic code relicts
363 .Pn vmh 365 .Pn vmh
364 and 366 and
365 .Pn wmh , 367 .Pn wmh
366 saved more than 7\|000 lines of C code \(en 368 saved more than 7\|000 lines of C code \(en
367 about 15\|% of the project's original source code amount. 369 about 15\|% of the project's original source code amount.
368 Having less code \(en with equal readability, of course \(en 370 Having less code \(en with equal readability, of course \(en
369 for the same functionality is an advantage. 371 for the same functionality is an advantage.
370 Less code means less bugs and less maintenance work. 372 Less code means less bugs and less maintenance work.
381 hence there's no reason to still maintain it. 383 hence there's no reason to still maintain it.
382 .Pn conflict 384 .Pn conflict
383 is not related to the mail client, and 385 is not related to the mail client, and
384 .Pn msh 386 .Pn msh
385 conflicts with the basic concept of MH. 387 conflicts with the basic concept of MH.
386 Theses two tools might still be useful, but they should not be part of mmh. 388 These two tools might still be useful, but they should not be part of mmh.
387 .P 389 .P
388 Finally, there's 390 Finally, there is
389 .Pn slocal . 391 .Pn slocal .
390 .Pn slocal 392 .Pn slocal
391 is an MDA and thus not directly MUA-related. 393 is an MDA and thus not directly MUA-related.
392 It should be removed from mmh, because including it conflicts with 394 It should be removed from mmh, because including it conflicts with
393 the idea that mmh is a MUA only. 395 the idea that mmh is a MUA only.
397 .Pn slocal 399 .Pn slocal
398 provides rule-based processing of messages, like filing them into 400 provides rule-based processing of messages, like filing them into
399 different folders, which is otherwise not available in mmh. 401 different folders, which is otherwise not available in mmh.
400 Although 402 Although
401 .Pn slocal 403 .Pn slocal
402 does neither pull in dependencies nor does it include a separate 404 neither pulls in dependencies, nor does it include a separate
403 technical area (cf. Sec. 405 technical area (cf. Sec.
404 .Cf mail-transfer-facilities ), 406 .Cf mail-transfer-facilities ),
405 still, 407 it still accounts for about 1\|000 lines of code that need to be maintained.
406 it accounts for about 1\|000 lines of code that need to be maintained.
407 As 408 As
408 .Pn slocal 409 .Pn slocal
409 is almost self-standing, it should be split off into a separate project. 410 is almost self-standing, it should be split off into a separate project.
410 This would cut the strong connection between the MUA mmh and the MDA 411 This would cut the strong connection between the MUA mmh and the MDA
411 .Pn slocal . 412 .Pn slocal .
425 Yet, 426 Yet,
426 .Pn slocal 427 .Pn slocal
427 is not split off. 428 is not split off.
428 I defer the decision over 429 I defer the decision over
429 .Pn slocal 430 .Pn slocal
430 in need for deeper investigation. 431 out of a need for deeper investigation.
431 In the meanwhile, it remains part of mmh. 432 In the meanwhile, it remains part of mmh.
432 However, its continued existence is not significant because 433 However, its continued existence is not significant because
433 .Pn slocal 434 .Pn slocal
434 is unrelated to the rest of the project. 435 is unrelated to the rest of the project.
435 436
863 configure option was removed 864 configure option was removed
864 .Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643 865 .Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643
865 Removing the option removed a second code setup that would have 866 Removing the option removed a second code setup that would have
866 needed to be tested. 867 needed to be tested.
867 .\" XXX datum? 868 .\" XXX datum?
868 This change was first done in nmh and thereafter merged into mmh. 869 This change was first accomplished in nmh and thereafter merged into mmh.
869 .P 870 .P
870 The interface changes in mmh require mh-e to be adjusted in order 871 The interface changes in mmh require mh-e to be adjusted in order
871 to be able to use mmh as back-end. 872 to be able to use mmh as back-end.
872 This will require minor changes to mh-e, but removing the 873 This will require minor changes to mh-e, but removing the
873 .Sw -build 874 .Sw -build
2106 composition drafts and ignore the attachment system. 2107 composition drafts and ignore the attachment system.
2107 2108
2108 2109
2109 .U3 "Storing Attachments 2110 .U3 "Storing Attachments
2110 .P 2111 .P
2111 Extracting MIME parts of a message and storing them to disk is done by 2112 Extracting MIME parts of a message and storing them to disk is performed by
2112 .Pn mhstore . 2113 .Pn mhstore .
2113 The program has two operation modes, 2114 The program has two operation modes,
2114 .Sw -auto 2115 .Sw -auto
2115 and 2116 and
2116 .Sw -noauto . 2117 .Sw -noauto .
2277 .P 2278 .P
2278 .Pe mhshow-show-* 2279 .Pe mhshow-show-*
2279 profile entries can be used to display MIME parts in a specific way. 2280 profile entries can be used to display MIME parts in a specific way.
2280 For instance, PDF and Postscript files could be converted to plain text 2281 For instance, PDF and Postscript files could be converted to plain text
2281 to display them in the terminal. 2282 to display them in the terminal.
2282 In mmh, the displaying of MIME parts will always be done serially. 2283 In mmh, MIME parts will always be displayed serially.
2283 The request to display the MIME type `multipart/parallel' in parallel 2284 The request to display the MIME type `multipart/parallel' in parallel
2284 is ignored. 2285 is ignored.
2285 It is simply treated as `multipart/mixed'. 2286 It is simply treated as `multipart/mixed'.
2286 .Ci d0581ba306a7299113a346f9b4c46ce97bc4cef6 2287 .Ci d0581ba306a7299113a346f9b4c46ce97bc4cef6
2287 This could already be requested with the, now removed, 2288 This could already be requested with the, now removed,
2309 To display text content in foreign charsets, they need to be converted 2310 To display text content in foreign charsets, they need to be converted
2310 to the native charset. 2311 to the native charset.
2311 Therefore, 2312 Therefore,
2312 .Pe mhshow-charset-* 2313 .Pe mhshow-charset-*
2313 profile entries used to be needed. 2314 profile entries used to be needed.
2314 In mmh, the conversion is done automatically by piping the text through 2315 In mmh, the conversion is performed automatically by piping the
2315 the 2316 text through the
2316 .Pn iconv 2317 .Pn iconv
2317 command, if necessary. 2318 command, if necessary.
2318 .Ci 2433122c20baccb10b70b49c04c6b0497b5b3b60 2319 .Ci 2433122c20baccb10b70b49c04c6b0497b5b3b60
2319 Custom 2320 Custom
2320 .Pe mhshow-show-* 2321 .Pe mhshow-show-*
2567 This simplified the source code of the tools, as well as the concepts. 2568 This simplified the source code of the tools, as well as the concepts.
2568 In mmh, draft management does not break with the MH concepts 2569 In mmh, draft management does not break with the MH concepts
2569 but applies them. 2570 but applies them.
2570 .Cl "scan +drafts" , 2571 .Cl "scan +drafts" ,
2571 for instance, is a truly natural request. 2572 for instance, is a truly natural request.
2572 Most of the work was already done by Rose in the eighties. 2573 Most of the work was already performed by Rose in the eighties.
2573 The original improvement of mmh is dropping the old draft message approach 2574 The original improvement of mmh is dropping the old draft message approach
2574 and thus simplifying the tools, the documentation and the system as a whole. 2575 and thus simplifying the tools, the documentation and the system as a whole.
2575 Although my part in the draft handling improvement was small, 2576 Although my part in the draft handling improvement was small,
2576 it was an important one. 2577 it was an important one.
2577 2578
2655 Existing and removed messages are thus separated more strictly. 2656 Existing and removed messages are thus separated more strictly.
2656 No backup files are silently overwritten. 2657 No backup files are silently overwritten.
2657 But most important is the ability to keep removed messages in the MH domain. 2658 But most important is the ability to keep removed messages in the MH domain.
2658 Messages in the trash folder can be listed like those in any other folder. 2659 Messages in the trash folder can be listed like those in any other folder.
2659 Deleted messages can be displayed like any other messages. 2660 Deleted messages can be displayed like any other messages.
2660 Restoring a deleted messages can be done with 2661 .Pn refile
2661 .Pn refile . 2662 can restore deleted messages.
2662 All operations on deleted files are still covered by the MH tools. 2663 All operations on deleted files are still covered by the MH tools.
2663 The trash folder is just like any other folder in the mail storage. 2664 The trash folder is just like any other folder in the mail storage.
2664 .P 2665 .P
2665 Similar to the draft folder case, I dropped the old backup prefix approach 2666 Similar to the draft folder case, I dropped the old backup prefix approach
2666 in favor for replacing it by the better suiting trash folder system. 2667 in favor for replacing it by the better suiting trash folder system.
2979 .Ci b8b075c77be7794f3ae9ff0e8cedb12b48fd139f 2980 .Ci b8b075c77be7794f3ae9ff0e8cedb12b48fd139f
2980 The clarity improvement of the change showed detours in the program logic 2981 The clarity improvement of the change showed detours in the program logic
2981 of related code parts. 2982 of related code parts.
2982 Having the new variables with descriptive names, a more 2983 Having the new variables with descriptive names, a more
2983 straight forward implementation became apparent. 2984 straight forward implementation became apparent.
2984 Before the clarification was done, 2985 Before the code was clarified, the possibility to improve had not be seen.
2985 the possibility to improve had not be seen.
2986 .Ci aa60b0ab5e804f8befa890c0a6df0e3143ce0723 2986 .Ci aa60b0ab5e804f8befa890c0a6df0e3143ce0723
2987 2987
2988 2988
2989 2989
2990 .H2 "Structural Rework 2990 .H2 "Structural Rework
3527 With this change, 3527 With this change,
3528 .Pn send 3528 .Pn send
3529 and 3529 and
3530 .Pn spost 3530 .Pn spost
3531 can be considered to be merged. 3531 can be considered to be merged.
3532 Direct invocations of
3533 .Pn spost 3532 .Pn spost
3534 are only done by the to-be-changed 3533 is only invoked directly by the to-be-changed
3535 .Pn mhmail 3534 .Pn mhmail
3536 implementation and by 3535 implementation and by
3537 .Pn rcvdist , 3536 .Pn rcvdist ,
3538 which will require rework. 3537 which will require rework.
3539 .P 3538 .P
3893 other MIME handling tools. 3892 other MIME handling tools.
3894 It seems to be worthwhile to bundle the generic MIME handling code into 3893 It seems to be worthwhile to bundle the generic MIME handling code into
3895 a MH-MIME library, as a companion to the MH standard library. 3894 a MH-MIME library, as a companion to the MH standard library.
3896 This is left open for the future. 3895 This is left open for the future.
3897 .P 3896 .P
3898 The work already done focussed on the non-MIME tools. 3897 The work already accomplished focussed on the non-MIME tools.
3899 The amount of code compiled into each program was reduced. 3898 The amount of code compiled into each program was reduced.
3900 This eases the understanding of the code base. 3899 This eases the understanding of the code base.
3901 In nmh, 3900 In nmh,
3902 .Pn comp 3901 .Pn comp
3903 was built from six source files: 3902 was built from six source files: