# Gecko (software)

Gecko é um motor de layout com código aberto usado em aplicativos desenvolvidos pela Mozilla Foundation e a Mozilla Corporation (principalmente o navegador Firefox), como também em muitos outros projetos de software com código aberto.
Ele é projetado para suportar os padrões da internet, e é usado por diferentes aplicativos para mostrar páginas da web e, em alguns casos, uma aplicação interface de usuário ele próprio (pelo processamento de XUL). O Gecko oferece uma rica e robusta API que o torna adequado para um vasta e variada gama de aplicações baseadas nos princípios da Internet, como exemplo, navegadores web.
Gecko é escrito em C++ e é multiplataforma, roda sobre vários sistemas operacionais, entre eles BSD, Linux, Mac OS X, Solaris, OS/2, AIX, OpenVMS, e Windows. Seu desenvolvimento está agora sendo supervisionado pela Mozilla Foundation e é licenciado por uma tri-licença do Mozilla Public License (MPL), GNU General Public License (GPL) e GNU Lesser General Public License (LGPL).
Gecko é o terceiro motor de layout mais popular da Web, atrás somente do Blink (usado pelo Google Chrome, pelo Microsoft Edge e pelo Opera), e do WebKit (usado pelo Safari).

## Historia

O desenvolvimento do motor de layout agora conhecido como Gecko começou no Netscape em 1997, após a compra da empresa pela DigitalStyle. O motor de renderização da Netscape, originalmente escrito para o Netscape Navigator 1.0 e atualizado através dos anos, foi amplamente considerado inferior numa comparação com o Microsoft Internet Explorer. Ele era lento, não cumpria as normas do padrão W3C, tinha um suporte limitado para o dynamic HTML e faltava o recurso de reflow (quando o motor de layout rearranja elementos sobre a tela, quando novos dados são baixados no lado do cliente). O novo motor de layout foi desenvolvido em paralelo com o antigo, com a intenção de ser implementado dentro do Netscape Communicator quando este ficaste maduro, robusto e estável. Era esperado que mais uma versão do Netscape fosse lançada com o antigo motor de layout depois da troca.
Após o lançamento do projeto Mozilla no início de 1998, o novo código do motor de layout foi distribuído sobre uma licença Open Source. Originalmente apresentado como Raptor, o nome foi modificado para NGLayout (próxima geração de layout) devido a problemas com a marca registrada. Mais tarde a Netscape rebatizou o motor NGLayout para Gecko. Enquanto Mozilla Organization (precursora da futura Mozilla Foundation), inicialmente continuou a usar o nome de NGLayout (Gecko foi uma marca da Netscape), mais tarde, a Mozilla Foundation passou a utilizar a marca Gecko para seu motor de layout.
Em outubro de 1998, a Netscape anunciou que seu próximo web browser usaria o motor Gecko (que ainda era chamado de NGLayout na época), ao invés do motor de layout antigo, exigindo da mesma um grande trabalho de reescrita e adaptações. Embora essa decisão era popular com os padrões web, o navegador não obteve uma popularidade satisfatória entre os desenvolvedores, que estavam descontentes com o prazo de seis meses prometidos para a reescrita. Isso significou que a maioria do trabalho realizado pela Netscape para o Netscape Communicator 5.0 (incluindo o desenvolvimento do Mariner que trazia melhorias ao antigo motor de layout) tiveram de ser abandonados. O Netscape 6, foi a primeira versão a incorporar o motor de layout Gecko, foi lançado em Novembro de 2000 (o nome Netscape 5 nunca fora utilizado).
Com a continuação do motor de layout Gecko, outras aplicações e utilitários passaram a utilizar-se do novo motor. A America Online, nessa altura, acabou adotando para o uso em seu CompuServe 7.0 e AOL para Mac OS X (este produtos já tinham sido incorporados no Internet Explorer). No entanto, com a exceção de alguns, o Gecko nunca chegou a ser utilizado nos principais clientes Microsoft Windows e AOL.
Em 15 de julho de 2003, AOL demitiu os desenvolvedores restantes do Gecko e a Mozilla Foundation (formada no mesmo dia) tornou-se a principal desenvolvedora do Gecko. Hoje, o Gecko é desenvolvido por funcionários da Mozilla Corporation, funcionários de companhias que contribuem para o projeto Mozilla, e também de diversos voluntários.

## Padrões suportados

Desde o início, o Gecko foi desenhado para suportar os padrões abertos da Internet. Alguns dos padrões suportados hoje pelo Gecko são:
* HTML4 (suporte parcial ao HTML5)
* CSS Nível 2.1 (suporte parcial ao CSS3)
* JavaScript 1.8 (ECMAScript 3, e suporte parcial ao ECMAScript 5), implementado no SpiderMonkey
* DOM Nível 1 e 2 (suporte parcial ao DOM 3)
* XML 1.0
* XHTML 1.0
* XSLT e XPath, implementado no TransforMiiX
* MathML
* XForms (Via uma extensão oficial)
* RDF
O Gecko também suporta parcialmente SVG 1.1.
Com a finalidade de suportar web pages projetadas para versões antigas do Netscape e do Internet Explorer, o Gecko suporta o comutador DOCTYPE. Documentos com um moderno DOCTYPE são renderizados nos padrões regulamentados pela W3C. Documentos que não tem DOCTYPE ou um antigo DOCTYPE são renderizados em quirks mode, que emula alguns dos padrões não adotados pelo Netscape Communicator 4.x. Desta forma, alguns dos recursos do 4.x (como os layers) não são suportados.
Gecko também tem suporte limitado para alguns padrões não oficiais embutidos no Internet Explorer, como o marquee element e o document.all que são proprietários (apesar das páginas serem explicitamente testadas para o document.all, este será descontinuado). Enquanto estas implementações de compatibilidade com muitos documentos são desenhadas somente para o Internet Explorer, alguns puristas argumentam que isso é um atraso à adoção de um padrão universal.

## Utilização

Gecko é usado principalmente em web browsers, sendo os primeiros a embutirem/implantarem Netscape 6 e Mozilla Application Suite (depois renomeado para SeaMonkey). Ele também é utilizado em outros web browsers derivados do Mozilla, como exemplo Firefox, Camino, Flock, K-Meleon e uma versão do Internet Explorer que roda sobre o Wine. A versão Linux do software de organização de fotos Picasa do Google é baseada em Gecko. DevHelp, um browser GTK+/GNOME para documentações de API, usa a Gecko para renderizar documentos. Outros produtos não incluidos nesta tabela são Swiftfox, Portable Firefox, Fennec, Conkeror, Classilla, TenFourFox, HP Secure Web Browser, Oxygen, Minimo, My Internet Browser, Sylera (para mobile), Thunderbird (email), Sunbird (calendar) e Instantbird. Gecko é também usado pelo Sugar para o computador OLPC XO-1. Gecko é usado com uma complementação do XUL (XML User Interface Language). Gecko atualmente é responsável por estabelecer o padrão XUL.
A tabela seguinte compara diferentes versões do Gecko:
| Gecko versão | Todas plataformas | Todas plataformas | Todas plataformas | Todas plataformas | Todas plataformas | Todas plataformas | Todas plataformas | Somente Windows | Somente Windows | Somente Windows | Somente Mac | *nix somente | *nix somente | *nix somente | *nix mobile |
| Gecko versão | Firefox | Netscape | Mozilla | SeaMonkey | Flock | Songbird | Beonex | Lunascape | K-Meleon | My Internet Browser | Camino | Galeon | Epiphany | Kazehakase | MicroB |
| 0.6 | | 6.0 | 0.6 | | | | 0.6 | | | | | | | | |
| 0.8 | | | 0.8 | | | | | | 0.3 | | | | | | |
| 0.9.2 | | 6.1 | 0.9.2 | | | | | | | | | | | | |
| 0.9.4 | | 6.2 | 0.9.4 | | | | | | 0.5 | | | | | | |
| 0.9.4.1 | | 6.2.2 | 0.9.4.1 | | | | 0.7 | | | | | | | | |
| 0.9.5 | | | 0.9.5 | | | | | | 0.6 | | | | | | |
| 0.9.7 | | | 0.9.7 | | | | | | | | | 1.0.2 | | | |
| 1.0.1 | | 7.0 | 1.0.1 | | | | 0.8.1 | | | | | | | | |
| 1.0.2 | | | 1.0.2 | | | | 0.8.2 | | | | | | | | |
| 1.1 | | | 1.1 | | | | 0.9pre | | | | | | | | |
| 1.2b | 0.1 | | 1.2b | | | | | | 0.7 | | | | | | |
| 1.3a | 0.5 | | 1.3a | | | | | | | | | | | | |
| 1.4 | | 7.1 | 1.4 | | | | | | | | | | | | |
| 1.4.1 | | | 1.4.1 | | | | | | | | | 1.0.4 | | | |
| 1.5 | 0.7 | | 1.5 | | | | | | 0.8 | | | | | | |
| 1.7 | 1.0 | | 1.7 | | | | | | | | | 2.0 | | 0.2.8 | |
| 1.7.2 | | 7.2 | 1.7.2 | | | | | | | | | | | | |
| 1.7.5 | | 8.0.2 | 1.7.5 | | | | | | 0.9 | | | | | | |
| 1.8.0 | 1.5 | | | 1.0 | 0.7 | 0.2 | | | 1.0 | 1.0 | 1.0 | | | | |
| 1.8.1 | 2.0 | 9.0 | | 1.1 | 1.0 | | | 4.8 | 1.1, 1.5 | 2.0 | 1.6.5 | | 2.16 | | |
| 1.9.0 | 3.0 | | | | 2.0 - 2.6 | 0.5 - 1.4 | | | | 2.2 | 2.0 | | 2.22 | | |
| 1.9.1 | 3.5 | | | 2.0 | | | | 5.0 | 1.6 | 3.0 | | | | | |
| 1.9.2 | 3.6 | | | | | 1.9.3 | | 6.3 | 1.7 | 4.0 | 2.1a1 | | | | 1.7.4.8 |
| 2.0 | 4.0 | | | 2.1 | | | | | | | | | | | |
| 5.0 | 5.0 | | | | | | | | | | | | | | |

## Críticas

Uma das principais razões para uma adoção lenta pelo market share é a complexidade do código do Gecko que tem por finalidade proporcionar muito mais do que um processador ou renderizador de HTML.
O motor Gecko também prove uma versatilidade na renderização de interface de usuários baseado em XML, um framework chamado XUL que foi muito utilizado em seu programa de e-mail, newsgroup e outros programas. Outra razão que explica a complexidade do código do Gecko é o uso do XPCOM, um modelo de componente multiplataforma.