XPCOM
Cross Platform Component Object Model (XPCOM) is a cross-platform component model from Mozilla. It is similar to Microsoft Component Object Model (COM) and Common Object Request Broker Architecture (CORBA).[1] It features multiple language bindings and interface description language (IDL) descriptions; thus programmers can plug their custom functions into the framework and connect it with other components.
In August 2015, Mozilla announced that the use of XPCOM for creating Firefox add-ons would be deprecated in the future in favour of WebExtensions.[2] Pale Moon, a fork of Firefox, will continue to support XPCOM indefinitely.[3]
The model
XPCOM is one of the main things making the Mozilla application environment an actual framework. It is a development environment that provides the following features for the cross-platform software developer:
- Component management
- File abstraction
- Object message passing
- Memory management
This component object model makes virtually all of the functionality of Gecko available as a series of components, or reusable cross-platform libraries, that can be accessed from the web browser or scripted from any Mozilla application. Applications that must access the various Mozilla XPCOM libraries (networking, security, DOM, etc.) use a special layer of XPCOM called XPConnect, which reflects the library interfaces into JavaScript, or other languages. XPConnect glues the front end to the C++ or C programming language based components in XPCOM, and it can be extended to include scripting support for other languages: PyXPCOM already offers support for Python. PerlConnect[4] and plXPCOM[5] provide support for Perl, and there are efforts underway to add Common Language Infrastructure (CLI) and Ruby language support for XPConnect.
For developers, XPCOM allows writing components in C++, C, JavaScript, Python, or other languages for which special bindings have been created, and compile and run those components on dozens of different platforms, including these and others where Mozilla is supported.
The flexibility to reuse the XPCOM components from the Gecko library and develop new components that run on different platforms facilitates rapid application development and results in an application that is more productive and easier to maintain. The networking library, for example, is a set of XPCOM components that can be accessed and used by any Mozilla application. File I/O, security, password management, and profiles are also separate XPCOM components that programmers can use in their own application development.
Criticism
XPCOM adds a lot of code for marshalling objects between different usage contexts (e.g. different languages). This leads to code bloat in XPCOM based systems. This was one of the reasons why Apple forked KHTML to create the WebKit engine (which is now used in several web browsers including Safari) over the XPCOM-based Gecko rendering engine for their web browser.[6][7]
The Gecko developers are currently trying to reduce superfluous uses of XPCOM in the Gecko layout engine. This process is commonly referred to as deCOMtamination within Mozilla.[8]
See also
- XULRunner – XULRunner is a runtime that can be used to bootstrap multiple XUL + XPCOM applications that are as rich as Firefox and Thunderbird.
References
- ↑ Comparison with COM, GObject, SOM, Objective-C, Windows Runtime
- ↑ Kev Needham (2015-08-21). "The Future of Developing Firefox Add-ons". blog.mozilla.org. Retrieved 2015-09-07.
- ↑ "Pale Moon future roadmap". Pale Moon. 2016-05-09. Retrieved 2016-06-08.
- ↑ module ownership governance system
- ↑ Perl XPCOM project
- ↑ Jorge O. Castro (June 15, 2004). "Ars Technica sits down with Scott Collins from Mozilla.org". Ars Technica.
- ↑ Ryan Paul (September 9, 2008). "Why Mozilla is committed to Gecko as WebKit popularity grows". Ars Technica.
- ↑ "Gecko:DeCOMtamination".
External links
Look up xpcom in Wiktionary, the free dictionary. |
- XPCOM API Reference
- XPCOM Project Homepage
- A slightly out-of-date but still useful book that talks about XPCOM
- A Simple XPCOM Tutorial