Cross Platform Component Object Model ( XPCOM ) es un modelo de componentes multiplataforma de Mozilla . Es similar al Component Object Model (COM), Common Object Request Broker Architecture (CORBA) y el modelo de objetos del sistema (SOM). Incluye enlaces de múltiples idiomas y descripciones de lenguaje de descripción de interfaz (IDL); por lo tanto, los programadores pueden conectar sus funciones personalizadas al marco y conectarlo con otros componentes.
El uso más destacado de XPCOM se da en el navegador web Firefox . Muchos de sus componentes internos interactúan a través de interfaces XPCOM. Además, Firefox solía permitir a los complementos un amplio acceso a XPCOM, pero esto se eliminó en 2017 y se reemplazó con la API WebExtensions menos permisiva . [1] [2] (Dos bifurcaciones de Firefox aún admiten la capacidad de complementos XPCOM: Pale Moon [3] y Basilisk [4] ) .
XPCOM es uno de los elementos principales que hacen del entorno de aplicaciones de Mozilla un verdadero marco de trabajo. Es un entorno de desarrollo que ofrece las siguientes características para el desarrollador de software multiplataforma:
Este modelo de objeto de componente hace que prácticamente toda la funcionalidad de Gecko esté disponible como una serie de componentes o bibliotecas multiplataforma reutilizables , a las que se puede acceder desde el navegador web o crear scripts desde cualquier aplicación de Mozilla. Las aplicaciones que deben acceder a las diversas bibliotecas XPCOM de Mozilla ( redes , seguridad , DOM , etc.) utilizan una capa especial de XPCOM llamada XPConnect , que refleja las interfaces de la biblioteca en JavaScript u otros lenguajes. XPConnect pega el front-end a los componentes basados en el lenguaje de programación C++ , C o Rust en XPCOM, y se puede ampliar para incluir soporte de scripts para otros lenguajes: PyXPCOM [5] ya ofrece soporte para Python . wxWidgets [6] proporciona soporte para Perl , y hay esfuerzos en marcha para agregar Common Language Infrastructure (CLI) y soporte de lenguaje Ruby para XPConnect.
Para los desarrolladores, XPCOM permite escribir componentes en C++ , C , JavaScript , Python u otros lenguajes para los que se han creado enlaces especiales, y compilar y ejecutar esos componentes en docenas de plataformas diferentes, incluidas estas y otras donde se admite Mozilla.
La flexibilidad para reutilizar los componentes XPCOM de la biblioteca Gecko y desarrollar nuevos componentes que se ejecuten en diferentes plataformas facilita el desarrollo rápido de aplicaciones y da como resultado una aplicación más productiva y fácil de mantener. La biblioteca de redes, por ejemplo, es un conjunto de componentes XPCOM a los que se puede acceder y utilizar desde cualquier aplicación de Mozilla. La E/S de archivos, la seguridad, la gestión de contraseñas y los perfiles también son componentes XPCOM independientes que los programadores pueden utilizar en el desarrollo de sus propias aplicaciones.
XPCOM agrega una gran cantidad de código para ordenar objetos, y en la era Netscape XPCOM se usó en exceso para interfaces internas donde no era realmente necesario, lo que resultó en una hinchazón del software . [7] Esta fue una razón clave por la que en 2001 Apple bifurcó KHTML , no Gecko, para crear el motor WebKit para su navegador Safari . [8]
Desde entonces, Mozilla ha limpiado parte de la hinchazón de XPCOM. [9] Para 2008, esto combinado con otros esfuerzos resultó en grandes mejoras de rendimiento para Gecko . [10]