Sistemas operativos:
* Linux: Utiliza ampliamente los módulos de kernel cargables (LKMS) para agregar controladores de dispositivos, sistemas de archivos y otra funcionalidad a nivel de sistema.
navegadores web:
* Firefox: Históricamente, Firefox fue muy popular por sus extensiones (aunque el sistema de extensión ha cambiado con el tiempo).
* Chrome: Utiliza extensiones, aunque con directrices de seguridad y API más estrictas que Firefox más antigua.
Servidores web:
* Apache: Utiliza módulos para agregar funcionalidad como soporte de PHP, reescritura de URL, características de seguridad, etc.
Sistemas de gestión de contenido (CMS):
* WordPress: Utiliza complementos ampliamente. WordPress está completamente basado en complementos.
* Drupal: Usa módulos.
* Joomla!: Usa extensiones.
Entornos de desarrollo integrado (IDES):
* Código de Visual Studio: Muy basado en extensiones. Casi todas las características de VS Code se implementan como extensiones.
* Eclipse: Utiliza complementos.
* Idea IntelliJ (y otros ides de JetBrains): Utiliza complementos.
Software de edición de audio/video:
* Adobe Photoshop: Utiliza complementos para filtros, formatos de archivo y otras características.
* Adobe Premiere Pro: Utiliza complementos para efectos, transiciones y soporte de códec.
* Audacity: Utiliza complementos (efectos, análisis de audio, etc.).
Software de modelado 3D:
* licuadora: Utiliza scripts y complementos de Python para una amplia gama de funcionalidades.
* Autodesk Maya: Utiliza scripts y complementos de MEL (Maya incrustado Language).
Motores de juego:
* Unidad: Utiliza "activos" (que pueden incluir código, modelos, texturas, etc.) que se pueden agregar a los proyectos.
* Motor irreal: Utiliza complementos.
Otros ejemplos:
* reproductores multimedia (por ejemplo, VLC): Use complementos para soporte de códec y otras características.
* editores de texto (por ejemplo, texto sublime): Use complementos para soporte de idiomas, finalización del código, etc.
* Sistemas de bases de datos (por ejemplo, PostgreSQL): Permita extensiones para agregar nuevos tipos de datos, funciones y otras características.
Características clave de los módulos/complementos de soporte de software:
* API bien definida (interfaz de programación de aplicaciones): Esto es crucial. El software proporciona un conjunto definido de funciones, clases y estructuras de datos que los complementos pueden usar para interactuar con el sistema central. Una API estable es vital para que los complementos no se rompan con todas las actualizaciones de software.
* Mecanismo de carga de complemento/módulo: El software necesita una forma de descubrir, cargar e inicializar complementos. Esto puede implicar directorios de escaneo, usar archivos de configuración o proporcionar una interfaz de administración de complementos.
* Consideraciones de seguridad: Importante. El software debe aislar complementos en cierta medida para evitar que los complementos maliciosos o mal escritos se bloqueen todo el sistema o comprometan la seguridad. Esto a menudo implica sandboxing o limitar los permisos que tienen los complementos.
* Gestión de dependencia: Un sistema para administrar dependencias (otros complementos, bibliotecas o recursos) que requieren los complementos.
* metadatos del complemento: Información sobre un complemento (nombre, versión, autor, descripción, dependencias) que el software puede usar para administrar complementos.
Consideraciones importantes al elegir una plataforma con una arquitectura de complemento:
* La calidad de la API: ¿Está bien documentado, estable e integral?
* El tamaño del ecosistema del complemento: ¿Ya hay muchos complementos disponibles para las tareas que necesita realizar?
* El modelo de seguridad: ¿Qué tan bien se protege la plataforma de los complementos maliciosos?
* El proceso de desarrollo del complemento: ¿Es fácil crear y distribuir complementos para la plataforma?
* Rendimiento: ¿Cuánto afectan los complementos el rendimiento general del software?
En resumen, hay * muchos * programas de software que permiten a los usuarios y desarrolladores extender su funcionalidad a través de módulos o complementos. El programa específico que necesita depende completamente del tipo de funcionalidad que está tratando de extender.