Thanks Dan for this comprehensive email.

I'll take ITP bug for libmdb (#694757) under pkg-db umbrella, as it will
affect Berkeley DB, so it makes sense to have it there.

People are most welcome to join the team, as I am the only active person in
the team.

O.


On Tue, Jul 2, 2013 at 4:38 PM, Dan Shearer <d...@shearer.org> wrote:

> On Tue, Jul 02, 2013 at 09:44:10AM +0200, Ondrej Sury wrote:
>
> > Florian Weimer has correctly pointed out that Oracle has decided to
> change
> > the BDB 6.0 license to AGPLv3 (
> > https://oss.oracle.com/pipermail/bdb/2013-June/000056.html).
>    :
> > we (as the Debian project) need to take a decision.
>    :
>
> (because the AGPLv3 is incompatible with GPLv2-only, and other licenses,
> and there is code under these licenses which depends on BDB. There is
> also code which depends on BDB that is compatible with the AGPLv3
> legally, but whose deployment would then be restricted in ways the users
> would not be expecting.)
>
> > As far as I am aware the most prominent users of Berkeley DB are
> > moving away from the library anyway ...
>
> There are actually very few true alternatives to BDB. While there are
> many KVP (key value pair) stores [1] not many are transactional, allow
> multi-version concurrency control [2] and support multi-threaded and
> multi-process access. BDB is all of the above, and in addition the BDB
> API has become very widely used over nearly 30 years. And of course the
> BSD license allowed BDB to be embedded in a huge amount of software -
> like the BSD networking stack, it turns up just about everywhere.
>
> So there are three things to think about in a replacement:
>
> 1. Is the licensing as suitable as the BSD license has been, and is
> the primary maintainer likely to do what Oracle just did to BDB?
>
> 2. Are the features at least as good as BDB, and is the API close enough
> to make replacement reasonably easy?
>
> 3. BDB is very old code. When replacing it can we also adopt modern
> approaches more suited to modern hardware and use cases?
>
> I've looked at all of the KVP options I am aware of and consulted people
> who specialise in the space and can only see one that fits each of these
> well. MDB from the OpenLDAP project, http://symas.com/mdb/ .
>
> As to point 1, the rights holders of MDB need to make a public
> statement, but I have asked them in private and in any case the OpenLDAP
> history speaks for itself.
>
> As to point 2, MDB provides a superset of the KVP-specific features of
> BDB, and the API is similar to BDB but somewhat simpler.
>
> As to point 3, MDB is a from-scratch implementation in the modern world.
> MDB object code is a tiny fraction of BDB, and by adopting a
> memory-mapped architecture and dispensing with caching and locking it
> relies on modern operating system features rather than trying to
> implement them internally. This means greatly increased performance and
> very much smaller windows for corruption to occur. MDB has very clean
> support for concurrency compared to BDB, which makes it much more
> suitable for modern applications.
>
> There is an technical discussion of MDB here:
> http://symas.com/mdb/20120829-LinuxCon-MDB-txt.pdf . Some performance
> data has been published, one simple test that has a minimum of
> imaginable bias is to compare the SQLite3 API that comes with Oracle BDB
> with the SQLite3 ported to MDB. The other obvious speed test (that has
> had reproducible data published) is with OpenLDAP, which has pluggable
> back ends including both BDB and MDB.
>
> I'll be delighted if someone can suggest something that is even more
> suitable than MDB, but so far I haven't seen it.
>
> Looking at the Debian archive, packages with BDB dependencies are as
> follows (MDB integration has been marked where it exists, currently
> about 10% of the packages.):
>
>     389-ds-base
>     animals
>     apr-util
>     apt
>     bind9
>     bitcoin
>     bmf
>     bogofilter
>     boxbackup
>     cairo-dock-plug-ins
>     canl-c++
>     cfengine2
>     cfengine3    LMDB support published
>     chise-base
>     c-icap
>     citadel
>     claws-mail
>     clisp
>     cyrus-imapd-2.4
>     cyrus-sasl2 LMDB support published
>     db-defaults
>     dnshistory
>     dovecot
>     drac
>     dsniff
>     evolution-data-server
>     evolution-exchange
>     exim4
>     fsvs
>     ggcov
>     glusterfs
>     gridengine
>     guile-db
>     heimdal     LMDB supported
>     hotkeys
>     hpsockd
>     inn2
>     iproute
>     iproute2
>     isync
>     jabberd2
>     libetpan
>     libnss-db
>     libpam-abl
>     libpam-ccreds
>     libpinyin
>     libqxt
>     librcc
>     lucene2
>     mailavenger
>     memcachedb  LMDB support published
>     mit-scheme
>     mmorph
>     moc
>     netatalk
>     nmh
>     nordugrid-arc
>     nss-updatedb
>     nvi
>     onak
>     open-cobol
>     opendkim    LMDB supported
>     openldap    LMDB supported
>     pam
>     pavuk
>     perdition
>     perl
>     php5
>     poedit
>     postfix     LMDB support published
>     prayer
>     python2.7   LMDB supported
>     python3.2   LMDB supported
>     python3.3   LMDB supported
>     python-bsddb3
>     radiusd-livingston
>     redland
>     reprepro
>     resiprocate
>     rhmessaging
>     rpm
>     ruby-bdb    LMDB supported
>     sendmail
>     skksearch
>     skktools
>     sks
>     spamprobe
>     squid
>     squid3
>     squidguard
>     subversion
>     syrep
>     tcpstat
>     torrus
>     trustedqsl
>     vacation
>     webalizer
>     webdruid
>     wvstreams
>     xastir
>     xemacs21
>     zeroc-ice
>
>
> HtH,
>
> --
> Dan Shearer
> d...@shearer.org
>
>
>
> [1] KVP: Key value pair store is an unordered list of paired items, with
> an index.  http://en.wikipedia.org/wiki/Attribute-value_pair . On top of
> this view you can layer tables (eg SQL RDBMS), special-purpose trees (eg
> LDAP, DNS) or other models.
>
> [2] MVCC is about avoiding locks by giving readers a consistent view of
> the data store at a given point in time. BDB implemented MVCC using
> locks, although that partly defeats the purpose. See
> http://en.wikipedia.org/wiki/Multiversion_concurrency_control
>
> ----- End forwarded message -----
>



-- 
Ondřej Surý <ond...@sury.org>

Reply via email to