Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
わんくま同盟 大阪勉強会 #63
Firefox OSアーキテクチャクイックツアー
株式会社グローバルサイバーグループ
マネージャ
藪下 正美
わんくま同盟 大阪勉強会 #63
はじめに
わんくま同盟 大阪勉強会 #63
自己紹介
• 藪下正美
– わんくまでは普段あおいたんとか名乗ってる人
– 大阪は#45以来ですおひさしぶりです
• 株式会社グローバルサイバーグループから来ました
• Firefox OSコミュニティから来ま...
わんくま同盟 大阪勉強会 #63
会社紹介
• 株式会社グローバルサイバーグループ
– 関西出身の組み込み系の会社
• 携帯電話とか業務用コピー機とかデジカメとかの中の人やってます
• 最近はAndroidのすごい下の方か各モバイルOS向けアプ...
わんくま同盟 大阪勉強会 #63
コミュニティ紹介
• Firefox OSコミュニティで各種イベントのスタッフとかス
ピーカとかやってます
– FxOSコードリーディングというコミュニティのいいだしっぺ
• http://reading.fx...
わんくま同盟 大阪勉強会 #63
今日のアジェンダ1
• Firefox OSの全体像
– Gaia
– Gecko
– Gonk
わんくま同盟 大阪勉強会 #63
今日のアジェンダ2
• Gaiaについて少し詳しく
– Gaiaの全体像
– アプリの権限
– ChromeプロセスとContentプロセス
– Chromeプロセスで動くアプリ
– Contentプロセスで動...
わんくま同盟 大阪勉強会 #63
今日のアジェンダ3
• Geckoについて少し詳しく
– Gecko概要
– 三大機能と三つのツリー
わんくま同盟 大阪勉強会 #63
今日のアジェンダ4
• Gonkについて少し詳しく
– HAL
– AOSP Linux
• 全体まとめ
• さいごに
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gaia
• UIやプリインアプリなど
ユーザに見える基本機能を
提供する
• すべてHTML5で書かれている
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gecko
• Gaiaやユーザアプリが
使用するAPIやHTML5の
ランタイムを提供する
• C++、JS...
わんくま同盟 大阪勉強会 #63
Firefox OSの全体像
• Firefox OSは大別して三つのモ
ジュールで構成される
– Gonk
• OS、HALなどを含む層
• C/C++で書かれている
わんくま同盟 大阪勉強会 #63
Gaia
• UIやプリインアプリなどでデ
バイスの基本的な操作を提供
する
• すべてHTML5で書かれている
• Geckoに依存するがプラット
フォームに依存しない
– B2Gデバイス、デスクトップ、
シ...
わんくま同盟 大阪勉強会 #63
Gecko
• Gaiaやユーザアプリが使用す
るAPIやHTML5のランタイムを
提供する
• C++、JS、IDLなど多くの言語
で実現されている
• FirefoxやThunderbirdなどの
Mozi...
わんくま同盟 大阪勉強会 #63
Gonk
• OS、HALなどを含む層
• WindowsやMac OS XなどのOS
と同等にGeckoの移植対象プ
ラットフォームの一つとして
定義されている
• Gonkは現状唯一B2Gの要求を
満たすプ...
わんくま同盟 大阪勉強会 #63
GAIAについて少し詳しく
わんくま同盟 大阪勉強会 #63
Gaiaの全体像
• Gaiaのアプリ (以下内部アプ
リ) はUIや基本機能を提供する
• 内部アプリは大きく分けて
Chromeプロセスで動くアプリ
とContentプロセスで動くアプ
リに分けられる
わんくま同盟 大阪勉強会 #63
アプリの権限
• アプリには利用できるAPIの範
囲が異なる権限タイプが存在
する
– web権限 (ホスト型アプリ/単純
なパッケージ型アプリ)
– trusted権限 (信頼されたホスト型
アプリ)
– p...
わんくま同盟 大阪勉強会 #63
ChromeプロセスとContentプロセス
• 内部アプリは特権的な機能を
利用するため認証 (certified) 権
限を持つ
• Geckoの制約上特権的APIは特
権的なプロセスでないと実行で
きない...
わんくま同盟 大阪勉強会 #63
ChromeプロセスとContentプロセス
• 内部アプリの大部分を含む一
般的なアプリでは特権的でな
いContentプロセスで動作する
• Contentプロセスで動作するア
プリでもアプリマニフェスト
...
わんくま同盟 大阪勉強会 #63
アプリのヒエラルキー
• Firefox OSのアプリは少数の
Chromeプロセスアプリと多数
のContentプロセスアプリから
なる
• Firefox OSで実行されるアプリ
はSystemアプリの子プ...
わんくま同盟 大阪勉強会 #63
Chromeプロセスで動くアプリ
• Chromeプロセスで動くアプリ
としては以下のものが挙げら
れる
– Systemアプリ
– Settingsアプリ
– ブラウザアプリ
– キーボードアプリ
– 検索ア...
わんくま同盟 大阪勉強会 #63
Systemアプリ
• アプリの管理とか共通して使
われるUIを管理するアプリ
• Firefox OSで見た目のあるアプ
リすべての親
– 見た目がないアプリもいくつか
ぶら下がっている
• アプリ起動時のア...
わんくま同盟 大阪勉強会 #63
Settingsアプリ
• 特定のアプリによらない設定
を行うアプリ
• 端末設定を変更するのは特権
的機能なのでChromeプロセス
で動作する
• Systemアプリが提供している
機能の設定はSettin...
わんくま同盟 大阪勉強会 #63
ブラウザアプリ
• その名の通りブラウザアプリ
• webブラウズだけでなくアプ
リのインストール経路にもな
るので特権的な位置づけにあ
る
Settings
キーボード
検索
System
ブラウザ
わんくま同盟 大阪勉強会 #63
キーボードアプリ
• ユーザが文字入力を行うため
のアプリ
• ここではキーボードそのもの
ではなくキーボードが動作す
るフレームワークになる部分
を指している
• 実際操作される部分はユーザ
が選択可能であり...
わんくま同盟 大阪勉強会 #63
検索
• ホーム画面上部にある検索
ボックス
• v2.1からはアプリ起動中もス
テータスバーに常駐するよう
になった
• 検索ボックスもアプリのイン
ストール経路になるので特権
的な位置づけになる
Setti...
わんくま同盟 大阪勉強会 #63
Contentプロセスで動くアプリ
• Contentプロセスで動くアプリ
は多数あるが大別すると以下
の二つ
– プリインアプリ (内部アプリ)
– ユーザアプリ
プリインアプリ
ユーザアプリ
わんくま同盟 大阪勉強会 #63
プリインアプリ
• ダイアラやメッセージングな
どの工場出荷状態でインス
トール済みのアプリ
• 一部の特権アプリを除いてほ
ぼ認証権限を持つ
• 一般の開発者によるアプリも
採用されることがある
ユーザアプリ...
わんくま同盟 大阪勉強会 #63
ユーザアプリ
• ユーザアプリは出荷後にユー
ザによってインストールされ
るアプリ
• 基本的には検索やマーケット
プレイスを通して入手する
プリインアプリ
ユーザアプリ
わんくま同盟 大阪勉強会 #63
GECKOについて少し詳しく
わんくま同盟 大阪勉強会 #63
Geckoの全体像
• ざっくり分けてブラウザ機能、
通信系、レンダラ、描画系、
スクリプトエンジン、プラグ
インコンテナ、プラット
フォーム固有層、プラット
フォーム抽象化層で構成され
る
• 全部は話せない...
わんくま同盟 大阪勉強会 #63
Gecko概要
• ブラウザ機能
– 履歴やブラウザコンテキストの
管理、トップレベルオブジェク
トの提供などを行う
• 通信系
– 主にプロトコルに応じた処理へ
ディスパッチするプロトコルハ
ンドラ、サーバと...
わんくま同盟 大阪勉強会 #63
Gecko概要
• レンダラ
– CSSやstyle属性、JSからの操作に
よって決定されるDOMツリーの
表示表現を作り描画系に指示を
与える
• 描画系
– プラットフォームに依存しない
抽象化された描画フ...
わんくま同盟 大阪勉強会 #63
Gecko概要
• スクリプトエンジン
– JavaScriptエンジン、XPConnect
(XPCOM)、WebIDLバインディン
グなど数種類の言語処理系を持
つ
• プラグインコンテナ
– Flashプ...
わんくま同盟 大阪勉強会 #63
Gecko概要
• プラットフォーム抽象化層
– NSPR、XPCOMなどのクロスプ
ラットフォーム用抽象化ライブ
ラリや文字列、数などのプラッ
トフォームによらず表現を一定
にしたいプリミティブなデータ
表現...
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• ここからはブラウザ機能、レ
ンダラ、描画系、スクリプト
エンジンにまたがるGeckoの
主要機能について述べる
Gecko
プラットフォーム固有層
プラットフォーム抽象化層
プラグイ...
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• Geckoはブラウザの機能とし
てHTMLパーザ、JSエンジン、
CSSレンダラを持つ
• これらはそれぞれDOMツリー、
JSオブジェクトツリー、レン
ダリングツリーという密接に
...
わんくま同盟 大阪勉強会 #63
三大機能と三つのツリー
• HTMLがパースされDOMツ
リーになると、DOMツリーと
対応したJSオブジェクトのツ
リー、DOMツリーにCSSやJS
による操作を適用して描画を
行うためのレンダリングツ
リー...
わんくま同盟 大阪勉強会 #63
HTMLパーザとDOMツリー
• パーザはHTMLを解釈すると
DOMと呼ばれるツリー上の
データ構造を構築する
• DOMツリーはHTMLとして記
述された木構造とその構造上
のオブジェクトに対する操作、
状...
わんくま同盟 大阪勉強会 #63
JSエンジンとJSオブジェクトツリー
• JSエンジンはHTMLから参照さ
れているJavaScriptのソース
コードやscriptタグ内に記述さ
れたJavaScriptを読み込んで実
行する
<html>...
わんくま同盟 大阪勉強会 #63
<html>
<body>
<head>
…
<section>
… …
JSエンジンとJSオブジェクトツリー
• この時DOMツリーとして構築
された木構造と関連して
JavaScriptから操作可能なオブ
...
わんくま同盟 大阪勉強会 #63
レンダラとレンダリングツリー
• レンダラはCSS、style属性、
JavaScriptによる操作などの結
果DOM要素がどのように描画
されるかを計算する
<html>
<head>
<title> <me...
わんくま同盟 大阪勉強会 #63
レンダラとレンダリングツリー
• レンダラやスタイルシステム
はDOMツリーをもとにスタイ
ルやJavaScriptによる操作を適
用した描画計算に基づくツ
リー構造を作る
– これをレンダリングツリーと呼
ぶ...
わんくま同盟 大阪勉強会 #63
GONKについて少し詳しく
わんくま同盟 大阪勉強会 #63
Gonk概要
• GonkはOSや低レベル機能を含
む層
• 基礎的なOSとしてはAOSP
Linuxを使っている
• WindowsやLinux、Mac OS Xの
ようなGeckoの移植対象の一
つとして開...
わんくま同盟 大阪勉強会 #63
Gonk概要
• 現状Geckoの移植対象OSの中
では唯一特権的機能にアクセ
スできるため、他のOSでは実
現不可能なAPIなども実装され
ている
• ここからHAL層とAOSP Linux
について少し述べ...
わんくま同盟 大阪勉強会 #63
HAL
• その名の通りハードウェアを
抽象化する層
– GeckoのHALラッパー層で上位に
提供するAPI仕様を満たす制御を
行い、GonkのHAL層はGeckoの
HALラッパーが要求するイン
ターフェイ...
わんくま同盟 大阪勉強会 #63
AOSP Linux
• Android Open Source Projectに
よってホストされているLinux
• GonkはAOSP Linuxから不要な
モジュール (SurfaceFlingerな
...
わんくま同盟 大阪勉強会 #63
AOSP Linux
• ブートの仕組みはAndroidと同
様にinitがinit.rcを読み込んで記
述にしたがって順次プロセス
を起動する
– Firefox OSの場合はinit.b2g.rcと
いう固...
わんくま同盟 大阪勉強会 #63
全体まとめ
• Firefox OSはGaia、Gecko、Gonkの三層からなる
• Gaiaはユーザの目に触れる部分、ユーザが直接触れる体験
を提供する
• Geckoはデスクトップブラウザにも使われてるエ...
わんくま同盟 大阪勉強会 #63
さいごに
• ものすごく駆け足でFirefox OSの全体を一攫いしました
• 各部分だけで何セッションかできる骨太機能の集まりなの
でどこを見ても楽しいですよ!
• Firefox OSコミュニティはまだ若い...
Upcoming SlideShare
Loading in …5
×

Firefox OSアーキテクチャクイックツアー

0 views

Published on

FIrefox OS Architecture quick tour.
Lecture at WANKUMA Seminar Oosaka #63.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Firefox OSアーキテクチャクイックツアー

  1. 1. わんくま同盟 大阪勉強会 #63 Firefox OSアーキテクチャクイックツアー 株式会社グローバルサイバーグループ マネージャ 藪下 正美
  2. 2. わんくま同盟 大阪勉強会 #63 はじめに
  3. 3. わんくま同盟 大阪勉強会 #63 自己紹介 • 藪下正美 – わんくまでは普段あおいたんとか名乗ってる人 – 大阪は#45以来ですおひさしぶりです • 株式会社グローバルサイバーグループから来ました • Firefox OSコミュニティから来ました • Codezineで記事書きました – Firefox OSアプリ開発が楽しくなるハードウェアAPIの概要と、 センサーAPIや音声APIを使った楽器アプリの作例 – http://codezine.jp/article/detail/8540
  4. 4. わんくま同盟 大阪勉強会 #63 会社紹介 • 株式会社グローバルサイバーグループ – 関西出身の組み込み系の会社 • 携帯電話とか業務用コピー機とかデジカメとかの中の人やってます • 最近はAndroidのすごい下の方か各モバイルOS向けアプリを主にやって ます – Firefox OSの勉強会を支援する事業やってるので興味があればご 相談ください • http://www.gcg.bz/labo_blog/?page_id=943 – 各種モバイルOSの質問も受け付けてます。ブログで回答します • http://www.gcg.bz/labo_blog/?page_id=945
  5. 5. わんくま同盟 大阪勉強会 #63 コミュニティ紹介 • Firefox OSコミュニティで各種イベントのスタッフとかス ピーカとかやってます – FxOSコードリーディングというコミュニティのいいだしっぺ • http://reading.fxos.org/ • 大体毎月Mozilla Japanのオフィスでソースコードを読む会やってます • 年三回ぐらい成果発表会的なセミナーやってます • ほかにもHTML5j Webプラットフォーム部とかWoT的なソ フト/ハードを味見するコミュニティもやってます
  6. 6. わんくま同盟 大阪勉強会 #63 今日のアジェンダ1 • Firefox OSの全体像 – Gaia – Gecko – Gonk
  7. 7. わんくま同盟 大阪勉強会 #63 今日のアジェンダ2 • Gaiaについて少し詳しく – Gaiaの全体像 – アプリの権限 – ChromeプロセスとContentプロセス – Chromeプロセスで動くアプリ – Contentプロセスで動くアプリ
  8. 8. わんくま同盟 大阪勉強会 #63 今日のアジェンダ3 • Geckoについて少し詳しく – Gecko概要 – 三大機能と三つのツリー
  9. 9. わんくま同盟 大阪勉強会 #63 今日のアジェンダ4 • Gonkについて少し詳しく – HAL – AOSP Linux • 全体まとめ • さいごに
  10. 10. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される
  11. 11. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gaia • UIやプリインアプリなど ユーザに見える基本機能を 提供する • すべてHTML5で書かれている
  12. 12. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gecko • Gaiaやユーザアプリが 使用するAPIやHTML5の ランタイムを提供する • C++、JS、IDLなど多くの 言語で実現されている
  13. 13. わんくま同盟 大阪勉強会 #63 Firefox OSの全体像 • Firefox OSは大別して三つのモ ジュールで構成される – Gonk • OS、HALなどを含む層 • C/C++で書かれている
  14. 14. わんくま同盟 大阪勉強会 #63 Gaia • UIやプリインアプリなどでデ バイスの基本的な操作を提供 する • すべてHTML5で書かれている • Geckoに依存するがプラット フォームに依存しない – B2Gデバイス、デスクトップ、 シミュレータなどGeckoが動作 する環境であれば広く動作する • Gaiaはプロファイルに応じて 提供する機能やUIの変更が多 い
  15. 15. わんくま同盟 大阪勉強会 #63 Gecko • Gaiaやユーザアプリが使用す るAPIやHTML5のランタイムを 提供する • C++、JS、IDLなど多くの言語 で実現されている • FirefoxやThunderbirdなどの Mozilla製品で共通のランタイ ム
  16. 16. わんくま同盟 大阪勉強会 #63 Gonk • OS、HALなどを含む層 • WindowsやMac OS XなどのOS と同等にGeckoの移植対象プ ラットフォームの一つとして 定義されている • Gonkは現状唯一B2Gの要求を 満たすプラットフォーム – 他のOSでは必要な権限が得られ ない • Gonkで使用されるOSはAOSP Linux
  17. 17. わんくま同盟 大阪勉強会 #63 GAIAについて少し詳しく
  18. 18. わんくま同盟 大阪勉強会 #63 Gaiaの全体像 • Gaiaのアプリ (以下内部アプ リ) はUIや基本機能を提供する • 内部アプリは大きく分けて Chromeプロセスで動くアプリ とContentプロセスで動くアプ リに分けられる
  19. 19. わんくま同盟 大阪勉強会 #63 アプリの権限 • アプリには利用できるAPIの範 囲が異なる権限タイプが存在 する – web権限 (ホスト型アプリ/単純 なパッケージ型アプリ) – trusted権限 (信頼されたホスト型 アプリ) – privileged権限 (特権型アプリ) – certified権限 (内部アプリ) 権限 概要 Web権限 基本的な権限 ハードウェアにアクセスするAPIやプライ バシーにかかわるAPIが使えない Trusted権限 V2.1から追加された権限 一部のユーザに許可を求めるタイプの APIを使用できる Privileged権限 事業者に関わる課金、重大なプライバ シー/セキュリティインシデントが予想さ れるものを除いたAPIが使用できる権限 Certified権限 キャリアやメーカがプリインアプリでのみ 使用可能な権限 すべてのAPIを使用できる
  20. 20. わんくま同盟 大阪勉強会 #63 ChromeプロセスとContentプロセス • 内部アプリは特権的な機能を 利用するため認証 (certified) 権 限を持つ • Geckoの制約上特権的APIは特 権的なプロセスでないと実行で きない • この特権的なプロセスを Chromeプロセスと呼ぶ Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement) API呼び出し
  21. 21. わんくま同盟 大阪勉強会 #63 ChromeプロセスとContentプロセス • 内部アプリの大部分を含む一 般的なアプリでは特権的でな いContentプロセスで動作する • Contentプロセスで動作するア プリでもアプリマニフェスト で宣言し、ユーザに許可され た機能についてはAPIの使用を 許可される Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement)
  22. 22. わんくま同盟 大阪勉強会 #63 アプリのヒエラルキー • Firefox OSのアプリは少数の Chromeプロセスアプリと多数 のContentプロセスアプリから なる • Firefox OSで実行されるアプリ はSystemアプリの子プロセス として実行される • 子プロセスはContentプロセス として起動される Gaia Gecko Chrome プロセス Content プロセス APIs (Interface) APIs (Implement)
  23. 23. わんくま同盟 大阪勉強会 #63 Chromeプロセスで動くアプリ • Chromeプロセスで動くアプリ としては以下のものが挙げら れる – Systemアプリ – Settingsアプリ – ブラウザアプリ – キーボードアプリ – 検索アプリ • これらのアプリにはSystemア プリの一部として動作するも のもある System Settings ブラウザ キーボード 検索
  24. 24. わんくま同盟 大阪勉強会 #63 Systemアプリ • アプリの管理とか共通して使 われるUIを管理するアプリ • Firefox OSで見た目のあるアプ リすべての親 – 見た目がないアプリもいくつか ぶら下がっている • アプリ起動時のアニメーショ ンやアプリの切り替えなども Systemアプリの管轄 Settings ブラウザ キーボード 検索 System
  25. 25. わんくま同盟 大阪勉強会 #63 Settingsアプリ • 特定のアプリによらない設定 を行うアプリ • 端末設定を変更するのは特権 的機能なのでChromeプロセス で動作する • Systemアプリが提供している 機能の設定はSettingsアプリの 仕事となる ブラウザ キーボード 検索 System Settings
  26. 26. わんくま同盟 大阪勉強会 #63 ブラウザアプリ • その名の通りブラウザアプリ • webブラウズだけでなくアプ リのインストール経路にもな るので特権的な位置づけにあ る Settings キーボード 検索 System ブラウザ
  27. 27. わんくま同盟 大阪勉強会 #63 キーボードアプリ • ユーザが文字入力を行うため のアプリ • ここではキーボードそのもの ではなくキーボードが動作す るフレームワークになる部分 を指している • 実際操作される部分はユーザ が選択可能であり作成可能で ある Settings ブラウザ 検索 System キーボード
  28. 28. わんくま同盟 大阪勉強会 #63 検索 • ホーム画面上部にある検索 ボックス • v2.1からはアプリ起動中もス テータスバーに常駐するよう になった • 検索ボックスもアプリのイン ストール経路になるので特権 的な位置づけになる Settings ブラウザ キーボード System 検索
  29. 29. わんくま同盟 大阪勉強会 #63 Contentプロセスで動くアプリ • Contentプロセスで動くアプリ は多数あるが大別すると以下 の二つ – プリインアプリ (内部アプリ) – ユーザアプリ プリインアプリ ユーザアプリ
  30. 30. わんくま同盟 大阪勉強会 #63 プリインアプリ • ダイアラやメッセージングな どの工場出荷状態でインス トール済みのアプリ • 一部の特権アプリを除いてほ ぼ認証権限を持つ • 一般の開発者によるアプリも 採用されることがある ユーザアプリ プリインアプリ
  31. 31. わんくま同盟 大阪勉強会 #63 ユーザアプリ • ユーザアプリは出荷後にユー ザによってインストールされ るアプリ • 基本的には検索やマーケット プレイスを通して入手する プリインアプリ ユーザアプリ
  32. 32. わんくま同盟 大阪勉強会 #63 GECKOについて少し詳しく
  33. 33. わんくま同盟 大阪勉強会 #63 Geckoの全体像 • ざっくり分けてブラウザ機能、 通信系、レンダラ、描画系、 スクリプトエンジン、プラグ インコンテナ、プラット フォーム固有層、プラット フォーム抽象化層で構成され る • 全部は話せないのでざっくり 分けた機能について一言ずつ と代表的な機能の中でも密接 な関係を持っている部分につ いて述べる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能
  34. 34. わんくま同盟 大阪勉強会 #63 Gecko概要 • ブラウザ機能 – 履歴やブラウザコンテキストの 管理、トップレベルオブジェク トの提供などを行う • 通信系 – 主にプロトコルに応じた処理へ ディスパッチするプロトコルハ ンドラ、サーバとの通信を行う チャネル、URI文字列の構文 チェックや正規化を行うURIオブ ジェクトを中心概念として構成 される Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能
  35. 35. わんくま同盟 大阪勉強会 #63 Gecko概要 • レンダラ – CSSやstyle属性、JSからの操作に よって決定されるDOMツリーの 表示表現を作り描画系に指示を 与える • 描画系 – プラットフォームに依存しない 抽象化された描画フレームワー クMoz2D、旧フレームワークの Thebes、レイヤシステム、APZ (Asynchronous Pan and Zoom) な どからなる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ スクリプトエンジン 通信系 ブラウザ機能 レンダラ
  36. 36. わんくま同盟 大阪勉強会 #63 Gecko概要 • スクリプトエンジン – JavaScriptエンジン、XPConnect (XPCOM)、WebIDLバインディン グなど数種類の言語処理系を持 つ • プラグインコンテナ – Flashプレイヤーなどのサード パーティプラグインやDRMシス テム、ビデオハードウェア、そ の他埋め込みオブジェクトなど をブラウザ本体のプロセスから 切り離し影響を最小化するため のコンテナ機能を提供する Gecko プラットフォーム固有層 プラットフォーム抽象化層 レンダラ 通信系 ブラウザ機能 プラグインコンテナ スクリプトエンジン
  37. 37. わんくま同盟 大阪勉強会 #63 Gecko概要 • プラットフォーム抽象化層 – NSPR、XPCOMなどのクロスプ ラットフォーム用抽象化ライブ ラリや文字列、数などのプラッ トフォームによらず表現を一定 にしたいプリミティブなデータ 表現を提供する • プラットフォーム固有層 – ウィジェット、ファイル、ソ ケット、ヒューマンインター フェイスなど低レイヤ機能 Gecko プラグインコンテナ スクリプトエンジン レンダラ 通信系 ブラウザ機能 プラットフォーム固有層 プラットフォーム抽象化層
  38. 38. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • ここからはブラウザ機能、レ ンダラ、描画系、スクリプト エンジンにまたがるGeckoの 主要機能について述べる Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ 通信系 スクリプトエンジン レンダラ ブラウザ機能
  39. 39. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • Geckoはブラウザの機能とし てHTMLパーザ、JSエンジン、 CSSレンダラを持つ • これらはそれぞれDOMツリー、 JSオブジェクトツリー、レン ダリングツリーという密接に 関係した三つのツリー構造を 持つ Gecko プラットフォーム固有層 プラットフォーム抽象化層 プラグインコンテナ 通信系 スクリプトエンジン レンダラ ブラウザ機能 HTMLパーザ JSエンジン CSSレンダラ
  40. 40. わんくま同盟 大阪勉強会 #63 三大機能と三つのツリー • HTMLがパースされDOMツ リーになると、DOMツリーと 対応したJSオブジェクトのツ リー、DOMツリーにCSSやJS による操作を適用して描画を 行うためのレンダリングツ リーも連動して生成される <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … …
  41. 41. わんくま同盟 大阪勉強会 #63 HTMLパーザとDOMツリー • パーザはHTMLを解釈すると DOMと呼ばれるツリー上の データ構造を構築する • DOMツリーはHTMLとして記 述された木構造とその構造上 のオブジェクトに対する操作、 状態を表したオブジェクト – JavaScriptから操作することに よってHTMLの状態や見た目の状 態を変更することができる HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … … <html> <head> <title> <meta> … <body> <header> … <section> … …
  42. 42. わんくま同盟 大阪勉強会 #63 JSエンジンとJSオブジェクトツリー • JSエンジンはHTMLから参照さ れているJavaScriptのソース コードやscriptタグ内に記述さ れたJavaScriptを読み込んで実 行する <html> <head> <title> <meta> … <body> <header> … <section> … … <html> <body> <head> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … …
  43. 43. わんくま同盟 大阪勉強会 #63 <html> <body> <head> … <section> … … JSエンジンとJSオブジェクトツリー • この時DOMツリーとして構築 された木構造と関連して JavaScriptから操作可能なオブ ジェクトを構築していく – その結果JavaScriptからDOMツ リーを操作したり、何らかの要 因で変更されたDOMツリーに対 応してJavaScriptから参照できる オブジェクトの状態も変化する 関係が作られる <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … …
  44. 44. わんくま同盟 大阪勉強会 #63 レンダラとレンダリングツリー • レンダラはCSS、style属性、 JavaScriptによる操作などの結 果DOM要素がどのように描画 されるかを計算する <html> <head> <title> <meta> … <body> <header> … <section> … … HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … …
  45. 45. わんくま同盟 大阪勉強会 #63 レンダラとレンダリングツリー • レンダラやスタイルシステム はDOMツリーをもとにスタイ ルやJavaScriptによる操作を適 用した描画計算に基づくツ リー構造を作る – これをレンダリングツリーと呼 ぶ • レンダラにはパイプライン構 造があり、各要素の矩形フ レーム生成、レンダリングツ リーの構築、レイアウト、リ フロー、描画と進む HTMLElement HTMLHeadEle ment HTMLTitleEle ment HTMLMetaEle ment … HTMLBodyEle ment Element … Element … … <html> <body> <head> … <section> … … <html> <head> <title> <meta> … <body> <header> … <section> … …
  46. 46. わんくま同盟 大阪勉強会 #63 GONKについて少し詳しく
  47. 47. わんくま同盟 大阪勉強会 #63 Gonk概要 • GonkはOSや低レベル機能を含 む層 • 基礎的なOSとしてはAOSP Linuxを使っている • WindowsやLinux、Mac OS Xの ようなGeckoの移植対象の一 つとして開発されている Gonk Daemon Interfaces HAL Drivers Linux
  48. 48. わんくま同盟 大阪勉強会 #63 Gonk概要 • 現状Geckoの移植対象OSの中 では唯一特権的機能にアクセ スできるため、他のOSでは実 現不可能なAPIなども実装され ている • ここからHAL層とAOSP Linux について少し述べる Gonk Daemon Interfaces Drivers Linux HAL
  49. 49. わんくま同盟 大阪勉強会 #63 HAL • その名の通りハードウェアを 抽象化する層 – GeckoのHALラッパー層で上位に 提供するAPI仕様を満たす制御を 行い、GonkのHAL層はGeckoの HALラッパーが要求するイン ターフェイスを提供する – 多くの場合GeckoのHALラッパー 層で非同期処理の制御を行い、 GonkのHAL層では同期的なAPIを 提供している Gonk Daemon Interfaces Drivers Linux HAL
  50. 50. わんくま同盟 大阪勉強会 #63 AOSP Linux • Android Open Source Projectに よってホストされているLinux • GonkはAOSP Linuxから不要な モジュール (SurfaceFlingerな ど) を取り除きGeckoの要求す るHALインターフェイスを実 装したOSである Gonk Daemon Interfaces HAL Drivers Linux
  51. 51. わんくま同盟 大阪勉強会 #63 AOSP Linux • ブートの仕組みはAndroidと同 様にinitがinit.rcを読み込んで記 述にしたがって順次プロセス を起動する – Firefox OSの場合はinit.b2g.rcと いう固有の設定ファイルがinit.rc から参照されている – init.b2g.rcの記述にしたがって Geckoを起動しshell.jsという起動 用のスクリプトをGeckoに処理 させることでFirefox OSを起動す る Gonk Daemon Interfaces HAL Drivers Linux
  52. 52. わんくま同盟 大阪勉強会 #63 全体まとめ • Firefox OSはGaia、Gecko、Gonkの三層からなる • Gaiaはユーザの目に触れる部分、ユーザが直接触れる体験 を提供する • Geckoはデスクトップブラウザにも使われてるエンジン。 ブラウザに必要な機能を一通り備えた (=OSの要件を備え た) エンジンをミドルウェアとして利用している • GonkはFirefox OSのために作られたOSコア部分。Geckoの 移植対象OSでもある
  53. 53. わんくま同盟 大阪勉強会 #63 さいごに • ものすごく駆け足でFirefox OSの全体を一攫いしました • 各部分だけで何セッションかできる骨太機能の集まりなの でどこを見ても楽しいですよ! • Firefox OSコミュニティはまだ若い世界です • あなたも一緒に盛り上げてみませんか?

×