[Kolab-devel] pear.kolab.org and module thoughts
Jeroen van Meeuwen (Kolab Systems)
vanmeeuwen at kolabsys.com
Mon Jan 17 16:14:21 CET 2011
Hi there,
To consolidate some of our conversations on pear.kolab.org, I've created the
following wiki page:
http://wiki.kolab.org/Pear.kolab.org
Naturally, this page is a draft only and feedback from those actually literate
in PHP is... well... compulsory.
One consideration I would like to make, and thus gain feedback on, is the
following;
- Supposedly -what do I know-, some of the pear modules are actually Horde
specific. As such, this, the current number of third party applications, and
with an eye on the future, causes me to think they should be named
'Horde_Kolab_*', so that it leaves us with plenty of room to (in the future)
create the more generic 'Kolab_*' packages, and packages for use with plenty
other applications (like 'Roundcube_Kolab_Format' with Roundcube specific
bindings or handling or whatnot).
I think this would help us in the following areas;
0. Where the base module (e.g. Kolab_Format) handles the actual Kolab foo,
possibly including Format version specific aspects, etc., it offers a feature-
complete, generic, versioned, stable API. This API can be used by virtually
any application directly, but does require the application using the API to do
certain stuff in a certain way; e.g. if application Foo consistently uses
$_SESSION['user'], while Kolab_* requires the Kolab_*::user to be set, then
one more very thin abstraction layer could simply make sure this actually
happens and itself move at the speed application Foo requires, while the
Kolab_* generic module remains clean.
1. Maintain compatibility with series of versions of any given
application; Horde moves at one speed, while Roundcube does at another. As
such, changes needed for a Roundcube upgrade would get us in trouble if those
changes prove to be incompatible with a Horde legacy version. E.g. a thin
abstraction of Kolab_* using $App_Kolab_* can make sure horde3, horde4,
roundcube, squirrelmail, a future Outlook Anywhere compatibility interface, Z-
Push, some mod_caldav based application, etc, etc, can all use the same base
module without obfuscating, destabilizing or triggering a base module update
because of one application while updating its code on behalf of another.
I hope this makes sense, but I'll give an example:
- Kolab_Cache is the generic module for handling cache (as is currently being
developed).
- Using MongoDB as a backend would go to Kolab_Cache_MongoDB, as some
organizations do not allow any programs not fully and completely sanctioned by
their security officers, processes which sometimes take years to complete;
Given as how (most likely) PostgreSQL or MySQL would be sanctioned, these
could be plugged in as backends as well.
- Z-Push, Roundcube, Horde, OWA-compat, CalDAV, etc. can use Kolab_Cache
directly, but if necessary, application specific layers can be put in between;
Z-Push_Kolab_Cache, for example.
- Populating cache from a specific location / application:
Kolab_Cyrus_Cache, Kolab_Dovecot_Cache
Either way, it's a matter of the naming convention allowing us to do all this
without discovering, later on, we need to rename or otherwise mess around. I
suppose it's worth thinking about it in terms of what would be extending what
as well.
Kind regards,
Jeroen van Meeuwen
--
Senior Engineer, Kolab Systems AG
e: vanmeeuwen at kolabsys.com
t: +316 42 801 403
w: http://www.kolabsys.com
pgp: 9342 BF08
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kolab.org/pipermail/devel/attachments/20110117/38cc403d/attachment.html>
More information about the devel
mailing list