This article is in need of a technical review.
What is Gecko?
Gecko is used in multiple browsers, including Mozilla Firefox, SeaMonkey, Camino, and others. Gecko is continuously under development at mozilla.org. Gecko has been known previously by the code names "Raptor" and "NGLayout"; the new name was chosen following a trademark infringement dispute.
For more information see the Wikipedia article on Gecko.
What is a layout engine?
Basically, a layout engine takes content (such as HTML, XML, image files, applets, and so on) and formatting information (such as Cascading Style Sheets, presentational HTML tags, etc.) and displays the formatted content on the screen. It paints the browser's content area, which is the blank area inside the browser window's chrome.
Gecko is so fast and so powerful that it's being used to create the user interface of some applications ("chrome") as well. In other words, Gecko will not only be displaying the document's content, but it will also be painting the scrollbars, toolbars, and menus on the screen as well. For more information see XUL.
How is a layout engine like Gecko different from a Web browser?
Gecko provides the foundation needed to display content on the screen, including a layout engine and a complementary set of browser components. However, Gecko does not package all of these components alongside other interface modules in a coherent, user-friendly application (including menus, toolbars, etc.), such as Firefox.
mozilla.org assembles the necessary components into its applications, such as Firefox, Thunderbird, SeaMonkey, Camino, which are available for free download from mozilla.org. Netscape released its own version of the browser branded as Netscape Navigator. Other companies release their own software and hardware products that use Gecko. See XULRunner Hall of Fame for a partial list of application that use Gecko via XULRunner.
Third parties such as ISVs and hardware vendors will pick and choose the components they want to use in their applications or hardware devices. Certain browser components are not provided as part of Gecko, such as bookmarks, history, address book, etc. However, the source for all those components is available for free download from mozilla.org.
Why was Gecko built?
The original Mozilla browser, first released as Navigator 1.0, was developed rapidly by a small team that was passionate about creating the next killer app, and they succeeded. Now that the web has evolved, a new generation layout engine was needed upon which future products could be built. Gecko enables a pioneering new class of dynamic content that is more interactive and offers greater presentation control to Web developers, using open and recommended Internet standards instead of proprietary APIs. You are encouraged to join this team by getting involved.
How is mozilla.org using Gecko?
mozilla.org will assemble the Gecko layout engine and other browser components into the Mozilla browser application.
How does Mozilla use Gecko?
Gecko lies at the heart of Mozilla and Firefox browsers, as well as others, powering all of the individual components. Gecko technologies will also power the display of the mozilla.com portal site, speedily delivering more exciting content and services. Gecko's architecture will serve Mozilla well into the future, enabling faster time to market, more innovation, less costly development, easier distribution and updating, and better cross platform support.
How can other companies and organizations use Gecko?
Because Gecko is small, lightweight, and open source, other companies and organizations can easily reuse it. Many hardware vendors are creating devices with network access and wish to include web browsing functionality. Likewise, many software developers want to include Web browsing capability in their applications, but don't want to independently develop browser software. These developers can pick and choose the browser components they want from among those that Gecko offers, and package these components alongside their own within their finished products.
Which open standards is the Gecko development project working to support, and to what extent does it support them?
By the end of calendar year 2000, Gecko is expected to support the following recommended open Internet standards fully except for the areas noted below and open bugs documented in Bugzilla:
- HTML 4.0 - full support except for:
- elements: BDO, BASEFONT
- attributes: shape attribute on the A element, abbr, axis, headers, scope-row, scope-col, scope-rowgroup, scope-colgroup, charoff, datasrc, datafld, dataformat, datapagesize, summary, event, dir, align on table columns, label attribute of OPTION, alternate text of AREA elements, longdesc
- various metadata attributes: cite, datetime, lang, hreflang
- bidirectional text layout, which is only used in Hebrew and Arabic (IBM has begun work to add bidi support in a future release)
- Style Sheets
- CSS 1 - full support, except for:
- the application of styles to HTML column elements
- the ability to turn off author styles
- the names of certain Mozilla extension pseudo-classes lack the moz- prefix
- CSS 2 - partial support is expected and has already been built into Gecko, including support for CSS2 positioning, but no commitment has been made to achieve a specific level of support
- CSS 1 - full support, except for:
- Level 0
- Level 1 Core: full support
- making EntityReferences available through DOM1; per a provision of the DOM1 spec for XML implementations, Entities will be automatically expanded inline and therefore not available through DOM1; our implementation extrapolates this provision to apply to EntityReferences as well
- For more information, see the DOM in Mozilla
- Level 1 HTML
- DOM 2 - Most of it has already been implemented in Gecko, including support for DOM 2 events, the DOM 2 Style, and the DOM2 Core. DOM 3 support is also planned for a future release.
- XML 1.0: full support, except for processing to manipulate default attributes
- RDF: full support, except for aboutEach, aboutEachPrefix, and parseType
- Transfer protocols: HTTP 1.1 (including gzip compression), FTP
- OJI (Open Java Interface)
- Image formats
- JPEG, PJPEG
Does "full support" mean that Gecko has zero bugs today or will have zero bugs at some point in the future?
Of course not. As Robert O'Callahan notes in bug 25707, "Full HTML4/CSS1 compliance can't mean '100% bug free'. If it does, no-one will ever ship a fully compliant browser."
Because web pages can be arbitrarily long and complex and have arbitrarily deeply nested markup, it will always be possible to construct web pages that do not display in a given browser the way the specifications would recommend. So long as QA testing and test case development continues, there will always be known bugs at any given point in time in the open-source Gecko codebase, and it follows that every commercial product that has ever shipped and ever will ship based on Gecko will have known bugs at the time of its release. (The same principle of course applies to other browser engine development projects and products based upon them as well.)
Known bugs in the open-source Gecko codebase are documented in Bugzilla. Here are some links to lists of reported bugs related to the standards mentioned above; be aware that these raw lists of open in-process bugs will inevitably include some duplicate, out of date, unreproducible, invalid, and incorrectly tagged reports:
- Layout component tracks content layout bugs that may be related to a variety of specifications
- HTML 4.0
- Elements, Form Controls, Frames, Tables, and Form Submission
- bug reports marked with the html4 keyword
- "meta bug" for tracking outstanding issues with HTML 4.01 compliance
- CSS: Style System component (see also bug reports marked with the css1, css2, and css3 keywords)
- DOM: see DOM0, DOM1, DOM2 and Event Handling components
- HTTP 1.1 compliance bugs should generally be found on the Networking, Networking - General, and Networking: Cache components
- Imagelib image library (see also JPEG Image Handling and PNG Image Handling)
- SSL-related bugs are filed on the Crypto component
For information about the known bugs of a specific commercial product based on Gecko, see that product's release notes.
How does Gecko format XML documents?
Gecko supports the use of CSS and XSLT to format XML documents.
For XML documents without associated CSS or XSLT, Gecko displays the pretty-printed source of the document.
How does Gecko help content developers?
Content developers are sick and tired of developing and testing every single web page multiple times in order to support the different, incompatible, proprietary DOMs of browsers from different vendors. They have been demanding that all vendors fully support the open standards listed above so that they can
- have a rich, powerful formatting system and object model at their disposal, and
- "write once, view anywhere."
Gecko's robust support for these standards makes Gecko the platform of choice for web content and web application developers worldwide.
Are Gecko's APIs based on ActiveX? COM? JavaBeans?
Gecko is reusable on all platforms thanks to XPCOM, a subset of COM that works across platforms. COM, developed by Digital and later adopted by Microsoft, is the de facto standard for modular interfaces on Windows platforms.
Additionally, on the Windows platform, Gecko's XPCOM interfaces are wrapped in an ActiveX control that VB developers can utilize (ActiveX wrappers are not available on other platforms because ActiveX is a Windows-only technology).
A JavaBean wrapper is not currently under development, but there is nothing in Gecko's architecture that precludes such development in the future. Source code and documentation for these interfaces are available through mozilla.org.
For future embedding API plans, see wikimo:Mozilla 2:Embedding APIs.
Are Gecko's APIs compatible with Microsoft's Trident APIs?
Gecko's XPCOM interfaces are different than Microsoft's. The most important differences between the two models involve reflection of the Document Object Model (DOM) in the interfaces.
Microsoft's Trident interfaces reflect the DOM in a proprietary API, whereas Gecko exposes the DOM according to the W3C's recommended standard. Other incompatibilities exist. Adam Lock created a partial compatibility layer that may enable developers to more easily migrate from Microsoft's engine to the Gecko engine.
Which platforms does Gecko run on?
Gecko runs today on Win32 (Windows XP Service Pack 2, Windows Vista, Windows 7, Windows 8, Windows 8.1), Mac OS X 10.5 and later, and Linux. OEMs and contributors from the Net participating in mozilla.org are porting Gecko to other platforms. Such porting efforts are underway for Solaris, HP/UX, AIX, Irix, OS/2, OpenVMS, BeOS, and Amiga, among others.
Older versions of Gecko supported earlier versions of Win32 and Mac OS X.
What are the components of Gecko?
Gecko includes the following components:
- Document parser (handles HTML and XML)
- Layout engine with content model
- Style system (handles CSS, etc.)
- Image library
- Networking library (Necko)
- Platform-specific graphics rendering and widget sets for Win32, X, and Mac
- User preferences library
- Mozilla Plug-in API (NPAPI) to support the Navigator plug-in interface
- Open Java Interface (OJI), with Sun Java 1.2 JVM
- RDF back end
- Font library
- Security library (NSS)
Original Document Information
- Author(s): Angus
- Other Contributors: Ekrock, Vidur, Hidday, Drunclear
- Copyright Information: Portions of this content are © 1998–2006 by individual mozilla.org contributors; content available under a Creative Commons license