Plug-in == Bundle == Component

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?

This entry was posted in Uncategorized. Bookmark the permalink.

5 Responses to Plug-in == Bundle == Component

  1. Bob Balfe says:

    The only problem with calling it a component is the fact a plugin can really be anything. Another problem is when a component has a service layer and a UI layer and as a whole makes a component. Those layers may be implemented in separate plugins. In the Lotus Expeditor we are not enforcing a single plugin to be called a component but it does help when dealing with UI based components that are in their own plugins. I also think many people these days are calling a feature a component – where a series of related plugins make a component – ie. an Eclipse Feature…

  2. Rafael says:

    Eclipse is a component platform, that is a given. However, most Eclipse plug-ins lack one important quality would expect from components: a strict separation between interface and implementation and consequent replaceability.

  3. Nigel says:

    Maybe plugin isn’t the best word, but at least it isn’t used as much as component. That word is used to mean just about anything.Wouldn’t ‘bundle’ refer to a group of plugins or components? I would find that confusing.

  4. Philipp says:

    I like component. Reminds me a bit of SCA where you have Service Components that implement the functionality and a framework that allows their interaction, or communication. Same with Eclipse, we have a core that allows to assemble functionality provided via plug-ins (or components 😉 ). The only thing that makes me wonder is the dependencies. Most plug-ins only make sense with a big main platform and wouldnt work without. Its not that you could just attach some functionality and have it working, no matter if some components are there or not.

  5. Jesper S Møller says:

    Let’s not confuse matters: Bundles refer to a packaging of classes, some of which may plug into one another. Dependencies are also handled through this concept.As I read it, the concept of a plug-in in the encyclopedia sense is closer to what Eclipse calls an extension, and the interface between the “main application” and the “plug-in” is declared through extension points.Component is so horribly overused, let’s not go there. Even module would be better, since it hasn’t been hijacked by COM, SCA, and the like.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s