Wednesday, 18 December 2013

ARCHITECTURE AND PLATFORM GUIDE

Core Technologies

Gaia - the user interface application for Firefox OS devices; this is a Web application running atop the Firefox OS software stack.

Gonk - the operating system layer underneath Gaia. This consists of a Linux kernel and a hardware abstraction layer to which Gecko communicates.

Gecko - is the layer of Firefox OS that provides the same open web standards implementation used by Firefox and Thunderbird, as well as many other applications

platforms



GAIA

Gaia is the user interface level of Firefox OS. Everything that appears on the screen after Firefox OS starts up is drawn by Gaia, including the lock screen, home screen, dialler, and other applications. Gaia is written entirely in HTML, CSS, and JavaScript. Its only interface to the underlying operating system and hardware is through standard Web APIs, which are implemented by Gecko.
Because of this design, Gaia can not only be run on Firefox OS devices, but on other operating systems and in other web browsers (albeit with potentially degraded functionality depending on the capabilities of the browser).
Third party applications onto the device installed alongside Gaia can be launched by Gaia.
Components of Gaia
Gaia consists of mainly Apps and JS libraries. It is also called the application layer. Following are the types of apps:
  • Core-certified apps
  • System apps
  • Trusted package apps
  • Hosted apps

The Gaia lock screen

By default, the lock screen is enabled, and the default PIN to unlock the device is "0000". This most likely will change over time as this feature is fleshed out.

lock screen and home screen


The default Gaia interface


The default interface in Gaia is similar to what you see on most typical smartphone, as seen here.
This image is obviously of a pre-release version of the operating system, with placeholder icons (and some test applications). The status bar at the top indicates the network on which the phone is operating (or "No SIM card" for a device without a network), the network strength, Wi-Fi signal strength, battery level, and current time.
The middle area of the display shows icons for the applications; swiping left and right pages through screens of icons.
At the bottom of the screen is a dock with room for up to seven of your most commonly used applications. You can drag and drop apps to the dock from the middle area.

GONK

Gonk is the lower level operating system of the Firefox OS platform, consisting of a Linux kernel and userspace hardware abstraction layer (HAL). The kernel and several of the user space libraries are common open-source projects: Linux, libusb, bluez, and so forth. Some of the other parts of the HAL are shared with the Android project: GPS, camera, and others. You could say that Gonk is a very simple Linux distribution. Gonk is a porting target of Gecko; that is, there's a port of Gecko to Gonk, just like there's a port of Gecko to OS X, Windows, and Android. Since the Firefox OS project has full control over Gonk, we can expose interfaces to Gecko that can't be exposed on other operating systems. For example, Gecko has direct access to the full telephony stack and display frame buffer on Gonk, but doesn't have this access on any other operating system.
Components of Gonk
Gonk consists of following :
  • Linux Kernel
  • Hardware Abstraction Layer (HAL)
  • Libraries : OSS (Open Source Software) and OEM (Original Equipment Manufacturer) libraries
  • Modem firmware
The Linux Kernel

The Linux kernel(s) used by Gonk is very similar to the upstream Linux from which it's derived. There are a few changes made by the Android Open Source Project that have not yet been up streamed. In addition, vendors sometimes modify the kernel and upstream those changes on their own schedule. In general, though, the Linux kernel is close to stock.
The start-up process for Linux is well-documented elsewhere on the Internet, so this article won't cover that. At the end of the process, a user space init process is launched, as it is in most UNIX-like operating systems. At this point in execution, the only mounted "disk" is a RAM disk. The RAM disk is built during the Firefox OS build process, and contains critical utilities, such as init, as well as other start-up scripts and loadable kernel modules.
Once the init process is launched, the Linux kernel handles system calls from user space, and interrupts and the like from hardware devices.
The init process
The init process in Gonk handles mounting the required file systems and spawns system services. After that, it stays around to serve as a process manager. This is quite similar to init on other UNIX-like operating systems. It interprets scripts (that is, the init*.rc files) that consist of commands describing what should be done to start various services. The Firefox OS init.rc is typically the stock Android init.rc for that device patched to include the things required to kick-start Firefox OS, and varies from device to device.

user-space architecture

The user space architecture:
b2g
The b2g process may, in turn, spawn a number of low-rights content processes. These processes are where web applications and other web content are loaded. These processes communicate with the main Gecko server process through IPDL, a message-passing system
rild
The rild process is the interface to the modem processor. rild is the daemon that implements the Radio Interface Layer (RIL). It's a proprietary piece of code that's implemented by the hardware vendor to talk to their modem hardware. rild makes it possible for client code to connect to a UNIX-domain socket to which it binds.
rilproxy
In Firefox OS, the rild client is the rilproxy process. This acts as a dumb forwarding proxy between rild and b2g. This proxy is needed as an implementation detail; suffice it to say, it is indeed necessary. The rilproxy code can be found on GitHub.
mediaserver
The mediaserver process controls audio and video playback. Gecko talks to it through an Android Remote Procedure Call (RPC) mechanism. Some of the media that Gecko can play (OGG Vorbis audio, OGG Theora video, and WebM video) are decoded by Gecko and sent directly to the mediaserver process. Other media files are decoded by libstagefright, which is capable of accessing proprietary codecs and hardware encoders.
netd
The netd process is used to configure network interfaces.
dbus-daemon
The dbus-daemon implements D-Bus, a message bus system that Firefox OS uses for Bluetooth communication.
wpa_supplicant
The wpa_supplicant process is the standard UNIX-style daemon that handles connectivity with Wi-Fi access points.

GECKO

Gecko is the name of the layout engine developed by the Mozilla Project. It was originally named NGLayout.
Gecko's function is to read web content, such as HTML, CSS, XUL, JavaScript, and render it on user's screen or print it. In XUL-based applications Gecko is used to render the application's user interface as well.
Gecko is used in many applications, including a few browsers, such as Firefox, SeaMonkey, etc.
Gecko provides the foundation needed to display content on the screen, including a layout engine and a complementary set of browser components. However, Gecko does not package all of these components alongside other interface modules in a coherent, use friendly application (including menus, toolbars, etc.), such as Firefox.

Components of Gecko

Gecko consists of :
  • Web APIs
  • Security
  • Gecko runtime – Graphics stack, layout engine, virtual machine, porting layers 

Three Layers of Firefox OS







No comments:

Post a Comment