meillo@0: .H0 "Introduction meillo@0: .P meillo@2: This chapter describes the background of the topics in this thesis. meillo@2: General knowledge of electronic mail is assumed. meillo@8: It explains the situation at the start of the project. meillo@8: It tries to describe from what state the project lifted of and where meillo@8: it headed to. This shall give an overview. meillo@8: meillo@0: meillo@0: .H1 "What is MH? meillo@0: .P meillo@2: MH is an electronic mail system, originating in the RAND Corporation. meillo@2: Historically, it had been a all-in-one mail system, with Mail Transfer meillo@2: Agent (MTA) and Mail User Agent (MUA). meillo@2: Later, when electronic mail systems changed, Mail Submission Agent (MSA) meillo@2: and Mail Retrieval Agent (MRA) facilities were added. meillo@2: The MTA became less important, whereas the MUA became even more the meillo@2: central part. meillo@2: .P meillo@2: First of all, MH is a style of a mail handling system. meillo@2: It had started as a design proposal, not as an implementation, and meillo@2: had in spirit remained so. This is similar to Unix, which much less meillo@2: is a specific software product, as it is a style of system design. meillo@2: meillo@11: .U2 "History meillo@2: .P meillo@2: MH is an electronic mail system, originating in the RAND Corporation. meillo@2: In 1977, Norman Shapiro and Stockton Gaines had proposed the design meillo@2: of a new mail handling system, called ``Mail Handler'' (MH) for RAND, meillo@2: to superseed their ``Mail System'' (MS). meillo@2: Two years later, in 1979, XXX took the proposal and implemented a meillo@2: prototype of MH. It proved successful and replaced MS thereafter. meillo@2: .P meillo@2: A decade later, the University of California had started to use MH. meillo@2: They also took over its development and pushed MH forward. meillo@2: This had been the time when the Internet appeared, Berkeley implemented meillo@2: the TCP stack, and Sendmail was born. MH had often contained the first meillo@2: implementation of new RFCs. meillo@2: .P meillo@2: In the nineties, MH had been moved into the public domain, making it meillo@2: attractive to Free Software developers. The Internet had started to become meillo@2: mainstream and in 1997, Richard Coleman initiated the ``New Mail Handler'' meillo@2: (nmh), a fork of MH. He intended to modernize MH, improve its MIME meillo@2: capabilities, and this should be done openly within the Internet meillo@2: community. Today, nmh almost completely replaced the original MH. meillo@8: .P meillo@9: Three versions of MH are available: meillo@8: .BU meillo@8: .B "Old MH" . meillo@9: In most cases it has been replaced by nmh, but some systems still meillo@9: provide old MH. As nmh is old MH-compatible, there exist few reasons meillo@8: not to upgrade to new. meillo@8: The development of old MH stopped almost completely. meillo@8: .BU meillo@8: .B Nmh . meillo@8: The most widespread version of MH. Backward-compatible to old MH. meillo@8: Provides new featues, which need to be activated explicitely. meillo@8: Its development went slowly in the previous years, but had revived meillo@8: in Fall 2011. meillo@8: .BU meillo@8: .B Mmh meillo@8: A descendent of nmh. Had started as a non-compatible experimental meillo@8: version, but became de facto a fork. Tries to expand the same meillo@9: principle concepts in a more modern way. This version of MH is the meillo@8: subject of this thesis. meillo@0: meillo@11: .U2 "Concepts meillo@0: .P meillo@8: MH is a toolchest, modelled after the Unix toolchest. It consists of a meillo@8: bunch of tools, each covering one task of email handling. These programs meillo@8: operate on a common mail storage. The specific format of the mail storage meillo@8: also defines MH, like the file system structure defines Unix. It meillo@8: consists of directories (mail folders) and files (mail messages). meillo@8: Each file contains exactly one message in the format it had been meillo@8: received (i.e. transfer format). MH tools carry a state (context), meillo@8: consisting of current mail folder and current message. Messages can meillo@8: have symbolic names, like the next or last message or for some meillo@8: arbitrary group of messages. These names are called sequences. meillo@2: .P meillo@8: New MH tools can be build out of existing ones easily. Default values to meillo@8: commands are stored on a command name-basis, making it trivial to have meillo@8: different versions of the same command with different defaults. Most meillo@8: of the configuration is stored in the user's profile. Form templates, meillo@8: e.g. for new messages or replies, are exchangeable and output is generally meillo@8: adjustable with format files. meillo@2: .P meillo@8: MH allows the user to automate almost everything and to modify amost meillo@8: any behavior. The system is scriptable and extendable. meillo@8: meillo@8: meillo@8: .H1 "Understanding of the Code and Community meillo@2: .P meillo@8: In order to understand the state, goals and dynamics of a project, meillo@8: one needs to know its history. MH comes from a time before the meillo@8: Internet, a time before networking became universal, a time when meillo@8: emailing was small, short and simple. Then it grew, spread and meillo@8: adopted to the changes. The core-concepts, however, remained the meillo@8: same. During the XXX a small group of students at the University of meillo@8: California, actively worked on MH. They added features and optimized, meillo@8: like it is common for scientific work. This is still in pre-ANSI C meillo@8: times. The source code contains many ancient parts. Code constructs meillo@8: specific to BSD or hardware of that time are usual. meillo@2: .P meillo@8: Nmh started eight years after the ANSI C standard had been meillo@8: established. A more modern coding style entered the code base. Still meillo@8: a part of the developers come from ``the old days''. The developer meillo@8: base became more diverse and thus the code. Programming practices meillo@8: from different decades merged into the project. Different coding meillo@8: styles came together. It appears as if multiple peers added code meillo@8: parts, resulting in a conclomeration rather than an homogenic meillo@8: of-one-cast mail system. Still, the basic concepts hold it together. meillo@8: They were mostly untouched throughout the years. meillo@8: .P meillo@8: Although, at the surface, nmh is a toolchest, meaning a collection meillo@8: of completely modularized small programs, on the source code level, meillo@8: it is much more interweaved. Parts of the basic functions are meillo@8: collected in a MH standard library, which is good, but often meillo@8: separate functions are compiled into programs, for effiency reasons. meillo@8: This lead to intricate innards. meillo@8: The advent of MIME rose the complexity of email by a magnitude. This meillo@8: is visible in nmh. The MIME-related parts are the most complex ones. meillo@8: It's also visible that MIME support had been added on top of the meillo@8: original MH later. The MH style made this easily possible, but it meillo@8: also lead to duplicated functions (e.g. \fLshow\fP, \fLmhshow\fP) meillo@8: and had not been thoroughly included into the concepts (e.g. the meillo@8: user-visible access to whole messages and MIME parts are inherently meillo@8: different). meillo@8: .P meillo@8: For compatibility's sake, it is a common understanding to have the meillo@8: default settings to be compatible, requiring any new feature to be meillo@8: explicitely enabled. This puts a burden on new users, because nmh meillo@8: out-of-the-box keeps staying in the same ancient style, where users meillo@8: usually want to have it practical for modern emailing. meillo@8: But of course, this depends on if nmh is seen to be a front-end or a meillo@8: back-end. meillo@8: meillo@8: meillo@8: .H1 "My Vision meillo@8: .P meillo@8: The general goals of the mmh project are the following: meillo@8: .BU meillo@8: I believe that mmh should be perfectly suited for modern emailing, meillo@8: out-of-the-box. meillo@8: .BU meillo@8: I care less about compatibility and more about conceptionally elegant meillo@8: approaches. meillo@8: .BU meillo@8: I care for general, clear, and simple concepts. meillo@8: .BU meillo@8: I like to create an of-one-style email system. It should feel like meillo@8: cast as one. meillo@8: .BU meillo@8: I plan to remove any optimizations that rises obscurity, unless it meillo@8: appears to be neccessary to make mmh usable at all. meillo@8: .P meillo@8: .B "The target user in mind meillo@8: likes Unix and its philosophy. meillo@8: He likes to use programs that are conceptionally appealing. meillo@8: He's familiar with the command line and enjoys its power. meillo@8: He is at least capable of shell scripting and wants to improve his meillo@8: productivity by scripting the mail system. meillo@8: His computer and operating system are from post-ANSI C times. meillo@8: He likes to attach files, exchanges text containing non-ASCII meillo@8: characters, signs or encrypts his messages. meillo@8: He does not use bulletin boards anymore, nor non-mbox style mail meillo@8: drops, nor does he rely on compatibility to nmh. meillo@8: He already has and MTA/MSA and MRA running or is able to set them meillo@8: up. meillo@8: He does not want to have to read a book in order to make his MUA meillo@8: usable. meillo@8: meillo@8: meillo@8: .H1 "Things to do meillo@8: .BU meillo@8: Remove any MTA and MRA facilities. Mmh shall concentrate on the MUA meillo@8: task. Mail shall enter mmh's mail storage via the system mail drop meillo@8: and it shall leave mmh via the local \fLsendmail\fP command. meillo@8: .BU meillo@8: Remove any further functions that are not related to mmh's main task. meillo@8: Bulletin board support is on example. Also remove support for ancient meillo@8: technologies, like hardcopy terminals. meillo@8: .BU meillo@8: Refactor the source code to meet modern style criteria. Use meillo@8: standardized library functions when possible. meillo@8: .BU meillo@8: Replace performance optimizations by clear and readable code. meillo@8: .BU meillo@8: Reduce the feature set to the commonly used one, removing meillo@8: corner-cases. Set sane default values. meillo@8: .BU meillo@8: Add better attachment support. Add support for digital signatures and meillo@8: encryption. meillo@8: .BU meillo@8: Merge \fLshow\fP and \fLmhshow\fP into one single mail display program. meillo@8: Integrate MIME support deeper and more natural into MH. meillo@8: .BU meillo@8: Provide a ready-to-use setup out-of-the-box.