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