About Frozen Interfaces

Status of this document

This document is to be considered of historical interest only. As of Gecko 2.0 (Firefox 4), all interfaces are subject to change at all times, and there is no longer a concept of a "frozen interface".

Interfaces and XPCOM Components: An overview

Mozilla's applications are written as a set of XPCOM Components that provide functionality to the application, and a bunch of XUL, DTD, and JavaScript that provide the User Interface (UI).

XPCOM Components are exposed to the world by means of interfaces.

Interfaces describe portions of the functionality provided by XPCOM Components, and are written using an Interface Description Language (IDL).

Frozen Interfaces

As of Gecko 2 interfaces will no longer be frozen. See XPCOM changes in Gecko 2.0 and Firefox 4 for developers for details.

As Mozilla evolves, some interfaces (its IDL) are changed. However this procedure has some side effects:

  1. You must change the implementation of the component in order to comply with changes in the interfaces.
  2. Clients using components must change accordingly

This might not seem to be a huge problem, but as developers make new extensions (or other contributions) they must rely in the stability of the interfaces they are using in their works. So we need a mechanism to provide such a confidence.

The Mozilla team has provided such a mechanism by declaring an interface that is not going to be changed anymore as frozen. This means that everybody can trust that a frozen interface will not be changed, so they can use it as they please: both to implement a component providing such functionality or using a component through that interface.

Non-frozen (sometimes called unfrozen) interfaces are likely to be changed and developers using them in any way must watch for changes in order to adapt their works. Hopefully, non-frozen interfaces can go frozen without changes.

Mozilla keeps track of the current list of interfaces and their status.

See also

Document Tags and Contributors

Last updated by: ethertank,