Firefox OS es un proyecto que nos ha dado mucho que hablar los últimos días, con el lanzamiento de los primeros dispositivos con el sistema (para desarrolladores) y es el momento de analizar la arquitectura de Firefox OS (con sus capas y sus funciones, desde el nivel más bajo hasta la interfaz).
Lo primero de todo son los términos, los más importantes son Gonk (la capa de más bajo nivel, formada por el kernel Linux y lo necesario para que funcione el dispositivo), Gecko (más que conocido, el motor de Firefox y como no de su SO móvil, encargado de ejecutar HTML, CSS y JavaScript) y por último Gaia (la interfaz como tal, escrita con estándares web y ejecutándose sobre Gecko, incorpora todas las funciones básicas del teléfono).
Gonk
Gonk son las entrañas del sistema operativo (o mejor dicho, el propio sistema operativo, una especie de Linux destilado), es el conjunto de todas las funciones que tiene que tener el teléfono, que consiste en el propio núcleo (obviamente descendiente del Linux kernel y con trazos muy similares al de Android, aunque teóricamente no deriva de el, este es más puro) y por otro lado incorpora la capa de abstracción de hardware (HAL).
Está construido usando el mayor número de librerías de código abierto (por ejemplo libusb o bluez, ambas usadas comúnmente en Linux) y además comparte software con Android para poner en marcha ciertas funciones como el GPS y la cámara.
La capa siguiente, Gecko, es el motor de todo el “sistema operativo”, pero realmente el sistema en Gonk, actuando como cualquier otro sistema donde se ejecuta Firefox, lo que garantiza la total compatibilidad con cualquier plataforma (excluyendo las funciones especificas del móvil, como vibración, estado de la batería, Wifi…).
Gecko
Este es el motor de Firefox OS, el encargado de ejecutar como un campeón HTML5, CSS3 y JavaScript, pero con toda la multitud de APIs que nos ha traído HTML5 (que comúnmente se suele olvidar que HTML5 es más las APIs que la sintaxis: ,
y demás) y se asegura con el uso de este motor que cualquier tecnología usada en el escritorio se podrá usar en este sistema, como el motor de gráficos basado en OpenGL ES 2.0, el motor de diseño o la máquina virtual de JavaScript.
Gaia
Esta es la última de las tres grandes capas de Firefox OS, esta es la encargada de la interfaz, que se encarga del propio menú y home y de las funciones básicas (SMS, teléfono…) del sistema y también es la capa encargada de poner en marcha las APPs presentes en el sistema.
Esta capa está construida totalmente con tecnologías web y se comunica con el sistema gracias a las APIs presentes, tanto las estándares de HTML5 como algunas propias del sistema, que no son abarcadas por los estándares.
Arquitectura de los procesos (alto nivel)
El centro neurálgico del sistema es b2g (Boot to Gecko), que tiene privilegios elevados y total acceso al hardware, cumpliendo el objetivo de intercomunicar por ejemplo el módem, la pantalla (como interfaz táctil), GPS y todo lo relacionado con el hardware. Este proceso se ejecuta sobre la capa Gecko, por lo que no interactúa directamente con el hardware y lo hace mediante el Gecko BDPI, un sistema de mensajes entre el núcleo y el hardware con la capa del Gecko.
Rild
Este es el proceso que comunica todo el sistema de módem (telefonía), implementando la Radio Interface Layer (RIL). Esta pieza no es común, ya que la suministra el proveedor del hardware específico, pero debe actuar de igual forma sea del proveedor que sea.
Junto a Rild está el proceso Rildproxy, que es el canal entre Rild y b2g.
MediaServer
El proceso MediaServer controla la reproducción del audio y el vídeo e interactúa con Gecko, que realmente es el encargado de decodificar el audio y vídeo (OGG Vorbis audio, OGG Theora vídeo y WebM vídeo) y posteriormente es enviado a este proceso para ejecutarlo. Aunque también hay otro proceso importante, es el libstagefright, que se encarga de decodificar los contenidos multimedia con codecs propietario.
Otros procesos importantes
Hay una serie más de procesos indispensables para el sistema, sin incluir los que ejecuta la capa Gecko, como son los siguientes:
-
Netd: este proceso se encarga de la configuración de las interfaces de red.
-
wpa_supplicant: es el proceso estándar de Linux usado para la comunicación con puntos de acceso Wifi (se ejecuta como un servicio que está siempre a la escucha).
-
dbus-daemon: es el sistema de mensajes usado para la comunicación bluetooth.
Procesos de la capa Gecko
Gecko, es totalmente el mismo motor del navegador de escritorio como el de Firefox OS (sin incluir alguna API puntual), por lo que más o menos tiene los mismos procesos que el navegador que puede que estés usando.
Procesos de eventos de entrada
Aquí entra el uso de todas las interfaces que usamos para comunicarnos con el teléfono, como la pantalla táctil o los botones, que es controlado con nsIAppShell (desde Gonk) y Gecko genera los eventos que pueden ser desechados (porque no se usen en una situación como sería tocar la pantalla al estar bloqueado) o se envía a las aplicaciones web como eventos DOM para ser procesados.
Gráficos
Desde el más bajo nivel Gonk mediante NSWindow ejecuta OpenGL ES 2.0, que es usado por Gecko para dibujar contextos GL (en resumidas cuentas crear gráficos espectaculares si se desea y con tecnología web).
Capa de abstracción de hardware
Esta es una capa de abstracción, que no se interactúa con ella con JavaScript directamente, pasa por una API y que nos permite interactuar con el hardware de una manera más “común”, permitiendonos usar C++ para estas interacciones (como podría ser la vibración o el flash).
Conexiones de red
En este apartado entran los procesos encargados de manejar el Wifi, los servicios (cliente) de DHCP y las configuraciones de las conexiones de red (3g y Wifi).
Para empezar, como hemos comentado todo el trabajo sucio relacionado con el Wifi lo hace el proceso wpa_supplicant, que nos permite comunicarnos con el mediante dos APIs distintas, primero tenemos DOMWifiManager que nos permite comunicarnos con contenido web y después WifiWorker que nos permite comunicar con la interfaz de red para poder informarnos de su estado, por ejemplo.
El sistema DHCP (Y DNS) es controlado por el proceso dhcpcd, típico en Linux, pero tiene un pequeño fallo: cada vez que se conecta a una nueva interfaz toca reiniciar el cliente y reconfigurarlo, en lugar de hacerlo sobre la marcha.
Resumen
La arquitectura de este sistema se podría decir que es bastante simple en comparación con las demás arquitecturas móviles, ya que solo incorpora el kernel, el motor del sistema (que básicamente es un navegador) y la interfaz.
¿Qué podemos deducir de todo esto?: que este sistema tiene lo básico para que Gecko funcione de maravilla, sin miles de capas, ni servicios, ni máquinas virtuales ni nada, lo básico, lo que normalmente encontramos para acceder a Facebook o a Evernote, por ejemplo, pero sin comernos todo un sistema complejo y basto, lo que es un gran punto a favor para la plataforma (que apunta ser low cost pero con gran potencial y facilidades a la hora de desarrollar, como comentamos anteriormente)
Más información | Firefox OS – Arquitectura
En Genbeta Dev | Firefox OS: nos lo pone facilísimo a los desarrolladores