Mozillaは、1月8日にFirefoxの新バージョンとなる「Firefox 18」をリリースした。本稿では、インストール手順や新機能などを紹介したい。また、Webの信頼性を評価するWOT(Web of Trust)アドオンについても紹介しよう。

Firefox 18のインストール

すでにおなじみとなったFirefox 17からのアップデートは、Firefoxメニューの[ヘルプ]→[Firefoxについて]を開くと更新が自動的に開始されるので、[再起動して更新を完了]をクリックする(図1)。後述するが、今回のバージョンアップでは、多くのセキュリティ修正が行われた。何もしなくても更新は行われるが、なるべく急いで18へ移行すべきであろう。

図1 Firefox 18へのアップデート

初めて、Firefox 18をインストールする場合、Firefox 18のWebページからインストーラーをダウンロードする(図2)。

図2 Firefoxのダウンロードページ

[Firefox無料ダウンロード]をクリックし、保存したファイルをダブルクリックして、インストールを開始する(図3)。

図3 Firefox 18のインストール

Firefox 18の新機能

さて、Firefox 18の新機能や変更点を紹介しよう。

  • IonMonkeyコンパイラにより、JavaScriptがさらに高速化
  • Mac OS X 10.7以降でRetinaディスプレイをサポート
  • WebRTCの初期的サポート
  • HTMLの拡大アルゴリズムを改良し、画像の表示品質を向上
  • タブ切り替え時のパフォーマンスを改善

今回のバージョンアップでは、インターフェイスの変更などはなく、IonMonkeyコンパイラの採用がもっとも注目される点だろう。バージョン17までは、JITコンパイラにJagerMonkeyを搭載していた。おおざっぱにその違いを解説すると、これまではJITコンパイラが機械語に直接変換していた。それに対し、IonMonkeyコンパイラは途中で中間表現に変換する。その段階で最適化を行い、最適化された中間表現を機械語にする3段階のステップを踏む。実際、この方法の方が高速化達成しやすく、今後のさらなる高速化も期待できるとのことである。そこで、簡単ではあるが、ベンチマークをとってみた。まずは、Mozillaが提供するKraken JavaScript Benchmarkを試してみた。以下、その結果である。

図4 Kraken JavaScript Benchmark(バージョン17)

図5 Kraken JavaScript Benchmark(バージョン18)

Kraken JavaScript Benchmarkは、従来のJavaScriptベンチマークよりも、現実に近い負荷を与えるベンチマークとされる(詳細はこちらを参照)。筆者の環境では、5262から4550と約14%の向上がみられた。次に、Googleの提供するV8 Benchmarkである。

図6 V8 Benchmark(バージョン17)

図7 V8 Benchmark(バージョン18)

こちらでは、5055から5887と、約16%の向上がみられた。ちなみに、MozillaのJavaScript チームのテスト結果では、Kraken JavaScript Benchmarkで26%、V8 Benchmarkで7%の向上となったとのことである。

筆者の環境では、Kraken JavaScript Benchmarkの結果が芳しくなかったが、V8 Benchmarkでは、Mozillaでの結果以上となった。JavaScriptのベンチマークは、かつてはSunSpiderなどが有名であった。しかし、実環境と乖離しているなどとの指摘もあった。今回のベンチマークも、より実環境に近いものを目指している。しかし、あくまでもベンチマークであることは意識しておくべきであろう。実際のWeb閲覧でも、体感できるサイトがいくつかあった。

開発者向けの新機能

続いて、開発者向けなどの新機能である。

  • 新しいDOMプロパティwindow.devicePixelRatioをサポート
  • 署名付拡張機能の証明書の扱いを改善し、起動時間を短縮
  • W3CのTouchイベントを実装(従来のMozTouchイベントは廃止)

さらに修正項目として、

  • HTTPSページで安全でないコンテンツの読み込みを無効化
  • プロキシを利用しているユーザー環境での応答性の向上

などが行われた。

セキュリティアップデート

今回のバージョンアップで行われたセキュリティアップデートは、次の通りである。

  • 誤発行されたTURKTRUST証明書[最高]
  • JavaScript Proxyオブジェクトにおける解放後使用[最高]
  • Vibrateにおける解放後使用[最高]
  • ListenerManagerにおける解放後使用[最高]
  • serializeToStreamにおける解放後使用[最高]
  • プラグインオブジェクトを通じた特権昇格[最高]
  • プロトタイプの変更を通じたChrome Object Wrapper(COW)の回避[高]
  • SVGを含むXBLバインディングを用いたXBLにおけるメモリ破壊[高]
  • JavaScript文字列連結におけるバッファオーバーフロー[最高]
  • アドレス空間配置がXBLオブジェクト内にリークされる[高]
  • プラグインハンドラにおけるイベント操作が同一生成元ポリシーを回避する[高]
  • クイックスタブが返す値とコンパートメントの不一致[高]
  • AutoWrapperChangerがガベージコレクション中にオブジェクトの保持に失敗する[最高]
  • スレッド上でのSSL処理に起因するクラッシュ[高]
  • タッチイベントがインラインフレーム間で共有される[中]
  • 多数の列と列グループを含むテーブルの表示によって生じる解放後使用[最高]
  • ページ読み込み中のロケーションバー URL 偽装[高]
  • Canvasにおけるバッファオーバーフロー[最高]
  • Address Sanitizerを使って発見された解放後使用とバッファオーバーフローの問題[最高]
  • 様々なメモリ安全性の問題(rv:18.0/rv:10.0.12/rv:17.0.2)[最高]
  • FirefoxインストーラーのDLLハイジャック[高]

12の[最高]を含む、21のアップデートが行われた。いつもと比べるとかなり多い。すみやかにバージョンアップすべきである。