11

Question

I am looking for definitions and differences of the following terms in software development:

  • Modules
  • Plugins
  • Extensions

I want to understand these terms in a general sense, not tied to any specific software or platform. For example, what are the characteristics and purposes of each term? How do they relate to each other? How are they commonly used in software projects?

Please provide some examples or references if possible.

Context

Sometimes, I need to add extra features or functionalities to my software that are not part of the main deployment. I want to name these parts correctly, but I’m confused about the terms “modules”, “plugins”, and “extensions”.

I know these terms can have different meanings depending on the software or context. I’ve seen some answers on Stack Overflow (as well as here and here) that are specific to certain platforms or products.

But what I’m looking for are general and clear definitions that can distinguish these terms without being tied to any particular software. Some examples would be helpful too.

Any input regarding this is greatly appreciated.

14
  • 1
    What about other terms, like add-on, layer, stack, framework, library, and DLL ?
    – Erik Eidt
    Commented Apr 19, 2016 at 15:28
  • 1
    So you understand there is no universally agreed upon definition for these terms? So what is it you are asking for?
    – JacquesB
    Commented Apr 19, 2016 at 16:47
  • 2
    There are many, many interpretations of the terms modules, plugins, and extensions -- That's your answer. Commented Apr 19, 2016 at 16:48
  • @ErikEidt would also be great to hear those definitions as well. Commented Apr 19, 2016 at 17:01
  • @JacquesB True, but terms usually share a close definition. Commented Apr 19, 2016 at 17:06

2 Answers 2

7

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.

3
  • 1
    Some other interesting and/or important module systems: Racket's Units, Standard ML's Parameterized Functors, and Newspeak and Scala are interesting, because they unify modules with objects and module definitions with classes (traits). Scala's type system, specifically, has been extended with features that are explicitly intended to match features normally found in module systems. That way, Newspeak and Scala don't need a separate module system, plus first-class and higher-order modules are completely natural: modules are just objects, and objects are obviously first-class in OO. Commented Apr 19, 2016 at 23:01
  • Module - group of thingies. Plugin - ready to use thingy that adds functionality. Extensions - thingy that extends functionality of other thingies.
    – C.L.
    Commented Oct 2, 2020 at 6:36
  • @C.L. Thank you for this very intuitive summary. Maybe you could add "and that taken alone is useless" to your informal plugin definition. The issue I have with extending is that different people use it for very different purpose. For a java developper extending is very concrete. And for an ERP vendor a "module" may extend functionality of other "thingies" ;-)
    – Christophe
    Commented Oct 2, 2020 at 7:01
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.