Stefan Seifert schrieb:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Anders Olofsson wrote:
Looks good but I have a few comments as well.

* Adding features to the API should not stop older plugins from loading
as long as the new API is still backwards compatible with the version
required by the plugin.

If I may ask: why even bother with API and - even harder - ABI
compatibility?

How many plugins from how many different sources are there gonna be?
Will they be so many, that it's impossible to manage them in a single
distribution?

Plugins are a good way to keep a clean spearation of a core and optional
features or providing different means to an end (e.g. different GUIs).
But they don't automatically mean, that there has to be a backwards
compatible API and it doesn't mean that there has to be an ABI.

This is open source. There's nothing preventing one from compiling the
plugins with the core on the same system. So it's feasible to just ship
all known plugins with the core and make just the loading optional. This
model even works for the whole Linux kernel with thousands of drivers
written by at least hundreds of different contributors. I can hardly see
licq growing bigger than that.

Providing backwards compatible APIs and ABIs ain't fun. It's difficult
and tedious work which steals developer's time that may be better spent
on improvements. Don't forget, that licq does not only run on a single
architecture. You should at least listen to my advice and not do it
unless you're really sure that this is absolutely needed.

Oh and thanks for your great work so far :)

Stefan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iD4DBQFF0kMl1QuEJQQMVrgRAotOAJ4/X6aPALWmQkqv1pmLmI9yWxkvXQCXUAT5
hMheJv0F8Nf3SLly8gYgZQ==
=7VNX
-----END PGP SIGNATURE-----

I think API compatibility is quite important, because (as said before) it would be nothing but a pain to be forced to recompile all plugins each time the API changes just a bit (I currently experience this with icqnd). Also many people don't want to recompile stuff by themselfes but use precompiled packages - it it would be a lot of unneccessary work to have to check whether the API is still compatible and to have them recompiled (by the authors who are maybe not in the team of core developers) every time.

I still believe that the best solution is to make the API as abstract (and also as extensible) as possible. There has been an idea to use "services" which are "resolved" at runtime, where programmers don't write ICQUser->SendMessage("msg", col, attribs) but something like ICQUser->callService("SendMessage", &specificStruct) or ICQUser->callService("SendMessage",
"Message:", "MyMessage",
"Color:", &col,
"Attributes:", myAttributes);


So far,
Joachim

Reply via email to