New Developer Documentation

Bron Gondwana brong at
Mon Jun 8 07:47:34 EDT 2015

So as we keep running into the same problems over and over again for new people, it becomes obvious that we need to document the process for a new developer to get from zero to first accepted commit.

I'll work with Nicola on this tomorrow as well, but here's a rough overview of the bits that I want to cover.

Overview: the components

* Cyrus IMAPd:
* Cyrus SASL:
* Cassandane:
* Caldav Tester:
* IMAPTest:
* Arcanist / phabricator integration

Dependencies / Pre-requisite:

* Debian / Ubuntu
* Fedora / Redhat

Running a basic server:

What I want to do here is get you up and running with a local instance of Cyrus with a basic incoming and outgoing mail flow.  I don't care if it's a docker image with everything else and a checkout of a point in time, but it would be great to have everyone with a "real" environment that you can run a Cyrus master build in and actually use as an email / caldav / carddav server with all the bits and pieces.

* setting up sasl auth daemon
* setting up SSL certificates
* setting up lmtp daemon delivery
* setting up imapd / pop3d to listen

More than basic:

* Event Source (we need a listener that just logs events to syslog)
* Murder
* Replication
* Alt Namespace / UnixHS
* Search (squat, xapian, ...)
* Split meta
* Archive partition
* Conversations
* ...


* automake / configure versions and issues
* old dependencies
* configuration variables
* file permissions
* init scripts
* external stuff: authentication and SSL
* Perl modules and versions/paths
* install paths and finding bin/library files
* ...

Welcome to the Cyrus IMAPd source code:

* cmulocal - m4 macros for automake - used to be shared with Cyrus-SASL
* - automake configure template
* com_err - (system vs this one... issues)
* contrib - is anything still useful in here? (well, drydock of course)
* cunit - unit tests (still on little coverage, need more!)
* depot - looks like old testing stuff, still used?
* doc - various out-of-date documentation, also doc/internal
* imap - tons of stuff, see below
* imtest - simple program to test if authentication and SSL is set up correctly
* lib - tons of stuff, see below
* lib* - pkgconfig files for the 3 libraries, see below
* - automake makefile template
* master - control program (to be called cyr_master eventually) which manages all the daemons, servers and periodic tasks for a running Cyrus instance
* netnews - programs for nntp service
* notifyd - notify protocol listener (event source and sieve notifications)
* perl - perl libraries for Cyrus, used by cyradm, managesieve client and annotator daemon
* ptclient - ldap/kerberos group fetcher (I think, I don't use it)
* sieve - sieve protocol handling - separate from lmtpd because it used to be a standalone package
* snmp - just a single shell script, collect stats (I don't use SNMP either)
* SMakefile - probably unused junk
* timsieved - again, since sieve was separate, standalone daemon for sieve protocol server
* tools - various helpers in states of disrepair


* A guide to lib and imap individual files
* A guide to master
* the three libraries (libcyrus_min, libcyrus, libcyrus_sieve)
* the imap directory library (libcyrus_imap)

* configure options and why to choose them
* optional dependencies (particularly the ones which aren't upstream or aren't recent upstream - e.g. libical, xapian)

* an overview of the files that a running Cyrus creates and their formats

* an overview of the major datastructures used within the code, and how they are used

* coding style, git commit messages, all that good stuff

* how to use phabricator, git branches on github or similar, or even patches emailed to the mailing list to communicate.

* the usual open-source thing of "if your change isn't a basic part of what we were already planning, are you planning to be around to support it - and can you justify why it's in the best interests of the project to have your change included".

* meetings, IRC channels, mailing lists, how to be part of the community.

That's a rough overview for now.  I'll start fleshing out bits of this once I've had a chat to Nicola about how best to lay it out and include it into the current website.


  Bron Gondwana
  brong at

More information about the Cyrus-devel mailing list