Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When designing a software platform, what are the key elements that make up a successful pluggable architecture? [closed]

I've been really impressed by the growing number of software platforms that let outside developers contribute code through a pluggable architecture (plugins/extensions).

I've been studying which platforms have the best plugin communities...

Excellent Plugin Architectures with thriving plugin communities:

  • WordPress (and WordPress MultiUser) for blogging: 4245 plugins
  • bbPress for message boards: 165 plugins
  • Firefox for browsers: 1265 extensions
  • Magento for e-commerce: 732 plugins

Then there are platforms with less active plugin communities:

  • MediaWiki for wikis: 22-38 extensions?

(For the sake of focus, let's put aside or ignore platforms that enable full-fledged software apps, like Microsoft Windows, iPhone, and Facebook.)

What would you say gives a software platform a successful plugin architecture with lots of plugins, versus another platform with a smaller or inactive developer community?

Just to get things started, here's a partial list:

  • The platform does something broadly useful: let's people browse the web, buy and sell stuff, publish blogs and message boards, etc.
  • The platform is open source (or at a minimum, the source code is freely available).
  • All important functions in the platform are fully plugabble through hooks and filters.
  • All or most pluggable functions are well documented (or there's a wiki so developers can document it for you).
  • There's a forum or email list where developers can share plugins, and share tips and tricks
  • There's a forum or email list where less sophisticated users can get help installing and configuring the plugins.

What kind of things can a platform developer do to create a pluggable architecture that encourages lots of outside developers to create plugins?

like image 968
kanamekun Avatar asked May 19 '09 01:05

kanamekun


2 Answers

Personally there's 3 major contributers to whether I learn to (and do) write apps for any given system:

Is the system very useful so that I'd want to use it enough to be motivated enough to extend it?

Is the system using a language that I'm familiar with, or is easy to learn as opposed to some obscure or proprietary or otherwise overly complicated solution (see elisp)?

Is the plugin system extremely well documented in clear language so that I can go about the work of writing my plugin and not spending hours (or days) deciphering the system?

If these things are all true, the only reason you would not want to develop for a platform is that somebody else has already written plugins for all your ideas. :)

I think it's also extremely helpful/important to have a central and well known repository to house user contributed plugins (as per your example projects). I hate having to scour the web to find individual, possibly low quality or even possibly malicious add-ons for something I'm trying to do. This should be a website or wiki as even forums or mailing list archives can be annoying and time-consuming to dig through.

like image 102
jess Avatar answered Oct 05 '22 04:10

jess


You're missing the point.

The JVM is a pluggable architecture. Every class file plugs into it and extends it.

Apache is a pluggable architecture at several levels. There are the "mods". Some mods run other interpreters, which are themselves pluggable architectures. PHP, mod_wsgi/Python, etc. are all plugged into Apache.

Python is a pluggable architecture with Python .pyc files and object files (.DLL's, .SO's) that plug into it.

Every language framework is -- in effect -- a pluggable architecture.

like image 27
S.Lott Avatar answered Oct 05 '22 03:10

S.Lott