docs/master

annotate preface.roff @ 105:9ff356d84c57

Added reference to Allman to the text; added missing reference to ML.
author markus schnalke <meillo@marmaro.de>
date Thu, 21 Jun 2012 08:58:56 +0200
parents 7ca31b06b653
children 3c4e5f0a7e7b
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.