meillo@0: .H0 "Preface" no meillo@0: meillo@23: .P meillo@47: MH is a set of mail handling tools with a common concept, similar to meillo@47: the Unix toolchest, which is a set of file handling tools with a common meillo@23: concept. nmh is the currently most popular implementation of an meillo@23: MH-like mail handling system. meillo@47: This thesis describes an experimental version of nmh, named \fImmh\fP. meillo@23: meillo@30: .U2 "Background to this Thesis meillo@8: .P meillo@28: I have discovered nmh in September 2009. At that time I used to use the meillo@31: mail client \fImutt\fP, like many advanced Unix users do. meillo@31: As I read about nmh, its concepts had convinced me at once. meillo@31: Learning its different model of email handling had been relatively easy, meillo@31: because my starting situation was being convinced of the concepts. meillo@31: The transition from mutt to nmh was similar to meillo@28: managing files in the Unix shell when being used to graphical file meillo@31: managers, or like editing with vi when being used to modeless editors. meillo@31: 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@31: and editing already, it was not too difficult neither. meillo@28: In contrast, setting up nmh to a convenient state became a tendious task meillo@23: that took several months. meillo@23: .P 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@23: On the other hand, however, it still was meillo@31: inconvenient for handling attachments, non-ASCII character encodings, meillo@23: and similar features of modern emailing. meillo@31: My setup demanded more and more additional configuration and helper scripts meillo@31: to get nmh behave the way I wanted, although 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@31: possibility to offer a Google Summer of Code project. meillo@23: Participating in the development this way appeared attractive to me, meillo@31: as it would have been possible to have the project meillo@31: accepted at university. Although generally the nmh community meillo@31: had been positive on the meillo@31: suggestion, the administrative work had been to much, eventually. meillo@31: But 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@34: question whether nmh should be an MTA. meillo@34: .[ meillo@34: nmh-workers thread mta mua meillo@34: .] meillo@31: In this central point, my opinion differed from the opinion of most others. meillo@31: I argued for the MTA facility of nmh to be removed. meillo@31: Besides the discussions, hardly any real work was done. meillo@31: Being unable to work on nmh in a way that would be meillo@31: accepted as part of my official 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@31: Within this time, I had to do practical computer work for three months. meillo@23: This brought me back to nmh. meillo@23: Richard Sandelman, an active nmh user, made it possible for meillo@23: me to work on nmh. Juan Granda, living in Santiago del meillo@31: Estero in Argentina, provided a computer with Internet connection for meillo@31: my work. Thanks to them, I was able to work on nmh during my three-month meillo@31: stay in Argentina. meillo@31: Within this time, I became familiar with nmh's code base and meillo@31: community. I learned how things work. Quickly it became obvious that meillo@31: I wouldn't succeed with my main goal: improving the character meillo@31: encoding handling within the project. One of its ramifications is the meillo@31: 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@31: was simply set too high. Hence, I dropped the original plan. meillo@31: Instead, I improved the code base as I read through it. I found minor bugs meillo@31: for which I proposed fixes to the community. In the same go, I meillo@31: improved the documentation in minor ways. When I started with meillo@31: larger code changes, I had to discover that the community was reluctant meillo@31: to change. 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@23: This lead to long discussions, again. meillo@31: I came to understand their point of view, but it is different to mine. meillo@23: At the end of my three-month project, I had become familiar with meillo@31: nmh's code base and community. I had improved the project in minor ways, meillo@31: and I still was convinced that I wanted to go on to do so. meillo@23: .P meillo@23: Another half a year later, the end of my studies came within reach. meillo@23: I needed a topic for my master's thesis. meillo@23: There was no question: I wanted to work on nmh. meillo@23: But well, not exactly on nmh, meillo@8: because I had accepted that the nmh community has different goals meillo@31: than I have. This would result in much discussion and thus 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 see where that would lead to. meillo@31: I wanted to create a usable alternative version to be compared with meillo@31: the present state of nmh. meillo@31: My work should be proved successful or failed. meillo@31: The nmh project would not be hurt by my work, but meillo@31: it would profit from my experiences. meillo@28: meillo@30: .U2 "Focus of this Document meillo@8: .P meillo@47: This document describes my work on mmh. meillo@47: It explains the changes to nmh, with focus on their reasons. 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@31: and matured software projects. meillo@31: Finally, philosophical thoughts on style, mainly based to the Unix philosophy, meillo@31: are present throughout the discussions. meillo@23: .P meillo@31: This document is written for the community around MH-like mail systems, meillo@31: including developers and users. meillo@31: First of all, the document shall explain the design goals and meillo@31: implementation decisions for mmh. But as well, it shall clarify my meillo@30: personal perception of the meillo@31: concepts of MH and Unix, and explain my therefrom resulting point of view. meillo@31: Despite the focus on MH-like systems, this document may be worthwhile 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@30: The reader is expected to have good knowledge of Unix, C and emailing. meillo@30: Good Unix shell meillo@28: knowledge, including shell scripting, is required. 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@28: The reader is meillo@28: expected to be familiar with the C programming language, although the meillo@30: document should be understandable without knowledge of C, too. meillo@37: ``The C Programming Language'' by Kernighan and Ritchie meillo@37: .[ meillo@37: kernighan ritchie c prog lang meillo@37: .] meillo@37: is the definitive guide to C. meillo@28: Some book about system-level C programming is worthwile additional meillo@28: 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@31: As large parts of the code are old, old books are likely more helpful meillo@31: to understanding. meillo@28: The format of email messages as well as the structure of email transfer meillo@28: systems should be familiar to the reader, at least on a basic level. meillo@31: It's advisable to have at least 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@28: Frequent references to the Unix philosophy will be made. meillo@34: Gancarz had tried to sum the philosophy 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@28: provides an overview on the topic, including a case study of MH. meillo@30: Although a brief introduction to MH is provided in Chapter 1, the reader meillo@30: is encouraged to have a look at the \fIMH Book\fP by Jerry Peek. meillo@34: .[ meillo@34: peek mh meillo@34: .] meillo@30: It is the definitive guide to MH and nmh. meillo@31: The current version is available freely on the Internet. meillo@30: .P meillo@30: This document is neither a user's tutorial to mmh nor an introduction meillo@31: to any of the topics covered. It discusses Unix, email meillo@30: and system design on an advanced level. meillo@30: However, as knowledge of the fundamental concepts is the most valuable meillo@31: information a user can aquire about some program or software system, meillo@31: this document might 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@28: This thesis is devided 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.