rev |
line source |
meillo@0
|
1 .H0 "Preface" no
|
meillo@0
|
2
|
meillo@23
|
3 .P
|
meillo@23
|
4 MH is a set of mail handling tools with a common concept, like
|
meillo@23
|
5 the Unix toolchest is a set of file handling tools with a common
|
meillo@23
|
6 concept. nmh is the currently most popular implementation of an
|
meillo@23
|
7 MH-like mail handling system.
|
meillo@31
|
8 This thesis describes an experimental version of nmh,
|
meillo@31
|
9 named \fImmh\fP.
|
meillo@31
|
10 The project goals for mmh are modernizing, stream-lining and exploiting
|
meillo@31
|
11 MH's concepts even more thoroughly.
|
meillo@23
|
12
|
meillo@30
|
13 .U2 "Background to this Thesis
|
meillo@8
|
14 .P
|
meillo@28
|
15 I have discovered nmh in September 2009. At that time I used to use the
|
meillo@31
|
16 mail client \fImutt\fP, like many advanced Unix users do.
|
meillo@31
|
17 As I read about nmh, its concepts had convinced me at once.
|
meillo@31
|
18 Learning its different model of email handling had been relatively easy,
|
meillo@31
|
19 because my starting situation was being convinced of the concepts.
|
meillo@31
|
20 The transition from mutt to nmh was similar to
|
meillo@28
|
21 managing files in the Unix shell when being used to graphical file
|
meillo@31
|
22 managers, or like editing with vi when being used to modeless editors.
|
meillo@31
|
23 Such a change is not trivial, but in being convinced by the
|
meillo@31
|
24 concepts and by having done similar transitions for file management
|
meillo@31
|
25 and editing already, it was not too difficult neither.
|
meillo@28
|
26 In contrast, setting up nmh to a convenient state became a tendious task
|
meillo@23
|
27 that took several months.
|
meillo@23
|
28 .P
|
meillo@28
|
29 Once having nmh arranged to a convenient state, I enjoyed using it
|
meillo@28
|
30 because of its conceptional elegance and its scripting capabilities.
|
meillo@23
|
31 On the other hand, however, it still was
|
meillo@31
|
32 inconvenient for handling attachments, non-ASCII character encodings,
|
meillo@23
|
33 and similar features of modern emailing.
|
meillo@31
|
34 My setup demanded more and more additional configuration and helper scripts
|
meillo@31
|
35 to get nmh behave the way I wanted, although my
|
meillo@31
|
36 expectations were rather common for modern emailing.
|
meillo@31
|
37 In being a computer scientist and programmer,
|
meillo@31
|
38 I wanted to improve the situation.
|
meillo@8
|
39 .P
|
meillo@31
|
40 In Spring 2010, I asked on the \fInmh-workers\fP mailing list for the
|
meillo@31
|
41 possibility to offer a Google Summer of Code project.
|
meillo@23
|
42 Participating in the development this way appeared attractive to me,
|
meillo@31
|
43 as it would have been possible to have the project
|
meillo@31
|
44 accepted at university. Although generally the nmh community
|
meillo@31
|
45 had been positive on the
|
meillo@31
|
46 suggestion, the administrative work had been to much, eventually.
|
meillo@31
|
47 But my proposal had activated the nmh community.
|
meillo@31
|
48 In the following weeks, goals for nmh's future were discussed.
|
meillo@31
|
49 In these discussions, I became involved in the
|
meillo@34
|
50 question whether nmh should be an MTA.
|
meillo@34
|
51 .[
|
meillo@34
|
52 nmh-workers thread mta mua
|
meillo@34
|
53 .]
|
meillo@31
|
54 In this central point, my opinion differed from the opinion of most others.
|
meillo@31
|
55 I argued for the MTA facility of nmh to be removed.
|
meillo@31
|
56 Besides the discussions, hardly any real work was done.
|
meillo@31
|
57 Being unable to work on nmh in a way that would be
|
meillo@31
|
58 accepted as part of my official studies, I needed to choose another project.
|
meillo@8
|
59 .P
|
meillo@23
|
60 Half a year later, starting in August 2010,
|
meillo@23
|
61 I took one semester off to travel through Latin America.
|
meillo@31
|
62 Within this time, I had to do practical computer work for three months.
|
meillo@23
|
63 This brought me back to nmh.
|
meillo@23
|
64 Richard Sandelman, an active nmh user, made it possible for
|
meillo@23
|
65 me to work on nmh. Juan Granda, living in Santiago del
|
meillo@31
|
66 Estero in Argentina, provided a computer with Internet connection for
|
meillo@31
|
67 my work. Thanks to them, I was able to work on nmh during my three-month
|
meillo@31
|
68 stay in Argentina.
|
meillo@31
|
69 Within this time, I became familiar with nmh's code base and
|
meillo@31
|
70 community. I learned how things work. Quickly it became obvious that
|
meillo@31
|
71 I wouldn't succeed with my main goal: improving the character
|
meillo@31
|
72 encoding handling within the project. One of its ramifications is the
|
meillo@31
|
73 missing transfer decoding of quoted text in replies.
|
meillo@23
|
74 As this is one of the most intricate parts of the system, the goal
|
meillo@31
|
75 was simply set too high. Hence, I dropped the original plan.
|
meillo@31
|
76 Instead, I improved the code base as I read through it. I found minor bugs
|
meillo@31
|
77 for which I proposed fixes to the community. In the same go, I
|
meillo@31
|
78 improved the documentation in minor ways. When I started with
|
meillo@31
|
79 larger code changes, I had to discover that the community was reluctant
|
meillo@31
|
80 to change. Its wish for compatibility was much stronger than its
|
meillo@31
|
81 wish for convenient out-of-the-box setups \(en in contrast to my opinion.
|
meillo@23
|
82 This lead to long discussions, again.
|
meillo@31
|
83 I came to understand their point of view, but it is different to mine.
|
meillo@23
|
84 At the end of my three-month project, I had become familiar with
|
meillo@31
|
85 nmh's code base and community. I had improved the project in minor ways,
|
meillo@31
|
86 and I still was convinced that I wanted to go on to do so.
|
meillo@23
|
87 .P
|
meillo@23
|
88 Another half a year later, the end of my studies came within reach.
|
meillo@23
|
89 I needed a topic for my master's thesis.
|
meillo@23
|
90 There was no question: I wanted to work on nmh.
|
meillo@23
|
91 But well, not exactly on nmh,
|
meillo@8
|
92 because I had accepted that the nmh community has different goals
|
meillo@31
|
93 than I have. This would result in much discussion and thus little progress.
|
meillo@23
|
94 After careful thought, I decided to start an experimental version of nmh.
|
meillo@31
|
95 I wanted to implement my own ideas of how an MH-like system should look like.
|
meillo@31
|
96 I wanted to see where that would lead to.
|
meillo@31
|
97 I wanted to create a usable alternative version to be compared with
|
meillo@31
|
98 the present state of nmh.
|
meillo@31
|
99 My work should be proved successful or failed.
|
meillo@31
|
100 The nmh project would not be hurt by my work, but
|
meillo@31
|
101 it would profit from my experiences.
|
meillo@28
|
102
|
meillo@30
|
103 .U2 "Focus of this Document
|
meillo@8
|
104 .P
|
meillo@31
|
105 This document describes my work on the experimental nmh version, named
|
meillo@31
|
106 \fImmh\fP. It explains the changes to nmh, with focus on their reasons.
|
meillo@31
|
107 It discusses technical, historical, social and philosophical considerations.
|
meillo@31
|
108 On the technical side, this document
|
meillo@31
|
109 explains how an existing project was stream-lined by removing rough edges
|
meillo@31
|
110 and exploiting the central concepts better.
|
meillo@31
|
111 On the historical
|
meillo@31
|
112 side, changes through time in the use cases and the email features,
|
meillo@31
|
113 as well as the reactions to them, are discussed.
|
meillo@31
|
114 Socially, this document describes the effects
|
meillo@28
|
115 and experiences of a newcomer with revolutionary aims entering an old
|
meillo@31
|
116 and matured software projects.
|
meillo@31
|
117 Finally, philosophical thoughts on style, mainly based to the Unix philosophy,
|
meillo@31
|
118 are present throughout the discussions.
|
meillo@23
|
119 .P
|
meillo@31
|
120 This document is written for the community around MH-like mail systems,
|
meillo@31
|
121 including developers and users.
|
meillo@31
|
122 First of all, the document shall explain the design goals and
|
meillo@31
|
123 implementation decisions for mmh. But as well, it shall clarify my
|
meillo@30
|
124 personal perception of the
|
meillo@31
|
125 concepts of MH and Unix, and explain my therefrom resulting point of view.
|
meillo@31
|
126 Despite the focus on MH-like systems, this document may be worthwhile
|
meillo@31
|
127 to anyone interested in the Unix philosophy and anyone in contact to
|
meillo@31
|
128 old software projects, be it code or community-related.
|
meillo@28
|
129 .P
|
meillo@30
|
130 The reader is expected to have good knowledge of Unix, C and emailing.
|
meillo@30
|
131 Good Unix shell
|
meillo@28
|
132 knowledge, including shell scripting, is required. MH relies fundamentally
|
meillo@28
|
133 on the shell. Without the power of the shell, MH becomes a motorbike
|
meillo@30
|
134 without winding roads: boring.
|
meillo@31
|
135 Introductions to Unix and its shell can be found in ``The UNIX Programming
|
meillo@37
|
136 Environment'' by Kernighan and Pike
|
meillo@37
|
137 .[
|
meillo@37
|
138 kernighan pike unix prog env
|
meillo@37
|
139 .]
|
meillo@37
|
140 or ``The UNIX System'' by Bourne.
|
meillo@37
|
141 .[
|
meillo@37
|
142 bourne unix system
|
meillo@37
|
143 .]
|
meillo@28
|
144 The reader is
|
meillo@28
|
145 expected to be familiar with the C programming language, although the
|
meillo@30
|
146 document should be understandable without knowledge of C, too.
|
meillo@37
|
147 ``The C Programming Language'' by Kernighan and Ritchie
|
meillo@37
|
148 .[
|
meillo@37
|
149 kernighan ritchie c prog lang
|
meillo@37
|
150 .]
|
meillo@37
|
151 is the definitive guide to C.
|
meillo@28
|
152 Some book about system-level C programming is worthwile additional
|
meillo@28
|
153 literature. Rochkind and Curry have written such books.
|
meillo@37
|
154 .[
|
meillo@37
|
155 rochkind advanced unix prog
|
meillo@37
|
156 .]
|
meillo@37
|
157 .[
|
meillo@37
|
158 curry system prog
|
meillo@37
|
159 .]
|
meillo@31
|
160 As large parts of the code are old, old books are likely more helpful
|
meillo@31
|
161 to understanding.
|
meillo@28
|
162 The format of email messages as well as the structure of email transfer
|
meillo@28
|
163 systems should be familiar to the reader, at least on a basic level.
|
meillo@31
|
164 It's advisable to have at least cross-read the RFCs 821 and 822.
|
meillo@31
|
165 Further more, basic understanding of MIME is good to have.
|
meillo@31
|
166 The Wikipedia provides good introduction-level information to email.
|
meillo@28
|
167 Frequent references to the Unix philosophy will be made.
|
meillo@34
|
168 Gancarz had tried to sum the philosophy up in his book
|
meillo@34
|
169 ``The UNIX Philosophy''.
|
meillo@34
|
170 .[
|
meillo@34
|
171 gancarz unix phil
|
meillo@34
|
172 .]
|
meillo@34
|
173 Even better but less concrete are ``The UNIX Programming Environment''
|
meillo@34
|
174 .[
|
meillo@34
|
175 kernighan pike unix prog env
|
meillo@34
|
176 .]
|
meillo@34
|
177 and ``The Practice of Programming''
|
meillo@34
|
178 .[
|
meillo@34
|
179 kernighan pike practice of prog
|
meillo@34
|
180 .]
|
meillo@34
|
181 by Kernighan and Pike.
|
meillo@34
|
182 The term paper ``Why the Unix Philosophy still matters''
|
meillo@34
|
183 .[
|
meillo@34
|
184 why unix phil still matters schnalke
|
meillo@34
|
185 .]
|
meillo@34
|
186 by myself
|
meillo@28
|
187 provides an overview on the topic, including a case study of MH.
|
meillo@30
|
188 Although a brief introduction to MH is provided in Chapter 1, the reader
|
meillo@30
|
189 is encouraged to have a look at the \fIMH Book\fP by Jerry Peek.
|
meillo@34
|
190 .[
|
meillo@34
|
191 peek mh
|
meillo@34
|
192 .]
|
meillo@30
|
193 It is the definitive guide to MH and nmh.
|
meillo@31
|
194 The current version is available freely on the Internet.
|
meillo@30
|
195 .P
|
meillo@30
|
196 This document is neither a user's tutorial to mmh nor an introduction
|
meillo@31
|
197 to any of the topics covered. It discusses Unix, email
|
meillo@30
|
198 and system design on an advanced level.
|
meillo@30
|
199 However, as knowledge of the fundamental concepts is the most valuable
|
meillo@31
|
200 information a user can aquire about some program or software system,
|
meillo@31
|
201 this document might be worth a read for non-developers as well.
|
meillo@8
|
202
|
meillo@8
|
203
|
meillo@28
|
204 .U2 "Organization
|
meillo@0
|
205 .P
|
meillo@28
|
206 Which font for what use.
|
meillo@28
|
207 Meaning of `foo(1)'.
|
meillo@28
|
208 RFCs.
|
meillo@28
|
209 .P
|
meillo@28
|
210 This thesis is devided into XXX chapters, ...
|
meillo@24
|
211 .P
|
meillo@24
|
212 .I Chapter 1
|
meillo@24
|
213 introduces ...
|
meillo@24
|
214 .P
|
meillo@24
|
215 .I Chapter 2
|
meillo@24
|
216 describes ...
|
meillo@24
|
217 .P
|
meillo@24
|
218 .I Chapter 3
|
meillo@24
|
219 covers ...
|
meillo@24
|
220
|
meillo@23
|
221
|
meillo@28
|
222 .U2 "Acknowledgments
|
meillo@23
|
223 .P
|
meillo@24
|
224 To be written at the very end.
|
meillo@0
|
225
|
meillo@0
|
226
|
meillo@0
|
227 .\" End or Preface. Start of the normal text.
|
meillo@0
|
228 .\" Switch to arabic page numbers and start on a right page.
|
meillo@30
|
229 .
|
meillo@8
|
230 .if e \{
|
meillo@8
|
231 . pn 1
|
meillo@8
|
232 . af PN 1
|
meillo@8
|
233 .\}
|
meillo@8
|
234 .if o \{
|
meillo@8
|
235 . pn 0
|
meillo@8
|
236 . af PN 0
|
meillo@8
|
237 . bp
|
meillo@8
|
238 .\}
|