In software engineering, extensibility is the capacity of a system to have new features or functions added to it without modifying the underlying foundations. Extensible systems may allow developers to add modular components or write custom code to extend their functionality.
- White-box: The most flexible and least restrictive form of extensibility, white-box extensibility allows software systems to be extended by modifying their source code.
- Black-box: In black-box extensibility (also known as “data-driven frameworks”), software systems may be extended without modifying the available source code. Any additions must be able to interact with the original system without affecting it.
- Gray-box: Gray-box extensibility is a mixture of white-box and black-box extensibility philosophies. In gray-box extensibility, the system provides an interface for developers to add custom functions and gives them some access to its internal workings.
Real examples of extensibility
- Modular architecture: In modular architecture, the system is divided into a set of independent modules that can be added or removed without affecting the other parts.
- API (application programming interface): Developers can create applications or tools that interact with the system through its exposed API, extending said system’s functionality.
- Plugins and extensions: Developers can create discrete plugins or extensions for the system (such as extensions for the Chrome, Edge, or Firefox browsers), allowing users to customize their experience.