# Mozilla Firefox/Introducción/¿De qué están hechas las aplicaciones Mozilla?

Mozilla es una compañía sin afán de lucro, para desarrollar sus aplicaciones cuyos componentes son (técnicamente hablando):
* Binarios: ejecutables y bibliotecas resultantes de una compilación.
* Archivos empaquetadores: archivos JAR, XPI y ZIP.
* Archivos de texto (fácilmente modificables)

### Los componentes

Cómo cualquier otro programa, Firefox y sus derivaciones (Seamonkey, Thuderbird, Songbird, etcétera) poseen características básicas en sus archivos que lo hace personalizable:

### Los binarios

Los archivos binarios son la base de casi cualquier aplicación. Proporcionan la capacidad de abrir sockets para transmitir información por red, recurrir a la API para proporcionar una interfaz gráfica a partir de otros archivos...

### Los archivos empaquetadores

Son ficheros JAR, usados internamente para guardar ficheros de texto y, ocasionalmente, bibliotecas. Tienen una jerarquía interna de directorios, ubicados dentro de los archivos de instalación como: chrome para el contenido, locales para las traducciones y skin para los temas.

### Los archivos de texto

Proporcionan datos para la interfaz gráfica. Esto es lo que hace que sea tan extensible, aunque se sacrifique algo de velocidad. Dentro de ello, se realizan ajustes de bloqueo, interfaz, scripts entre otros.

#### El magnífico XUL

El lenguaje principal para la personalización dentro del navegador. Basado en XML, proporciona la base sobre la que trabajarán los demás documentos. Sus etiquetas incluyen botones, cajas, entradas de texto, etc. El código sirve para la creación de extensiones para aumentar la potencia del navegador.
¿Cómo lo programan? Para hacer el clásico "Hola mundo" sería:
Sabiendo que: Usan como versión 1.0, realizan en una carpeta chrome:, pueden usar como base el sitio web del código (the.is.only.xul). Los recursos del HTML colaboran dentro de él.

#### CSS

Al igual que en diseño web, el CSS proporciona estilos a los documentos base. Sin embargo, este CSS incluye muchas extensiones que ni siquiera han sido propuestas al W3C, dado que con frecuencia carecerían de sentido fuera de una aplicación.

#### JavaScript

El lenguaje estrella. Proporciona funcionalidad real a todo lo anterior. Se aplica igual que en diseño web, tanto en DOM como para AJAX. Para trabajar como aplicación (modificar archivos, por ejemplo) se emplea el modelo de objetos XPCOM, al que tienen acceso los archivos "privilegiados", en el registro chrome.

#### DTD

Son declaraciones de XML, con la extensión .properties, que definen entidades. Por decirlo, definen las comunicaciones en relación a las opciones del sistema. Al hacer una llamada a una entidad XML, el programa busca la correspondiente al código doble de idioma (p.ej.: es-AR para español de Argentina y en-UK para inglés británico). Así se consiguen centralizar las traducciones, y no se requieren múltiples documentos XUL para cada idioma.
Por tanto, podemos ver que hacer una interfaz gráfica del usuario en un XUL es muy similar a una web dinámica.

#### Otros

También debemos nombrar los archivos .manifest, que contienen una lista de documentos privilegiados con acceso al XPCOM.

### Distribución de extensiones

Las extensiones se proporcionan en formato zip, renombrado a .xpi. Contiene una jerarquía de carpetas interna, que se copiará en las carpetas del programa. Además tiene un archivo install.rdf, que indica con qué versiones y aplicaciones es compatible. Algunas incluyen un install.js, por motivos de compatibilidad con versiones antiguas. Otros incluyen un jetpack para instalarlo sin reiniciar el navegador.
Finalmente los temas se distribuyen directamente en un JAR. Por lo tanto, la flexibilidad de un navegador está resumida en extensiones.