Mercurial > docs > master
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: |