[Dovecot] Dovecot shared library to replace libc-client

Timo Sirainen tss at iki.fi
Tue Jul 3 09:12:36 EEST 2012


On 3.7.2012, at 8.53, Asheesh Laroia wrote:

> I see there is a dovecot shared library. I haven't looked into the 
> details, but here are things I'm interested in:
> 
> 1. Replacing libc-client's use as a client library
..
> I envision creating libdovecot-c-client-alike that is a set of headers 
> and a library that is API-compatible with (at least a subset of) 
> c-client. You can call that a "compatibility shim." Then e.g. php5-imap 
> could be given the path to those headers and the corresponding 
> libdovecot-c-client-alike library, and when it thinks it is linking to 
> c-client, it could instead link to the libdovecot-c-client-alike.

Yeah, that's a possibility. Although Dovecot's libraries are still more about the server side stuff than client side stuff, so it's possible that there are many important missing things. Also libc-client is commonly used to do IMAP access and Dovecot's imapc backend is still lacking quite a lot of that functionality.

> This might be convenient if you want to limit how much of a public API 
> is presented by the current "dovecot.so" that gets installed in e.g. 
> /usr/lib/dovecot/. The compatiblity shim could have a small API, and if 
> you don't want provide ABI guarantees within dovecot.so, the shim could 
> dlopen() dovecot.so rather than link to it.

I'm still not ready to give ABI or even API guarantees to libdovecot.. There are still several important large changes to do and I don't really want to keep a ton of ugly backwards compatibility stuff just for external users of the library. Also another potential problem is that libdovecot.so doesn't use a global namespace prefix for all of its functions, so linking it with php could cause symbol name conflicts (especially md5_*, sha1_* and such could cause trouble, like they already have caused with libmysql).

Once Dovecot becomes more "finished" (a few years?) I could consider API/ABI guarantees.. Of course nothing prevents anyone else from distributing a (patched) libdovecot already that actually does give some ABI guarantees. I just don't want to spend time on it. And v2.1 -> v2.2 -> v2.3 etc. transitions are going to be large changes.

> 2. Use of Dovecot shared library within alpine, embedding the imapd
> 
> Right now, the mail client "alpine" embeds a copy of the UW IMAP 
> source. It uses this when accessing local mail spools, for example.
> 
> If Dovecot's IMAPd were available as a shared library, perhaps with a 
> c-client-like API, (although not necessarily -- it would be feasible to 
> upgrade alpine to a different API), then alpine could use Dovecot's 
> mail drivers directly.

I wonder if it would make any sense to for Alpine not use libdovecot API directly but rather talk IMAP protocol to Dovecot code (maybe running in a separate process)? The Dovecot configuration could be passed pretty easily from Alpine code without requiring any extra config files.


More information about the dovecot mailing list