rev |
line source |
meillo@0
|
1 .H0 "Preface" no
|
meillo@0
|
2
|
meillo@23
|
3 .P
|
meillo@197
|
4 I have discovered the mail client \fInmh\fP
|
meillo@197
|
5 in fall 2009.
|
meillo@197
|
6 At that time I used \fImutt\fP,
|
meillo@197
|
7 as many advanced Unix users do.
|
meillo@87
|
8 When I read about nmh, its concepts convinced me at once.
|
meillo@87
|
9 The transition from mutt to nmh was similar to beginning with
|
meillo@87
|
10 file management in the Unix shell when being used to the
|
meillo@53
|
11 \fImidnight commander\fP,
|
meillo@87
|
12 or like starting with vi when being used to modeless editors.
|
meillo@87
|
13 Such a change is not trivial, but, in being convinced by the
|
meillo@31
|
14 concepts and by having done similar transitions for file management
|
meillo@53
|
15 and editing already, it was not too difficult.
|
meillo@51
|
16 In contrast, setting up nmh to a convenient state became a tedious task
|
meillo@23
|
17 that took several months.
|
meillo@164
|
18 Once having nmh arranged this way, I enjoyed using it
|
meillo@28
|
19 because of its conceptional elegance and its scripting capabilities.
|
meillo@106
|
20 Nevertheless, it was still inconvenient for handling attachments,
|
meillo@87
|
21 non-ASCII character encodings, and similar features of modern emailing.
|
meillo@31
|
22 My setup demanded more and more additional configuration and helper scripts
|
meillo@87
|
23 to have nmh behave the way I wanted; yet my
|
meillo@31
|
24 expectations were rather common for modern emailing.
|
meillo@106
|
25 As a computer scientist and programmer, I wanted to improve the situation.
|
meillo@8
|
26 .P
|
meillo@197
|
27 In spring 2010, I sent a message
|
meillo@197
|
28 .[
|
meillo@197
|
29 nmh-workers gsoc
|
meillo@197
|
30 .]
|
meillo@197
|
31 to the \fInmh-workers\fP mailing list,
|
meillo@197
|
32 .[
|
meillo@197
|
33 nmh-workers mailing list website
|
meillo@197
|
34 .]
|
meillo@197
|
35 asking for the possibility to offer a Google Summer of Code
|
meillo@197
|
36 .[
|
meillo@197
|
37 google summer of code website
|
meillo@197
|
38 .]
|
meillo@197
|
39 project for me.
|
meillo@106
|
40 Participating in the development of nmh in this manner appeared attractive
|
meillo@106
|
41 to me, because I would have been able to work full time on nmh.
|
meillo@106
|
42 Although the nmh community had reacted generally positive to the suggestion,
|
meillo@171
|
43 the administrative work for such a project would had been too much.
|
meillo@106
|
44 Nonetheless, my proposal had activated the nmh community.
|
meillo@31
|
45 In the following weeks, goals for nmh's future were discussed.
|
meillo@31
|
46 In these discussions, I became involved in the
|
meillo@53
|
47 question whether nmh should include mail transfer facilities.
|
meillo@34
|
48 .[
|
meillo@34
|
49 nmh-workers thread mta mua
|
meillo@34
|
50 .]
|
meillo@197
|
51 I argued for the Mail Transfer Agent of nmh to be removed.
|
meillo@87
|
52 In this fundamental question,
|
meillo@87
|
53 my opinion differed from the opinion of most others.
|
meillo@87
|
54 Sadly, besides the discussions, hardly any real work was done.
|
meillo@87
|
55 Being unable to work on nmh in a way that would be accepted at university
|
meillo@87
|
56 as part of my studies, I needed to choose another project.
|
meillo@8
|
57 .P
|
meillo@23
|
58 Half a year later, starting in August 2010,
|
meillo@23
|
59 I took one semester off to travel through Latin America.
|
meillo@173
|
60 During my time in Argentina, I wanted to work on free software.
|
meillo@23
|
61 This brought me back to nmh.
|
meillo@159
|
62 Richard Sandelman, an active nmh user, took care of the official basis.
|
meillo@173
|
63 Juan Granda, an Argentine free software developer,
|
meillo@197
|
64 organized a computer with Internet connection.
|
meillo@53
|
65 Thanks to them, I was able to work on nmh during my three-month
|
meillo@87
|
66 stay in Santiago del Estero, Argentina.
|
meillo@106
|
67 Quickly it became obvious that I would not succeed with my main goal,
|
meillo@87
|
68 to improve the character encoding handling.
|
meillo@87
|
69 (One of its ramifications is the
|
meillo@87
|
70 missing transfer decoding of quoted text in replies.)
|
meillo@23
|
71 As this is one of the most intricate parts of the system, the goal
|
meillo@53
|
72 was simply set too high.
|
meillo@53
|
73 Instead, I improved the code base as I read through it.
|
meillo@87
|
74 I found minor bugs for which I proposed fixes.
|
meillo@171
|
75 Additionally, I improved the documentation in minor ways.
|
meillo@197
|
76 When I started to work on larger code changes,
|
meillo@53
|
77 I had to discover that the community was reluctant to change.
|
meillo@53
|
78 Its wish for compatibility was much stronger than its
|
meillo@31
|
79 wish for convenient out-of-the-box setups \(en in contrast to my opinion.
|
meillo@212
|
80 Once again, this led to long discussions.
|
meillo@212
|
81 I came to understand their point of view, but it is different from mine.
|
meillo@23
|
82 At the end of my three-month project, I had become familiar with
|
meillo@87
|
83 nmh's code base and community,
|
meillo@53
|
84 I had improved the project in minor ways,
|
meillo@87
|
85 and I still was convinced that I wanted to continue to do so.
|
meillo@23
|
86 .P
|
meillo@53
|
87 Another half year later, the end of my studies came within reach.
|
meillo@197
|
88 I needed to choose a topic for my master's thesis.
|
meillo@106
|
89 Without question, I wanted to work on nmh.
|
meillo@106
|
90 But not exactly on nmh, because I had accepted that its
|
meillo@106
|
91 community has different goals than I have.
|
meillo@87
|
92 Working on nmh would result in much discussion and, in consequence,
|
meillo@87
|
93 little progress.
|
meillo@23
|
94 After careful thought, I decided to start an experimental version of nmh.
|
meillo@197
|
95 I wanted to implement my own ideas of how an MH-like system should
|
meillo@197
|
96 look like.
|
meillo@31
|
97 I wanted to create a usable alternative version to be compared with
|
meillo@31
|
98 the present state of nmh.
|
meillo@53
|
99 Eventually, my work would be proven successful or not.
|
meillo@53
|
100 In any case, the nmh project would profit from my experiences.
|
meillo@28
|
101
|
meillo@30
|
102 .U2 "Focus of this Document
|
meillo@8
|
103 .P
|
meillo@53
|
104 This document explains the design goals and implementation decisions
|
meillo@197
|
105 for mmh,
|
meillo@197
|
106 an experimental version of nmh.
|
meillo@31
|
107 It discusses technical, historical, social and philosophical considerations.
|
meillo@31
|
108 On the technical side, this document
|
meillo@125
|
109 explains how an existing project was streamlined by removing rough edges
|
meillo@106
|
110 and better exploitation of the central concepts.
|
meillo@106
|
111 On the historical side, changes through time are discussed,
|
meillo@106
|
112 regarding the use cases and the email features,
|
meillo@106
|
113 as well as the reactions to them.
|
meillo@31
|
114 Socially, this document describes the effects
|
meillo@28
|
115 and experiences of a newcomer with revolutionary aims entering an old
|
meillo@53
|
116 and matured software project.
|
meillo@106
|
117 Philosophical thoughts on style, mainly based on the Unix
|
meillo@53
|
118 philosophy, are present throughout the discussions.
|
meillo@53
|
119 The document describes the changes to nmh,
|
meillo@53
|
120 but as well, it clarifies my personal perception of the
|
meillo@53
|
121 concepts of MH and Unix, and explain my therefrom resulting point of view.
|
meillo@23
|
122 .P
|
meillo@31
|
123 This document is written for the community around MH-like mail systems,
|
meillo@31
|
124 including developers and users.
|
meillo@106
|
125 Despite the focus on MH-like systems, this document may be valuable
|
meillo@106
|
126 to anyone interested in the Unix philosophy and anyone in contact with
|
meillo@106
|
127 old software projects, be it code- or community-related.
|
meillo@28
|
128 .P
|
meillo@106
|
129 The reader is expected to be familiar with Unix, C and emailing.
|
meillo@53
|
130 Good Unix shell knowledge is required, because MH relies fundamentally
|
meillo@197
|
131 on the shell.
|
meillo@197
|
132 Without the power of the shell, MH becomes a motorcycle
|
meillo@30
|
133 without winding roads: boring.
|
meillo@181
|
134 Introductions to Unix and its shell can be found in \fIThe UNIX Programming
|
meillo@181
|
135 Environment\fP by Kernighan and Pike
|
meillo@37
|
136 .[
|
meillo@37
|
137 kernighan pike unix prog env
|
meillo@37
|
138 .]
|
meillo@181
|
139 or \fIThe UNIX System\fP by Bourne.
|
meillo@37
|
140 .[
|
meillo@37
|
141 bourne unix system
|
meillo@37
|
142 .]
|
meillo@53
|
143 The reader is assumed to be a C programmer,
|
meillo@53
|
144 but the document should be understandable otherwise, too.
|
meillo@53
|
145 The definitive guide to C is Kernighan and Ritchie's
|
meillo@181
|
146 \fIThe C Programming Language\fP.
|
meillo@37
|
147 .[
|
meillo@37
|
148 kernighan ritchie c prog lang
|
meillo@37
|
149 .]
|
meillo@164
|
150 A book about system-level C programming, such as those written by
|
meillo@164
|
151 Rochkind and Curry,
|
meillo@37
|
152 .[
|
meillo@37
|
153 rochkind advanced unix prog
|
meillo@37
|
154 .]
|
meillo@37
|
155 .[
|
meillo@37
|
156 curry system prog
|
meillo@37
|
157 .]
|
meillo@164
|
158 can be helpful as additional literature.
|
meillo@106
|
159 Old books are likely more helpful for understanding,
|
meillo@106
|
160 because large parts of the source code are old.
|
meillo@53
|
161 The reader is expected to know the format of email messages and
|
meillo@53
|
162 the structure of email transfer systems, at least on a basic level.
|
meillo@197
|
163 It's advisable to have cross-read RFC\|821 and RFC\|822.
|
meillo@212
|
164 Furthermore, basic understanding of MIME [RFC\|2045\(en2049]
|
meillo@197
|
165 is good to have.
|
meillo@106
|
166 The Wikipedia provides good introduction-level information about email.
|
meillo@197
|
167 .[
|
meillo@197
|
168 wikipedia email
|
meillo@197
|
169 .]
|
meillo@53
|
170 .P
|
meillo@28
|
171 Frequent references to the Unix philosophy will be made.
|
meillo@53
|
172 Gancarz has tried to sum it up in his book
|
meillo@181
|
173 \fIThe UNIX Philosophy\fP.
|
meillo@34
|
174 .[
|
meillo@34
|
175 gancarz unix phil
|
meillo@34
|
176 .]
|
meillo@181
|
177 Even better, though less concrete, are \fIThe UNIX Programming
|
meillo@181
|
178 Environment\fP
|
meillo@34
|
179 .[
|
meillo@34
|
180 kernighan pike unix prog env
|
meillo@34
|
181 .]
|
meillo@181
|
182 and \fIThe Practice of Programming\fP
|
meillo@34
|
183 .[
|
meillo@34
|
184 kernighan pike practice of prog
|
meillo@34
|
185 .]
|
meillo@34
|
186 by Kernighan and Pike.
|
meillo@181
|
187 The term paper \fIWhy the Unix Philosophy still matters\fP
|
meillo@34
|
188 .[
|
meillo@34
|
189 why unix phil still matters schnalke
|
meillo@34
|
190 .]
|
meillo@197
|
191 by myself provides an overview on the philosophy,
|
meillo@197
|
192 including a case study of MH.
|
meillo@53
|
193 .P
|
meillo@197
|
194 Although a brief introduction to MH is provided in Section
|
meillo@197
|
195 .Cf mh ,
|
meillo@197
|
196 the reader is encouraged to have a look at
|
meillo@181
|
197 \fIMH & nmh: Email for Users & Programmers\fP by Jerry Peek.
|
meillo@34
|
198 .[
|
meillo@34
|
199 peek mh
|
meillo@34
|
200 .]
|
meillo@53
|
201 The current version is available freely on the Internet.
|
meillo@30
|
202 It is the definitive guide to MH and nmh.
|
meillo@30
|
203 .P
|
meillo@30
|
204 This document is neither a user's tutorial to mmh nor an introduction
|
meillo@53
|
205 to any of the topics covered.
|
meillo@53
|
206 The technical discussions are on an advanced level.
|
meillo@52
|
207 Nevertheless, as knowledge of the fundamental concepts is the most valuable
|
meillo@51
|
208 information a user can acquire about some program or software system,
|
meillo@52
|
209 this document may be worth a read for non-developers as well.
|
meillo@8
|
210
|
meillo@8
|
211
|
meillo@28
|
212 .U2 "Organization
|
meillo@0
|
213 .P
|
meillo@143
|
214 This thesis consists of three chapters.
|
meillo@143
|
215 Chapter 1 introduces into the topic, describing MH and explaining
|
meillo@143
|
216 the background and goals of the mmh project.
|
meillo@143
|
217 Chapter 2 discusses the work done in the project.
|
meillo@143
|
218 It is organized along the three major goals of the project, namely
|
meillo@143
|
219 streamlining, modernizing, and styling.
|
meillo@164
|
220 Not every change is described because that would bore the reader.
|
meillo@143
|
221 Instead, important changes and those standing for a set of similar
|
meillo@143
|
222 changes are described and discussed.
|
meillo@200
|
223 Chapter 3 finishes up by summarizing the achievements and taking
|
meillo@164
|
224 a look into the future of the mmh project.
|
meillo@28
|
225 .P
|
meillo@230
|
226 .I "Italic
|
meillo@230
|
227 font is used for names of software projects, literature, and man pages,
|
meillo@230
|
228 as well as to emphasize new terms.
|
meillo@230
|
229 .CW "Constant width
|
meillo@230
|
230 font is used to denote names of programs, files, functions,
|
meillo@230
|
231 command lines, code excerpts, program input and output, and the like.
|
meillo@143
|
232 .P
|
meillo@143
|
233 References to man pages are printed as ``\c
|
meillo@230
|
234 .Mp cat (1)'',
|
meillo@230
|
235 which is a reference to the man page of
|
meillo@230
|
236 .Pn cat
|
meillo@230
|
237 in section one of the Unix manual.
|
meillo@212
|
238 \fIRequests for Comments\fP (RFCs), which describe the working
|
meillo@212
|
239 of the Internet, are referenced as ``RFC\|821''.
|
meillo@200
|
240 Literature is cited in brackets, such as
|
meillo@143
|
241 .[ ``[
|
meillo@143
|
242 kernighan pike unix programming env
|
meillo@197
|
243 .]]''.
|
meillo@212
|
244 Citations of email messages and websites are distinguished by
|
meillo@212
|
245 ``mail:'' and ``web:'' prefixes.
|
meillo@197
|
246 All references are collected at the end of the document.
|
meillo@230
|
247 Links to the software projects mentioned throughout
|
meillo@230
|
248 the text are collected there as well.
|
meillo@143
|
249 .P
|
meillo@143
|
250 This document describes practical programming work.
|
meillo@197
|
251 The code of mmh is managed with the
|
meillo@143
|
252 .Pn git
|
meillo@143
|
253 version control system.
|
meillo@143
|
254 All code changes were checked in.
|
meillo@143
|
255 In the discussions, references to corresponding code changes are printed
|
meillo@143
|
256 as ``\c
|
meillo@143
|
257 .Ci 1a2b3c4 ''.
|
meillo@230
|
258 The identifier is the seven-letter-prefix of the changeset's hash value,
|
meillo@143
|
259 which is considered unique.
|
meillo@230
|
260 Any change can be looked up in the repository, using the command line
|
meillo@230
|
261 .Cl "git show 1234567" .
|
meillo@230
|
262 (`\f(CW1234567\fP' needs to be replaced with the concrete hash value.)
|
meillo@230
|
263 At the time of writing, changesets could be looked up online at:
|
meillo@230
|
264 .CW "http://git.marmaro.de/?p=mmh;a=commitdiff;h=1234567" \|.
|
meillo@146
|
265 But as we all know, URIs are always at risk to change.
|
meillo@24
|
266
|
meillo@23
|
267
|
meillo@28
|
268 .U2 "Acknowledgments
|
meillo@23
|
269 .P
|
meillo@231
|
270 Prof. Dr. Schweiggert and Dr. Borchert, you made my work
|
meillo@231
|
271 possible with your believe in the relevance of this topic.
|
meillo@231
|
272 I enjoyed my time studying in Ulm in the environment around you.
|
meillo@231
|
273 For me, this had been just the right place to be.
|
meillo@231
|
274 You have enriched my studies greatly and
|
meillo@231
|
275 I have learned a lot from you both.
|
meillo@231
|
276 Thank you.
|
meillo@231
|
277 .sp
|
meillo@231
|
278 .P
|
meillo@231
|
279 This thesis is my own work, but it would be in much poorer shape
|
meillo@231
|
280 without the help of friends.
|
meillo@231
|
281 They spotted errors, bad explanations, weak argumentations,
|
meillo@231
|
282 and clumsy sentences.
|
meillo@231
|
283 Their comments and suggestions shaped this document;
|
meillo@231
|
284 they made it focused and comprehensive.
|
meillo@231
|
285 .P
|
meillo@231
|
286 The lady comes first, but not for that reason alone.
|
meillo@231
|
287
|
meillo@231
|
288 .IP "Katja Rogers
|
meillo@231
|
289 Your help concerning the English language and writing in general
|
meillo@231
|
290 was outstanding.
|
meillo@231
|
291 The reader will surely recognize the sentences I have never showed to you.
|
meillo@231
|
292
|
meillo@231
|
293 .IP "Dominik Lang
|
meillo@231
|
294 You were mmh's first user.
|
meillo@231
|
295 That was great!
|
meillo@231
|
296 Thanks for your feedback and suggestions regarding mmh,
|
meillo@231
|
297 as well as for your improvements of this document.
|
meillo@231
|
298
|
meillo@231
|
299 .IP "Michael M\[udieresis]ller
|
meillo@231
|
300 Thanks for your corrections, comments,
|
meillo@231
|
301 and for the discussions on typography.
|
meillo@231
|
302
|
meillo@231
|
303 .IP "Matthias Matousek
|
meillo@231
|
304 Thanks for your corrections, comments,
|
meillo@231
|
305 and for sharing your ``living room''.
|
meillo@231
|
306
|
meillo@231
|
307 .IP "Boris Kraut
|
meillo@231
|
308 Thanks for your corrections, comments,
|
meillo@231
|
309 and for the idea to use an adjusted mmh setup as an address book.
|
meillo@231
|
310
|
meillo@231
|
311 .IP "Aaron M\[udieresis]ller
|
meillo@231
|
312 You have surprised me by proposing yourself to being a proof reader.
|
meillo@231
|
313 Thanks for your valuable annotations and quick responses.
|
meillo@231
|
314
|
meillo@231
|
315 .IP "Marius Gl\[odieresis]ggler and Martina Schnalke
|
meillo@231
|
316 You have covered the tedious tasks of double-checking the
|
meillo@231
|
317 changeset references and the bibliography, respectively.
|
meillo@231
|
318 Thank you.
|
meillo@231
|
319
|
meillo@231
|
320 .sp
|
meillo@231
|
321 .LP
|
meillo@231
|
322 My family supported me in times when I was busy;
|
meillo@231
|
323 Jean-Luc Picard and his crew took me on diverting
|
meillo@231
|
324 space adventures in my lazy times.
|
meillo@231
|
325
|
meillo@231
|
326 .sp
|
meillo@231
|
327 .P
|
meillo@231
|
328 Yet, none of the aforementioned people is connected to my work
|
meillo@231
|
329 in the same way Lydi is.
|
meillo@231
|
330 All those days in Argentina when I was working long hours and
|
meillo@231
|
331 even on holidays instead of spending time with you.
|
meillo@231
|
332 All the explanations of always the same doubts and difficulties
|
meillo@231
|
333 I suffered from, and you just listened.
|
meillo@231
|
334 All the delays near the end of my work though you have wished for
|
meillo@231
|
335 an earlier finish. \(em
|
meillo@231
|
336 In spite of it all, you knew what it meant to me.
|
meillo@231
|
337 .P
|
meillo@231
|
338 Danke f\[udieresis]r dein Verst\[adieresis]ndnis.
|