XPCOM
Encyclopedia
XPCOM is a cross-platform
component model
from Mozilla
. It is similar to Microsoft COM
and CORBA
. It has multiple language bindings and IDL
descriptions so programmers can plug their custom functionality into the framework and connect it with other components.
application environment an actual framework. It is a development environment that provides the following features for the cross-platform software developer:
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 want to 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 http://www.mozilla.org/owners.html#perlconnect and plXPCOM http://plxpcom.mozdev.org/ provide support for Perl
, and there are efforts underway to add .NET
and Ruby language support for XPConnect.
On the developer side, XPCOM lets you write 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 itself 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.
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 chose KHTML
to create the WebKit engine
(which is used in the web browser Safari
) over the XPCOM-based Gecko
rendering engine for their Web Browser.
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.
, Mozilla's Chief Technology Officer, wrote about the plans for Mozilla 2.0, the platform on which Firefox 4.0 is likely to be based. These changes include improving and removing XPCOM API
s boilerplate, switching to the C++ standard library
, just-in-time compilation
with JavaScript
2 (known as the Tamarin project), tool-time and runtime security checks.
, Eich's post no longer necessarily reflects the Mozilla roadmap.
Cross-platform
In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms...
component model
Component-based software engineering
Component-based software engineering is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system...
from Mozilla
Mozilla
Mozilla is a term used in a number of ways in relation to the Mozilla.org project and the Mozilla Foundation, their defunct commercial predecessor Netscape Communications Corporation, and their related application software....
. It is similar to Microsoft COM
Component Object Model
Component Object Model is a binary-interface standard for software componentry introduced by Microsoft in 1993. It is used to enable interprocess communication and dynamic object creation in a large range of programming languages...
and CORBA
Çorba
Chorba , ciorbă , shurpa , shorpo , or sorpa is one of various kinds of soup or stew found in national cuisines across Middle East...
. It has multiple language bindings and IDL
Interface description language
An interface description language , or IDL for short, is a specification language used to describe a software component's interface...
descriptions so programmers can plug their custom functionality into the framework and connect it with other components.
The model
XPCOM is one of the main things that makes the MozillaMozilla
Mozilla is a term used in a number of ways in relation to the Mozilla.org project and the Mozilla Foundation, their defunct commercial predecessor Netscape Communications Corporation, and their related application software....
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 passingMessage passingMessage passing in computer science is a form of communication used in parallel computing, object-oriented programming, and interprocess communication. In this model, processes or objects can send and receive messages to other processes...
- Memory managementMemory managementMemory management is the act of managing computer memory. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and freeing it for reuse when no longer needed. This is critical to the computer system.Several...
This component object model makes virtually all of the functionality of Gecko
Gecko (layout engine)
Gecko is a free and open source layout engine used in many applications developed by Mozilla Foundation and the Mozilla Corporation , as well as in many other open source software projects....
available as a series of components, or reusable cross-platform libraries, that can be accessed from the web browser
Web browser
A web browser is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. An information resource is identified by a Uniform Resource Identifier and may be a web page, image, video, or other piece of content...
or scripted from any Mozilla application. Applications that want to access the various Mozilla XPCOM libraries (networking
Computer network
A computer network, often simply referred to as a network, is a collection of hardware components and computers interconnected by communication channels that allow sharing of resources and information....
, security
Computer security
Computer security is a branch of computer technology known as information security as applied to computers and networks. The objective of computer security includes protection of information and property from theft, corruption, or natural disaster, while allowing the information and property to...
, DOM
Document Object Model
The Document Object Model is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML and XML documents. Aspects of the DOM may be addressed and manipulated within the syntax of the programming language in use...
, etc.) use a special layer of XPCOM called XPConnect
XPConnect
XPConnect is a technology which enables simple interoperation between XPCOM and JavaScript.-Object connection:XPConnect allows JavaScript objects to transparently access and manipulate XPCOM objects. It also enables JavaScript objects to present XPCOM compliant interfaces to be called by XPCOM...
, which reflects the library interfaces into JavaScript
JavaScript
JavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
(or other languages). XPConnect glues the front end to the C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
or C programming language
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
-based components in XPCOM, and it can be extended to include scripting support for other languages: PyXPCOM already offers support for Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
, PerlConnect http://www.mozilla.org/owners.html#perlconnect and plXPCOM http://plxpcom.mozdev.org/ provide support for Perl
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions and become widely popular...
, and there are efforts underway to add .NET
.NET Framework
The .NET Framework is a software framework that runs primarily on Microsoft Windows. It includes a large library and supports several programming languages which allows language interoperability...
and Ruby language support for XPConnect.
On the developer side, XPCOM lets you write components in C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
, C
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
, JavaScript
JavaScript
JavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
, Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
, 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 itself 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
Rapid application development
Rapid application development is a software development methodology that uses minimal planning in favor of rapid prototyping. The "planning" of software developed using RAD is interleaved with writing the software itself...
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 marshallingMarshalling (computer science)
In computer science, marshalling is the process of transforming the memory representation of an object to a data format suitable for storage or transmission...
objects between different usage contexts (e.g. different languages). This leads to code bloat
Software bloat
Software bloat is a process whereby successive versions of a computer program include an increasing proportion of unnecessary features that are not used by end users, or generally use more system resources than necessary, while offering little or no benefit to its users.-Causes:Software developers...
in XPCOM based systems. This was one of the reasons why Apple chose KHTML
KHTML
KHTML is the HTML layout engine developed by the KDE project. It is the engine used by the Konqueror web browser. A forked version of KHTML called WebKit is used by several web browsers, among them Safari and Google Chrome...
to create the WebKit engine
WebKit
WebKit is a layout engine designed to allow web browsers to render web pages. WebKit powers Google Chrome and Apple Safari and by October 2011 held over 33% of the browser market share between them. It is also used as the basis for the experimental browser included with the Amazon Kindle ebook...
(which is used in the web browser Safari
Safari (web browser)
Safari is a web browser developed by Apple Inc. and included with the Mac OS X and iOS operating systems. First released as a public beta on January 7, 2003 on the company's Mac OS X operating system, it became Apple's default browser beginning with Mac OS X v10.3 "Panther". Safari is also the...
) over the XPCOM-based Gecko
Gecko (layout engine)
Gecko is a free and open source layout engine used in many applications developed by Mozilla Foundation and the Mozilla Corporation , as well as in many other open source software projects....
rendering engine for their Web Browser.
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.
Future
On October 13, 2006, Brendan EichBrendan Eich
Brendan Eich is a computer programmer and creator of the JavaScript scripting language. He is the chief technology officer at the Mozilla Corporation.-Education:...
, Mozilla's Chief Technology Officer, wrote about the plans for Mozilla 2.0, the platform on which Firefox 4.0 is likely to be based. These changes include improving and removing XPCOM API
Application programming interface
An application programming interface is a source code based specification intended to be used as an interface by software components to communicate with each other...
s boilerplate, switching to the C++ standard library
C++ standard library
In C++, the C++ Standard Library is a collection of classes and functions, which are written in the core language and part of the C++ ISO Standard itself...
, just-in-time compilation
Just-in-time compilation
In computing, just-in-time compilation , also known as dynamic translation, is a method to improve the runtime performance of computer programs. Historically, computer programs had two modes of runtime operation, either interpreted or static compilation...
with JavaScript
JavaScript
JavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
2 (known as the Tamarin project), tool-time and runtime security checks.
, Eich's post no longer necessarily reflects the Mozilla roadmap.