Differences between the terms Modules, Plugins, Extensions

While developing software, certain parts of my applications are not planned to be necessarily deployed with the main software. And they need to be named correctly.

Now I understand apparently there are many, many interpretations of the terms modules, plugins, and extensions. There are even answers on Stack Overflow for proprietary software.

However, I am looking for a valid, reasonable and general definitions for these terms which properly differentiate them without tying them to any software. Providing examples are fine, however.

Any input regarding this is greatly appreciated.


Already lots of impressive references in the comments! But let’s try to do it short:

Module: a self-contained piece of software (e.g. types, data structure, functions), that can be combined with other modules to construct a more complex software.

References that support this definition:

  • In 1978, it was proposed to introduce modules for Algol68, in order to to address needs for separate compilation and protection (encapsulation). The notion was explicitly considered as orthogonal to abstract types.
  • In 1978, the Modula 2 language was introduced, that was built on the notion of modules to offer separate compilation and encapsulation. It distinguished the module definition (interface) from the module implementation.
  • In 1983, the ADA language was made available with all the concepts required to build very complex systems. The modules therein are called ADA packages. They offer the possibility of separate compilation, but the purpose is also to group logically related entities.
  • In 1996, the Java language appeared, and offered also the notion of package, to group in a namespace logically related classes. But here separate compilation and encapsulation is already offered by the classes. The goal is more the grouping of related classes.

All these examples (as well as future C++ modules), fit in this proposed definition.

Plugin: a plugin is a ready to use software component that can be added to an existing software to change adds features.

References and arguments that support this definition:

  • Intuitively, a plugin is something that you just have to put into an existing plug to make it work instantaneously.
  • According to wikipedia it is a software component that adds a specific feature to an existing computer program.
  • I added “ready to use” to this definition because all the wikipedia examples are ready to use components: you download them and integrate it in the existing software without the need or compiling/building. Without “ready to use” you wouldn’t make the difference with module.
  • “Dynamic” and “Application Binary Interface” are recurring issue in plugin frameworks.
  • Actually, the OSGI alliance defines a java architecture for a “dynamic module system”. The underlying JSR291 java specifications refers to “dynamic package import”. This matches perfectly with the our understanding of modules. Unfortunately, this architecture use the terms “module” in complement of “service” which -when the word dynamic is omitted- could be very ambiguous.

Extensions: ??

I think there is no consensus around the term extension. Personally, I see it as a synonym for plugin. But the notion of dynamic/ready-to-use is not at all suggested by this term, so that it could also mean an extension at compile/built time. Some people might even use it for a tailorised version of a software.


Extension could mean functionality added to an already existing module or plugin. The module or plugin already works, but there is something extra you want it to do, a behavior you want to change or add to it. So since it is very related to an existing module, you just add it to the existing.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *