docs/master

view preface.roff @ 143:996c4ac500df

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