Review of exim

exim is an MTS written by Philip Hazel for AIX, BSDI, DGUX, FreeBSD, HI-OSF (Hitachi), HP-UX, IRIX, Linux, MIPS RISCOS, NetBSD, OpenBSD, DEC OSF1 (aka Digital UNIX), SCO, SCO SVR4.2 (aka UNIX-SV), SunOS4, SunOS5 (aka Solaris 2), Ultrix, and Unixware.

It supports most of the more recent innovations that one would expect of a modern mail system:

exim has an official web page run by the author, but no third-party user-run web pages.

exim uses the same design as smail version 3.

exim's design is very similar to that of smail version 3. It uses the concepts of "transports", "directors", and "routers", which smail users will have little difficulty understanding (but which might be confusing to those used to the comparatively straight "paper paths" of qmail and postfix).

exim has aliasfile and forwardfile directors that support /etc/aliases and ~/.forward files, as well as variations on the same theme. Its appendfile transport supports delivery to both "mbox" and "Maildir" format mailboxes.

exim has excellent documentation.

exim has possibly the best documentation of any Unix MTS.

The "Exim Specification" on the official web site is highly detailed, well presented, and extensive. It covers both the high-level abstract design of the system and the nitty-gritty details of individual options and configuration file keywords.

The "Exim Frequently Asked Questions" document is clear and also well presented. It covers a wide range of topics, yet manages not to be as terse as the documentation for other MTSes.

exim is monolithic with a vengance.

Like Sendmail and smail, exim comprises one, single, huge set-UID root binary. This binary can be invoked by a variety of names, each of which alters the default behaviour (in the absence of subsequent command line options): exim, sendmail, runq, mailq, rsmtp, rmail, and newaliases.

The command line syntax is similar, but not identical, to that of Sendmail, meaning that exim can be used as a drop-in replacement for /usr/lib/sendmail as it is commonly used. exim extends the "traditional" Sendmail syntax with command line options from smail and some exim-specific extensions.

Unlike qmail and Postfix (and, to a lesser extent, MMDF and Zmailer), there is no clear security partitioning in exim at all. The program supposedly drops its root privileges where appropriate, but short of a full audit of the entire source code of the program (which no-one has ever reported doing), it is difficult to prove that it performs each task with the minimum privileges that are required.

exim scales very poorly.

In those tests that have been published by various people over the years, exim has consistently performed far worse under heavy load than either qmail or Postfix. There are several aspects of its design that could account for this.

Furthermore, exim uses one, single, huge configuration file. This is read and parsed by every exim process at startup. Because in some situations, exim exec()s itself in order to reset its state, or to regain root privileges, parsing this configuration file can incur non-trivial overhead.

Where and what to download

exim is only available in source form, not as precompiled or prepackaged binaries. There is a list of FTP sites that hold the source tarball on the official web site.

© Copyright 1998–2004 Jonathan de Boyne Pollard. "Moral" rights asserted.
Permission is hereby granted to copy and to distribute this web page in its original, unmodified form as long as its last modification datestamp information is preserved.