Firefox OS 起動の仕組みを調べてみた
関東Firefox OS勉強会 3rd ごった煮
2013.8.28
2
本日お話する内容
• Firefox OSの内部構造
• Firefox OSが起動するまでの流れ
3
自己紹介
本発表は私の個人的な調査に基づくものです。
内容に誤りがあるかもしれませんがご了承ください
名前 西村 宗晃 (にしむねあ)
・https://www.facebook.com/muneaki.nishimura
職業 セキュリテ...
4
求む!Geckoの勉強会を開いてくれる人
• Geckoの中身は複雑で素人には分からないことだらけ
• ウェブでは情報が見つからなかったり、あっても古くて今の仕様と違ったり
• でも、自分で勉強会を開くのはなんだか大変そう
• みんなで一緒...
5
なぜ、起動処理?
OSアーキテクチャの骨格が理解できるから
• OSを構成するモジュールの概要や、それぞれの依存関係など
セキュリティ的に重要な機能だから
• 多くの処理がroot権限で動くのでよく狙われる
• Androidの場合、roo...
6
Firefox OSの内部構造
Firefox OS 起動の仕組みを調べてみた
7
3層構造①
Gonk
Gecko
Gaia
Firefox OSの標準UIおよび標準アプリ群。
全てのソフトはHTML/JS/CSSで開発(Webアプリ)
Webアプリの実行環境。Firefoxブラウザのエンジンで
あるGeckoを拡張し、...
8
3層構造②
Gonk
Gecko
Gaia
• 起動後スクリーンに表示されるものは全てGaia
• オペレーターや端末メーカー独自の実装に差替可能
• Gaiaの使用する機能は全てGeckoが提供
• 実装の大部分はPC版のFirefoxブ...
9
3層構造をもう少しだけ分解
Gonk
Gecko
Gaia
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
10
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
Gonk
• 主目的はGeckoのChromeプロセスの起動
• 中身はほぼLinux KernelとAndroi...
11
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
XULRunner
• Cross PlatformのHTML/XULパーサおよびレンダラ
 Firefoxブラ...
12
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
Chrome
• 簡単に言うとブラウザウィンドウのこと
FirefoxブラウザのChrome
⁃ chrome:/...
13
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
Systemアプリ
• スマホとしての基本機能を提供するアプリ
 ウィンドウ制御、電力管理、画面ロック、通知など...
14
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
その他のアプリ群
• Gaia標準のプリインストールアプリ群
 カメラ、ブラウザ、カレンダー、メーラーなど
• ...
15
Firefox OSが起動するまでの流れ
Firefox OS 起動の仕組みを調べてみた
16
Gonk
Gecko
Gaia
起動の順序(ざっくり)
Chrome
XULRunner
Systemアプリ
その他アプリ群
Linux Kernel
Android Misc.
下から上に起動
17
Gonkの起動処理
Linux Kernel
を起動
Androidのsurfaceflingerや
zygoteなどは起動しない
Chromeプロセス
を開始
Gecko
を起動
fakeperm, rilproxyを起動
Androi...
18
Geckoの起動処理
• Binderを初期化
• XPCOMをプリロード
• 起動ロゴを表示
XULRunnerを起動Firefox OS固有部分を初期化
• XPCOMを初期化
• プロファイルをロード
• 各種サービスを初期化
• ...
19
Gaiaの起動処理
• CSS(Gaia-UI Building Blocksなど)をロード
• OS起動ロゴを表示
• 各機能(Window Managerなど)とUIを初期化
Chromeのスタートページ(ホームURL)として
Sys...
20
まとめ
① Firefox OSの3層構造:Gonk, Gecko, Gaia
• Gonk → Gecko → Gaiaの順に起動
② Geckoから後の起動処理はWebブラウザーの概念そのまま
• ブラウザウィンドウ(Chrome)を...
Upcoming SlideShare
Loading in …5
×

Firefox OS 起動の仕組みを調べてみた

9,930 views

Published on

2013年8月28日に開催される「関東Firefox OS勉強会 3rd ごった煮」の発表資料です。

Published in: Technology

Firefox OS 起動の仕組みを調べてみた

  1. 1. Firefox OS 起動の仕組みを調べてみた 関東Firefox OS勉強会 3rd ごった煮 2013.8.28
  2. 2. 2 本日お話する内容 • Firefox OSの内部構造 • Firefox OSが起動するまでの流れ
  3. 3. 3 自己紹介 本発表は私の個人的な調査に基づくものです。 内容に誤りがあるかもしれませんがご了承ください 名前 西村 宗晃 (にしむねあ) ・https://www.facebook.com/muneaki.nishimura 職業 セキュリティエンジニア ・セキュア開発のコンサルティング ・Android端末~アプリの開発支援
  4. 4. 4 求む!Geckoの勉強会を開いてくれる人 • Geckoの中身は複雑で素人には分からないことだらけ • ウェブでは情報が見つからなかったり、あっても古くて今の仕様と違ったり • でも、自分で勉強会を開くのはなんだか大変そう • みんなで一緒にGeckoの中身を調べて きゃっきゃうふふ しませんか? (C) 2010 Mozilla Japan
  5. 5. 5 なぜ、起動処理? OSアーキテクチャの骨格が理解できるから • OSを構成するモジュールの概要や、それぞれの依存関係など セキュリティ的に重要な機能だから • 多くの処理がroot権限で動くのでよく狙われる • Androidの場合、root化やカスタムROMの起動などに利用される
  6. 6. 6 Firefox OSの内部構造 Firefox OS 起動の仕組みを調べてみた
  7. 7. 7 3層構造① Gonk Gecko Gaia Firefox OSの標準UIおよび標準アプリ群。 全てのソフトはHTML/JS/CSSで開発(Webアプリ) Webアプリの実行環境。Firefoxブラウザのエンジンで あるGeckoを拡張し、Webアプリからデバイスの機能 を操作できるようにしたもの OSの基本機能を担当。また、ハードウェアの差異を吸 収し、デバイス上でGeckoを動作させる役割を担う
  8. 8. 8 3層構造② Gonk Gecko Gaia • 起動後スクリーンに表示されるものは全てGaia • オペレーターや端末メーカー独自の実装に差替可能 • Gaiaの使用する機能は全てGeckoが提供 • 実装の大部分はPC版のFirefoxブラウザと共通 • 改変可能だがデメリットもある (Updateに伴うコスト、MPLによる改変コードの開示義務) • 低水準OS + GeckoのHAL • HALは使用するハードウェアに応じて改変可能、 ただしOSの差し替えは現実的に困難
  9. 9. 9 3層構造をもう少しだけ分解 Gonk Gecko Gaia Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc.
  10. 10. 10 Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. Gonk • 主目的はGeckoのChromeプロセスの起動 • 中身はほぼLinux KernelとAndroid  改変や追加したコード(図中のMisc.)は100kB以下  Androidのappprocessやsurfaceflingerは使わないので systemイメージから抜いている  Androidアーキテクチャとの整合性を取るための機能を追加 ⁃ fakeperm : パーミッションチェックを全てOKでパスさせるスタブ ⁃ rilproxy : 電話アプリ以外からrildにアクセスするためのプロキシ
  11. 11. 11 Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. XULRunner • Cross PlatformのHTML/XULパーサおよびレンダラ  FirefoxブラウザをOS毎に個別開発せず済むように開発された  Geckoレンダリングエンジンを内包 • ブラウザの画面自体もレンダリングできる  Firefoxブラウザのウィンドウ(Chrome)もXULのドキュメント • XULRunnerには2種類ある  Firefoxブラウザの内部に組み込まれたPrivateなXULRunner  スタンドアロンアプリの開発を可能とするPublicなXULRunner
  12. 12. 12 Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. Chrome • 簡単に言うとブラウザウィンドウのこと FirefoxブラウザのChrome ⁃ chrome://browser/content/browser.xul ⁃ アドレスバーや戻るボタンがある ⁃ コンテンツ領域にWebページを表示する Firefox OSのChrome ⁃ chrome://browser/content/shell.xul ⁃ 何の装飾も無い黒塗りのウィンドウ※ ⁃ iframeでWebアプリを表示する ※ v1.1はApp Manifestのchromeフィールドを定義することで、そのアプリが前面で開かれている間のみ戻るボタンなどを表示できます
  13. 13. 13 Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. Systemアプリ • スマホとしての基本機能を提供するアプリ  ウィンドウ制御、電力管理、画面ロック、通知など  他のアプリを起動する処理も担う • Chromeプロセス上で動作する  Chromeプロセス:Firefox OSの基幹プロセス ⁃ システムに1つだけ存在、root権限で動作  Geckoの重要な機能はChromeプロセス上で実行される ⁃ アプリのインストールや起動 ⁃ ほとんどのハードウェアを制御
  14. 14. 14 Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. その他のアプリ群 • Gaia標準のプリインストールアプリ群  カメラ、ブラウザ、カレンダー、メーラーなど • Contentプロセス上で動作する※  Contentプロセス:権限の制限されたアプリ用のプロセス ⁃ 1アプリに付き1プロセス割り当てられる ⁃ アプリが落ちてもOSを巻き込まない  Firefoxブラウザのplugin-containerプロセスの仕組みを流用 ⁃ plugin-containerとはFlash等のプラグインを表示する専用プロセス ⁃ プラグインが落ちてもブラウザを巻き込まない ※ 現在、ブラウザアプリはChromeプロセスで動作しています (恐らくBug 761935が原因)
  15. 15. 15 Firefox OSが起動するまでの流れ Firefox OS 起動の仕組みを調べてみた
  16. 16. 16 Gonk Gecko Gaia 起動の順序(ざっくり) Chrome XULRunner Systemアプリ その他アプリ群 Linux Kernel Android Misc. 下から上に起動
  17. 17. 17 Gonkの起動処理 Linux Kernel を起動 Androidのsurfaceflingerや zygoteなどは起動しない Chromeプロセス を開始 Gecko を起動 fakeperm, rilproxyを起動 Androidのrild, vold, netd, mediaserverなどを起動 Androidのinitプロセス を開始 init.b2g.rc をロード init.rc をロード Firefox OSのみ • zygote(全Androidアプリの親プロセス)の代わりにChromeプロセスを起動 ⁃ Dalvik VM(Java仮想マシン)の代わりにGeckoを起動
  18. 18. 18 Geckoの起動処理 • Binderを初期化 • XPCOMをプリロード • 起動ロゴを表示 XULRunnerを起動Firefox OS固有部分を初期化 • XPCOMを初期化 • プロファイルをロード • 各種サービスを初期化 • プリファレンス※を初期化 • Chrome(shell.xul)をロード • ブラウザウィンドウを描画 • iframeを生成しホームURL をロード (Chrome) Chromeを描画 ※ プリファレンス:Firefoxブラウザのアドレスバーに about:config と入力すると表示されるやつです
  19. 19. 19 Gaiaの起動処理 • CSS(Gaia-UI Building Blocksなど)をロード • OS起動ロゴを表示 • 各機能(Window Managerなど)とUIを初期化 Chromeのスタートページ(ホームURL)として Systemアプリのindex.htmlを開く Homescreenアプリをロードして完了
  20. 20. 20 まとめ ① Firefox OSの3層構造:Gonk, Gecko, Gaia • Gonk → Gecko → Gaiaの順に起動 ② Geckoから後の起動処理はWebブラウザーの概念そのまま • ブラウザウィンドウ(Chrome)を開く • ホームURLとしてSystemアプリを開く • 全てのアプリはiframe上のコンテンツ ③ どなたかGeckoの勉強会を開いて下さい! • 今日はこれを言うために来ました

×