Components:
- Host application: The core system which allow usage of plugins
- Plugin interface: Contract which ensures that the host application know how to use plugins and for plugins to know what is required
- Plugins: Actual implementations of the plugin interface
Common examples of using plugin architecture:
- Web Browsers
- Content Management Systems
- IDEs
Hurdles:
Versioning, making sure that plugins remain compatible with different versions of the host application.
If note careful, one can wind up with an ecosystem that require specific host application versions to be mapped to specific plugin versions if the host application breaks the contract.
Mitigation: Ensure to maintain backwards compatibility and maintain a clean interface for plugins.
Security, usage of plugins allow for unknown code to be loaded and executed, thats… Bad.
Mitigation: Ensure that only plugins and sources of them are trusted and their identify can be verified.