lei design notes ---------------- Daemon architecture ------------------- The use of a persistent daemon works around slow startup time of Perl. This is especially important for built-in support for shell completion. It attempts to support inotify and EVFILT_VNODE background monitoring of Maildir keyword changes. If lei were reimplemented in a language with faster startup time, the daemon architecture would likely remain since it also lets us easily decouple the local storage from slow IMAP/NNTP backends and allow us to serialize writes to git-fast-import, SQLite, and Xapian across multiple processes. The coupling of IMAP and NNTP network latency to local storage is a current weakness of public-inbox-watch. Therefore, -watch will likely adopt the daemon architecture of lei in the future. Read/write vs read-only storage ------------------------------- public-inboxes are intended to be written and read by different Unix users. Commonly, a single Unix user or group will write to a public-inbox, but the inbox will be served by a user with read-only permissions (e.g. "www-data" or "nobody"). lei/store is intended to be read and written by a single user, thus we can rely on the Write-Ahead-Log journal of SQLite to improve performance: <https://sqlite.org/wal.html>