"Exim is written in standard C. It is not an ideal
language because it is so easy to write code with loopholes. Just
think how many buffer overflow exploits have existed in networking
applications over the years. I would have preferred to use a
language that has more checks for this kind of error. However,
given that I wanted to write a program that was portable to a lot
of systems, and which was efficient, C was the only realistic
choice.
As far as development tools go, I suppose the major one is my
test suite. It consists of several Perl scripts and a large number
of testing configurations and test data. Whenever a test is run,
the output is compared with previous output. Every time I fix a bug
or make an addition to Exim, a new test is added to the suite. It
is now sufficiently comprehensive that it usually picks up any
stupidities that I introduce by accident.
Unfortunately, the test suite isn't something that can easily be
exported. It assumes the existence of several local accounts, and
also the existence of a local testing DNS zone. In other words, it
needs a special environment in which to run. It also assumes a
fully-configured Exim, with all possible optional code sections
included."