I’m not all that happy with the term “plug-in”. Wikipedia defines the term as follows:
A plugin (or plug-in) is a computer program that interacts with a main application (a web browser or an email program, for example) to provide a certain, usually very specific, function.
A little further down the page, it states:
…plugins generally rely on the main application’s user interface and have a well-defined boundary to their possible set of actions.
In essence, “plug-ins” are second-class citizens. You see, there is a “main body” of code, and then there’s a bunch of “plug-ins” that hook into some subset of the available functionality to add behaviour to the application. This is pretty much how it works with FireFox and Apache HTTP Server. It’s not how it is with Eclipse.
In Eclipse, there really is no “main application”. Eclipse itself is just a collection of plug-ins. When you add a plug-in to Eclipse (either the platform or the Rich Client Platform), that plug-in is an equal partner in the application. It doesn’t have some limited access to the application through some handy hooks, it is part of the application and has the same potential to access all services and features of the application (which are all implemented as plug-ins) as any other plug-in. Plug-ins that you add to Eclipse are no more or less important and powerful (as far as Eclipse is concerned) than any of the other plug-ins.
I’ve pretty much stopped using the term “plug-in” in favour of the word “component“; in the OSGi terminology, these are called “bundles”, but I think “component” does the job quite nicely. What do you think?