meillo@0: .H0 "Preface" no meillo@0: meillo@23: .P meillo@87: I have discovered the mail client \fInmh\fP in Fall 2009. meillo@87: At that time I used \fImutt\fP, as many advanced Unix users do. meillo@87: When I read about nmh, its concepts convinced me at once. meillo@87: The transition from mutt to nmh was similar to beginning with meillo@87: file management in the Unix shell when being used to the meillo@53: \fImidnight commander\fP, meillo@87: or like starting with vi when being used to modeless editors. meillo@87: Such a change is not trivial, but, in being convinced by the meillo@31: concepts and by having done similar transitions for file management meillo@53: and editing already, it was not too difficult. meillo@51: In contrast, setting up nmh to a convenient state became a tedious task meillo@23: that took several months. meillo@28: Once having nmh arranged to a convenient state, I enjoyed using it meillo@28: because of its conceptional elegance and its scripting capabilities. meillo@87: Nevertheless, it still was inconvenient for handling attachments, meillo@87: non-ASCII character encodings, and similar features of modern emailing. meillo@31: My setup demanded more and more additional configuration and helper scripts meillo@87: to have nmh behave the way I wanted; yet my meillo@31: expectations were rather common for modern emailing. meillo@31: In being a computer scientist and programmer, meillo@31: I wanted to improve the situation. meillo@8: .P meillo@31: In Spring 2010, I asked on the \fInmh-workers\fP mailing list for the meillo@53: possibility to offer a Google Summer of Code project for me. meillo@53: Participating in the development of nmh this way appeared attractive to me, meillo@87: because I would have been able to work full time on nmh. meillo@53: Although the nmh community had been generally positive on the suggestion, meillo@53: the administrative work for a GSoC project had been to much to have meillo@53: it realized. meillo@53: Nontheless, my proposal had activated the nmh community. meillo@31: In the following weeks, goals for nmh's future were discussed. meillo@31: In these discussions, I became involved in the meillo@53: question whether nmh should include mail transfer facilities. meillo@34: .[ meillo@34: nmh-workers thread mta mua meillo@34: .] meillo@87: I argued for the MTA of nmh to be removed. meillo@87: In this fundamental question, meillo@87: my opinion differed from the opinion of most others. meillo@87: Sadly, besides the discussions, hardly any real work was done. meillo@87: Being unable to work on nmh in a way that would be accepted at university meillo@87: as part of my studies, I needed to choose another project. meillo@8: .P meillo@23: Half a year later, starting in August 2010, meillo@23: I took one semester off to travel through Latin America. meillo@87: During my time in Argentina, I wanted to work on Free Software. meillo@23: This brought me back to nmh. meillo@53: Richard Sandelman, an active nmh user, cared for the official basis. meillo@53: Juan Granda, an argentine Free Software developer, meillo@87: provided a computer with Internet connection. meillo@53: Thanks to them, I was able to work on nmh during my three-month meillo@87: stay in Santiago del Estero, Argentina. meillo@87: Quickly it became obvious that I wouldn't succeed with my main goal, meillo@87: to improve the character encoding handling. meillo@87: (One of its ramifications is the meillo@87: missing transfer decoding of quoted text in replies.) meillo@23: As this is one of the most intricate parts of the system, the goal meillo@53: was simply set too high. meillo@53: Instead, I improved the code base as I read through it. meillo@87: I found minor bugs for which I proposed fixes. meillo@53: In the same go, I improved the documentation in minor ways. meillo@53: When I started with larger code changes, meillo@53: I had to discover that the community was reluctant to change. meillo@53: Its wish for compatibility was much stronger than its meillo@31: wish for convenient out-of-the-box setups \(en in contrast to my opinion. meillo@52: This led to long discussions, again. meillo@53: I came to understand their point of view, but it was different to mine. meillo@23: At the end of my three-month project, I had become familiar with meillo@87: nmh's code base and community, meillo@53: I had improved the project in minor ways, meillo@87: and I still was convinced that I wanted to continue to do so. meillo@23: .P meillo@53: Another half year later, the end of my studies came within reach. meillo@23: I needed a topic for my master's thesis. meillo@52: No question, I wanted to work on nmh. meillo@53: But well, not exactly on nmh, because I had accepted that the meillo@53: nmh community has different goals than I have. meillo@87: Working on nmh would result in much discussion and, in consequence, meillo@87: little progress. meillo@23: After careful thought, I decided to start an experimental version of nmh. meillo@31: I wanted to implement my own ideas of how an MH-like system should look like. meillo@31: I wanted to create a usable alternative version to be compared with meillo@31: the present state of nmh. meillo@53: Eventually, my work would be proven successful or not. meillo@53: In any case, the nmh project would profit from my experiences. meillo@28: meillo@30: .U2 "Focus of this Document meillo@8: .P meillo@53: This document explains the design goals and implementation decisions meillo@53: for mmh. meillo@31: It discusses technical, historical, social and philosophical considerations. meillo@31: On the technical side, this document meillo@31: explains how an existing project was stream-lined by removing rough edges meillo@31: and exploiting the central concepts better. meillo@31: On the historical meillo@31: side, changes through time in the use cases and the email features, meillo@31: as well as the reactions to them, are discussed. meillo@31: Socially, this document describes the effects meillo@28: and experiences of a newcomer with revolutionary aims entering an old meillo@53: and matured software project. meillo@53: Philosophical thoughts on style, mainly based to the Unix meillo@53: philosophy, are present throughout the discussions. meillo@53: The document describes the changes to nmh, meillo@53: but as well, it clarifies my personal perception of the meillo@53: concepts of MH and Unix, and explain my therefrom resulting point of view. meillo@23: .P meillo@31: This document is written for the community around MH-like mail systems, meillo@31: including developers and users. meillo@52: Despite the focus on MH-like systems, this document is may be precious meillo@31: to anyone interested in the Unix philosophy and anyone in contact to meillo@31: old software projects, be it code or community-related. meillo@28: .P meillo@53: The reader is expected to be well familiar with Unix, C and emailing. meillo@53: Good Unix shell knowledge is required, because MH relies fundamentally meillo@28: on the shell. Without the power of the shell, MH becomes a motorbike meillo@30: without winding roads: boring. meillo@31: Introductions to Unix and its shell can be found in ``The UNIX Programming meillo@37: Environment'' by Kernighan and Pike meillo@37: .[ meillo@37: kernighan pike unix prog env meillo@37: .] meillo@37: or ``The UNIX System'' by Bourne. meillo@37: .[ meillo@37: bourne unix system meillo@37: .] meillo@53: The reader is assumed to be a C programmer, meillo@53: but the document should be understandable otherwise, too. meillo@53: The definitive guide to C is Kernighan and Ritchie's meillo@53: ``The C Programming Language''. meillo@37: .[ meillo@37: kernighan ritchie c prog lang meillo@37: .] meillo@52: Some book about system-level C programming can be helpful meillo@52: additional literature. Rochkind and Curry have written such books. meillo@37: .[ meillo@37: rochkind advanced unix prog meillo@37: .] meillo@37: .[ meillo@37: curry system prog meillo@37: .] meillo@53: As large parts of the source code are old, meillo@53: old books are likely more helpful for understanding. meillo@53: The reader is expected to know the format of email messages and meillo@53: the structure of email transfer systems, at least on a basic level. meillo@53: It's advisable to have cross-read the RFCs 821 and 822. meillo@31: Further more, basic understanding of MIME is good to have. meillo@31: The Wikipedia provides good introduction-level information to email. meillo@53: .P meillo@28: Frequent references to the Unix philosophy will be made. meillo@53: Gancarz has tried to sum it up in his book meillo@34: ``The UNIX Philosophy''. meillo@34: .[ meillo@34: gancarz unix phil meillo@34: .] meillo@47: Even better, though less concrete, are ``The UNIX Programming Environment'' meillo@34: .[ meillo@34: kernighan pike unix prog env meillo@34: .] meillo@34: and ``The Practice of Programming'' meillo@34: .[ meillo@34: kernighan pike practice of prog meillo@34: .] meillo@34: by Kernighan and Pike. meillo@34: The term paper ``Why the Unix Philosophy still matters'' meillo@34: .[ meillo@34: why unix phil still matters schnalke meillo@34: .] meillo@34: by myself meillo@53: provides an overview on the philosophy, including a case study of MH. meillo@53: .P meillo@30: Although a brief introduction to MH is provided in Chapter 1, the reader meillo@53: is encouraged to have a look at the \fIMH Book\fP meillo@53: ``MH & nmh: Email for Users & Programmers'' by Jerry Peek. meillo@34: .[ meillo@34: peek mh meillo@34: .] meillo@53: The current version is available freely on the Internet. meillo@30: It is the definitive guide to MH and nmh. meillo@30: .P meillo@30: This document is neither a user's tutorial to mmh nor an introduction meillo@53: to any of the topics covered. meillo@53: The technical discussions are on an advanced level. meillo@52: Nevertheless, as knowledge of the fundamental concepts is the most valuable meillo@51: information a user can acquire about some program or software system, meillo@52: this document may be worth a read for non-developers as well. meillo@8: meillo@8: meillo@28: .U2 "Organization meillo@0: .P meillo@28: Which font for what use. meillo@28: Meaning of `foo(1)'. meillo@28: RFCs. meillo@28: .P meillo@68: References to source code repository commits are printed as meillo@68: .Ci 1a2b3c4 . meillo@68: They can be looked up with meillo@68: .Cl "git show XXX meillo@68: on the command line or meillo@68: online at meillo@68: .CW "http://git.marmaro.de/?p=mmh;a=commitdiff;h=XXX" , meillo@68: replacing `\f(CWXXX\fP' with the hash value. meillo@68: In this example: meillo@68: .Cl "git show 1a2b3c4 meillo@68: or meillo@68: .CW "http://git.marmaro.de/?p=mmh;a=commitdiff;h=1a2b3cd" . meillo@68: Whereas the code repository will probably be available on the Internet meillo@68: forever, a website URL is always at risk to change. meillo@68: .P meillo@51: This thesis is divided into XXX chapters, ... meillo@24: .P meillo@24: .I Chapter 1 meillo@24: introduces ... meillo@24: .P meillo@24: .I Chapter 2 meillo@24: describes ... meillo@24: .P meillo@24: .I Chapter 3 meillo@24: covers ... meillo@24: meillo@23: meillo@28: .U2 "Acknowledgments meillo@23: .P meillo@24: To be written at the very end.