meillo@0: .H0 "Preface" no meillo@0: meillo@23: .P meillo@23: MH is a set of mail handling tools with a common concept, like meillo@23: the Unix toolchest 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@28: This thesis describes creating an experimental version of nmh, meillo@28: named \fImmh\fP, meillo@28: to modernize, stream-line and to exploit the concepts meillo@28: even more thoroughly. 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@28: mail client mutt, like many command line-attracted Unix users do. meillo@28: The concepts of nmh had convinced me at once and thus learning meillo@23: its different model of email handling had been relatively easy. meillo@23: The change was like meillo@28: managing files in the Unix shell when being used to graphical file meillo@28: managers, or like learning vi when being used to modeless editors. meillo@28: The transition had not been trivial but, as I was convinced by the new meillo@28: concepts and meillo@28: already managed my files with shell tools and edited with vi, not too meillo@28: 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@8: inconvenient in handling attachments, non-ASCII character encodings, meillo@23: and similar features of modern emailing. meillo@28: My setup required more and more additional configuration and helper scripts meillo@28: to have nmh act the way I expected it to behave, although my meillo@28: expectations were rather common for modern emailing than exceptionel. meillo@23: In being a software developer, I wanted to improve the situation. meillo@8: .P meillo@8: In Spring 2010, I asked on the nmh-workers mailing list for the meillo@23: possibility to offer a Google Summer of Code project on nmh. meillo@23: Participating in the development this way appeared attractive to me, meillo@23: especially as it would have been possible to have the project meillo@23: accepted at university. Although the nmh community meillo@23: generally had been positive on the meillo@23: suggestion, eventually it had not been possible to manage the meillo@23: administrative work. Though my proposal had started the nmh community meillo@23: to move. In the following weeks, goals for nmh's future were discussed meillo@23: on the list. During the discussions, I became involved in the meillo@23: question whether nmh should be an MTA. (Thread subject: meillo@23: ``should nmh be an MTA or an MUA?''.) meillo@23: In this point, my opinion differed from the opinion of most others meillo@23: as I voted for the MTA facility of nmh to be removed. meillo@8: .P meillo@28: Being unable to work on nmh in a way that would be meillo@28: accepted as part of my official studies, I had to pick another project. meillo@23: Half a year later, starting in August 2010, meillo@23: I took one semester off to travel through Latin America. meillo@23: Within this time, I had to do practical computer work for three meillo@23: 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@23: Estero in Argentina, provided a computer and Internet connection for meillo@23: my work. meillo@23: Within the three month, I became familiar with nmh's code base and meillo@23: its community. I learned how things work. Quickly it became obvious that meillo@23: I wouldn't succeed with my main goal, to improve the character meillo@23: encoding handling within the project. One obvious problem is the missing meillo@23: transfer decoding of the quoted text in replies. meillo@23: As this is one of the most intricate parts of the system, the goal meillo@23: was simply too difficult to reach. meillo@23: Instead I improved the code as I read through it. I found minor bugs meillo@23: for which I proposed fixes to the community. Also I meillo@23: could improve the documentation. When I started with meillo@8: larger code changes, I had to discover that the community's wish for meillo@8: compatibility was stronger than its wish for convenient meillo@23: out-of-the-box setups \(en in contrast with my opinion. meillo@23: This lead to long discussions, again. meillo@23: I came to understand their point of view, but it simply is not mine. meillo@8: .P meillo@23: At the end of my three-month project, I had become familiar with meillo@23: nmh's code base and its community. I had improved the project a bit meillo@23: and I still was convinced that I wanted to go on with that. 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@23: than I have. This would result in long discussions and thus few progress. meillo@23: After careful thought, I decided to start an experimental version of nmh. meillo@23: I wanted to follow my own ideas of how nmh should look like. I wanted meillo@23: to see where that would lead to. I wanted to compare the result of my meillo@23: work to the present state of nmh. Time should prove me successful or meillo@23: not. meillo@23: Nmh would hardly be hurt by my work as I would not interfere with meillo@28: them. But nmh would profit from my experiences. meillo@28: meillo@30: .U2 "Focus of this Document meillo@8: .P meillo@28: This document describes my work on the experimental version, named meillo@28: \fImmh\fP. It explains the changes I did to nmh, with having the focus meillo@28: on the reasons for the changes. It discusses technical, historical, meillo@28: social and philosophical reasons. On the technical side, this document meillo@28: explains how an existing project was stream-lined by exploiting the meillo@28: central concepts better and removing rough edges. On the historical meillo@28: side, changes in the use cases and the features of email and reactions meillo@28: to them are discussed. Socially, this document describes the effects meillo@28: and experiences of a newcomer with revolutionary aims entering an old meillo@28: and matured software projects and its community. Finally, philosophical meillo@28: thoughts on style, mainly based to the Unix philosophy, are present meillo@28: throughout the discussions. meillo@23: .P meillo@30: This document is written for the community around MH-like mail systems meillo@30: \(en developers and users. meillo@28: First of all, the document shall propagade the design goals and meillo@28: implementation decisions of mmh. But as well, it shall clarify my meillo@30: personal perception of the meillo@30: concepts of MH and Unix, and explain the therefrom resulting point of view. meillo@30: Despite the focus on MH-like systems, this document can be worthwhile meillo@28: to anyone interested in the Unix philosophy, as well as anyone meillo@30: involved in 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@28: Introductions to Unix and its shell can be found in XXX. 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@28: The book by Kernighan and Ritchie 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@28: As large parts of the code are old, old books are likely more helpful. 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@28: It's advisable to have had, at least cross-read, the RFCs 821 and 822. meillo@28: The book XXX introduces email well, too. meillo@28: Frequent references to the Unix philosophy will be made. meillo@28: Gancarz XXX had tried to sum the philosophy up. Even better but less meillo@28: concrete is the literature by Kernighan and Pike XXX. meillo@28: The term paper ``Why the Unix Philosophy still matters'' 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@30: It is the definitive guide to MH and nmh. meillo@30: The current version is available freely on the Internet XXX. meillo@30: .P meillo@30: This document is neither a user's tutorial to mmh nor an introduction meillo@30: to any of the topics covered. It contains discussions on 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@30: information over some program or software system a user can aquire, meillo@30: this document might be worth a read for non-developers too. 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: MH vs. nmh vs. mmh. 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. meillo@0: meillo@0: meillo@0: .\" End or Preface. Start of the normal text. meillo@0: .\" Switch to arabic page numbers and start on a right page. meillo@30: . meillo@8: .if e \{ meillo@8: . pn 1 meillo@8: . af PN 1 meillo@8: .\} meillo@8: .if o \{ meillo@8: . pn 0 meillo@8: . af PN 0 meillo@8: . bp meillo@8: .\}