Gecko

**Gecko**（ゲッコー）は、Netscapeシリーズ 6以降およびMozillaソフトウェアのために開発されたオープンソースのHTMLレンダリングエンジン群の総称である。HTML、CSS、XUL、JavaScriptなどを解釈する。

なお、Geckoは英語でヤモリの意味を持つ。

## 歴史
当初、Mozillaは1998年に公開されたNetscape 5.0へ向けて開発中だったソースコードを元に開発されていたが、軽量化のために当時買収したDigital Style社のエンジンをベースにして新規に書かれた。これがGeckoである。パース部分はW3Cによる勧告に合致することを目標に作成されている。
1.8系列以前ではWeb Standards ProjectがCSS 2.1のテストとして用意したAcid2に合格していなかったが、1.9系列からは合格している。

### バージョン履歴
; 0.6
: Netscape 6に搭載される。
; 1.8
: CSSなどのエラー検出機能を実装。canvas要素のサポート。
; 1.8.1
: Firefox / Thunderbird 2.0、SeaMonkey 1.1、Netscape Navigator 9、Camino 1.5および1.6に搭載。
; 1.9
: Firefox 3.0、Camino 2.0に搭載。Sunbird 0.3にアルファ版を搭載。
: Acid2に合格。WSDLおよびSOAPのネイティブサポートを削除。
; 1.9.1
: Firefox 3.5、Thunderbird 3.0、SeaMonkey 2.0に搭載。
: CSS 3の一部プロパティやHTML 5の一部要素をサポート。
; 5.0
: 高速リリースサイクルを採用し、6週間ごとにバージョンアップされるようになった。バージョンの数字はFirefox、Thunderbirdと統一されている。
; 57
: FirefoxのGeckoのコンポーネントがServoのものへと置き換えられ始めた。

## Geckoを使用するソフトウェア
### ウェブブラウザ
* Bagel
* Camino - 旧Chimera。Mac OS X専用のGeckoブラウザ。
* Epiphany (GNOME、2.28.0よりWebKitに移行)
* Galeon (GNOME)
* Lunascape (2以降。IEコンポーネント、WebKitの利用も可能)
* Mozilla Firefox およびそのソースコードを使用したブラウザ (Flock, K-Meleon, Pale Moon,Tor Browser, Floorp など)
* Waterfox
* SeaMonkey  - Mozilla Application Suite の後継ソフトウェア。
* Sylera
* 風博士
* Sleipnir 2 (プラグインによる拡張。2010年8月現在、当該プラグインは開発停止している)

### その他のソフトウェア
ウェブブラウザ以外でも、HTMLやCSSなどを表示に用いるソフトウェアでGeckoが採用されている。
* Mozilla Thunderbird（メールクライアント、旧Minotaur）
* Correo（メールクライアント）
* Mozilla Sunbird（カレンダー）
* Nvu（Web オーサリングツール）
* KompoZer（Web オーサリングツール）
* Songbird（メディアプレーヤー）
* Wine （オープンソースのWindows API実装、Internet Explorerの実装に利用）

## 技術
### XUL
XULはアプリケーションのGUIをXMLで記述した形式である。イベントハンドラを用いてJavaScriptを呼び出すことで、HTMLとJavaScriptを組み合わせたWebアプリケーションと同じ感覚でネイティブのGUIに近いアプリケーションを製作することができる。XULはアプリケーションとしてローカルから読み出されるほか、Web上のファイルであっても表示できる。（ただしファイルの読み書きなどの特権は利用できない。）

### 構成
HTML・CSSのレンダリングや通信部分、ファイルの読み書きなどのAPIはC++で記述されており、それぞれコンポーネント化されている。これらのAPIは他のC++コードから(必要なものだけを)呼び出せるほか、XULアプリケーションなどからJavaScriptなどスクリプト言語を通じて呼び出すことができる(XPCOM)。FirefoxなどではXULアプリケーションから実際に呼び出しているほか、XPCOM 対応でビルドされた JavaScript シェルから利用することもできる。

### 描画
XUL, CSSでスタイルづけされたHTML, MathML, SVGを表示することができる。
HTMLの描画は(複雑な)ペインターアルゴリズムが採用されている。HTMLがCSSの「ボックス」群に変換しレイアウトを決定すると、描画順序を決めたリストを構成し、リストができると実際に描画される。
描画バックエンドにはcairoが使われている。半透明、曲線描画などにその技術が使われている。

### スクリプトエンジン

スクリプト処理部分はSpiderMonkeyと呼ばれる。ECMAScript 3 に準拠する。Firefoxに組み込まれた状態では、特権管理により、WebページのJavaScriptを実行できるだけでなく、ブラウザ本体や拡張機能をJavaScriptで記述することができる。アプリケーション側からもWebページのJavaScriptオブジェクトに（間接的に）アクセス可能である。2007年ごろからWebアプリケーションの普及によりJavaScriptの性能が話題になり始めたが、Gecko 1.9.1 (2008)以降、JIT方式のJavaScriptコンパイラ/インタプリタが搭載され、性能が向上した(TraceMonkey)。Gecko 2.0 (aka 1.93a) / Firefox 4 (2010) では低速だがコンパイルの早いJITコンパイラ(JägerMonkey)とTraceMonkeyを組み合わせて使う方式になった。Gecko 9 / Firefox 9 (2011) では型推論が導入され、リリース製品に組み込まれた。

### ユーザーエージェント情報

このエンジンを使用したユーザーエージェントの多くはユーザーエージェント名で使用環境などを確認できる。

この例では、*Windows*は対象のプラットフォームがMicrosoft Windowsであること、*U*は強いセキュリティレベルであること、*Windows NT 5.1*は使用しているシステムが Windows NT 5.1であること、*ja*は利用している言語の設定が日本語であること、*rv:1.8.1.1*はGeckoのリビジョンが1.8.1.1であること、*Gecko/20061204*はビルドされた日付が2006年12月4日であること、*Firefox/2.0.0.1*は以上のようなGeckoを搭載したFirefox 2.0.0.1であることを表している。

### Mozilla ActiveX Control
Microsoft Windows上で動作する プラグイン。Mozilla ActiveX Projectにより開発されている。ActiveX をGeckoのブラウザ上から管理したり、Geckoのレンダリングエンジン部分をコンポーネントとしてWindowsアプリケーションに組み込む目的で開発された。

ActiveXの管理機能は安全性の確認されたインストール済みのActiveXをブラウザから管理するためのもので、ブラウザからActiveXを実行したりインストールしたりするためのものではない。

ブラウザエンジンとしては、XUL上のアプリケーションではなく、Windowsネイティブのアプリケーションとして組み込むことによってより軽量に使用することを可能にした。mozctl.dll をソフトウェアに接続することでコンポーネントとしての Gecko エンジンが利用できる。Webブラウザに使われる場合が多いが、Webページの表示確認など、補助的な機能として用いられた例もある。

Mozilla ActiveX ControlのHTMLレンダリングエンジンとしての機能はXULネイティブなプログラムと同一であり、設定項目なども共通である。ただし、標準ダイアログボックスなどの表示はXULネイティブのものと異なる。

## Geckoを利用するソフトウェア

## 脚注

## 関連項目

* Mozilla Foundation - 開発元団体
* Mozilla Japan - 日本国内でMozilla製品のサポートを行う団体。
* HTMLレンダリングエンジン
* XULRunner
* Necko
* Servo - Geckoと同様にMozilla Foundationが開発する、実験的なウェブブラウザ用レンダリングエンジン

## 外部リンク
* Gecko - Mozilla Developer Center
* Gecko:Home Page - MozillaWiki
* Mozilla ActiveX Project