title: XPCOM
text: # XPCOM
  
  XPCOM (Cross-Platform Component Object Model) est un modèle libre de composants développé par la Fondation Mozilla.
  
  Il s'agit d'une bibliothèque logicielle qui, schématiquement, permet de concevoir une application comme un ensemble de plugins. Ces composants peuvent être développés dans des langages distincts, auquel cas les communications entre ces composants sont assurées par la technologie XPCONNECT. Cette bibliothèque a servi, notamment, à développer Mozilla (Mozilla Firefox, Mozilla Thunderbird, Mozilla Composer), Nvu, Komodo…
  
  XPCOM est inspiré des technologies CORBA ou Microsoft COM, qui elles-mêmes apportent à des langages statiques une partie des bénéfices (et inconvénients) de langages dynamiques comme Objective-C ou Python. Comme CORBA et COM, XPCOM permet de développer des architectures de composants.
  
  L'architecture est alors :
  
  * dynamique :
     * les composants sont chargés lors de l'exécution,
     * de nouveaux composants peuvent être ajoutés lors de l'exécution, sans avoir à recompiler ou recharger les composants existants.
  * typée semi-dynamiquement :
     * certaines informations sur un composant sont connues statiquement,
     * un composant peut être interrogé afin d'apprendre s'il dispose de certaines capacités, qui pourront être utilisées si le composant répond par l'affirmative.
  * « polyglotte » :
     * le langage de base de XPCOM est C++,
     * les langages JavaScript, Python, Ruby, Perl peuvent utiliser et définir des composants XPCom,
     * le projet JavaXPCOM vise à permettre de faire de même en Java (BlackConnect avait le même objectif),
     * Monoconnect, une plate-forme d'interaction entre XPCom et .Net est actuellement en cours de développement.
  * multiplate-forme :
     * un composant C++/XPCOM rédigé selon les consignes de Mozilla pourra être recompilé et réutilisé tel quel sur toute plate-forme Mozilla,
     * les composants JavaScript peuvent être réutilisés immédiatement sur toute plate-forme Mozilla, tout comme les composants non compilés Python, Ruby, Perl.
  
  De plus, les composants XPCOM ont accès aux bibliothèques de Mozilla, ce qui permet notamment d'accéder au moteur de rendu Gecko, le cœur de l'affichage des pages web par Mozilla et au moteur de réseau Necko, ainsi que de développer des interfaces graphiques en XUL.
  
  Une initiative de Mozilla, XULRunner, vise à séparer les bibliothèques XPCOM de Mozilla des logiciels construits à l'aide de ces bibliothèques. L'objectif est de faire de Mozilla une plate-forme de développement multiplate-forme comparable à la Java ou à l'environnement .Net.
  
  