Введение

Gecko (стилизованный как ɢecko) — это движок разметки HTML, разработанный Mozilla. Он используется в браузере Firefox, почтовом клиенте Thunderbird и многих других проектах. Gecko разработан для поддержки открытых интернет-стандартов и используется различными приложениями для отображения веб-страниц и, в некоторых случаях, самого пользовательского интерфейса приложения (путем рендеринга XUL). Gecko предлагает богатый API программирования, что делает его подходящим для широкого спектра задач в интернет-приложениях, таких как веб-браузеры, представление контента и клиент-серверные приложения. Gecko написан на C++ и JavaScript, а с 2016 года — также на Rust. Это свободное программное обеспечение с открытым исходным кодом, распространяемое по лицензии Mozilla Public License версии 2. Mozilla официально поддерживает его использование на Android.

История

Разработка движка макета, теперь известного как Gecko, началась в Netscape в 1997 году после приобретения компанией DigitalStyle. Существующий движок рендеринга Netscape, изначально написанный для Netscape Navigator 1.0 и обновлявшийся на протяжении многих лет, был медленным, плохо соответствовал стандартам W3C, имел ограниченную поддержку динамического HTML и не обладал такими функциями, как инкрементальный пересчет макета (когда движок макета перестраивает элементы на экране по мере загрузки новых данных и добавления их на страницу). Новый движок макета разрабатывался параллельно со старым, с намерением интегрировать его в Netscape Communicator, когда он станет зрелым и стабильным. Ожидалось, что как минимум еще одна крупная версия Netscape будет выпущена со старым движком макета перед переходом. После запуска проекта Mozilla в начале 1998 года код нового движка макета был выпущен под лицензией с открытым исходным кодом. Первоначально представленный как Raptor, название пришлось изменить на NGLayout (макет следующего поколения) из-за проблем с товарными знаками. Позже Netscape переименовала NGLayout в Gecko. Хотя Mozilla Organization (предшественник Mozilla Foundation) изначально продолжала использовать название NGLayout (Gecko был товарным знаком Netscape), в конечном итоге бренд Gecko стал доминирующим. В октябре 1998 года Netscape объявила, что ее следующий браузер будет использовать Gecko (который в то время все еще назывался NGLayout) вместо старого движка макета, что потребовало переписывания значительной части приложения. Это решение было популярно среди сторонников веб-стандартов, но вызвало недовольство разработчиков Netscape, которым было предоставлено всего шесть месяцев на переписывание. Firefox 57, также известный как "Firefox Quantum", впервые выпущенный в ноябре 2017 года, является первой версией, в которой задействованы основные компоненты из проектов Quantum/Servo. К ним относится повышенная производительность компонентов рендеринга CSS и GPU. В будущих версиях дополнительные компоненты будут постепенно перенесены из Servo в Gecko. Эта версия впервые представила GeckoView, с повышенной производительностью при средней скорости загрузки страниц. Firefox Reality также был создан на базе GeckoView. Firefox для Android 79, также известный как "Firefox Daylight", впервые выпущенный в августе 2020 года, является первым стабильным релизом, в котором основные компоненты работают на движке GeckoView.

Нестандартная поддержка IE

Для поддержки веб-страниц, разработанных для устаревших версий Netscape и Internet Explorer, Gecko поддерживает переключение DOCTYPE. Документы с современным DOCTYPE отображаются в режиме соответствия стандартам, строго следуя стандартам W3C. Документы, не имеющие DOCTYPE или использующие устаревший DOCTYPE, отображаются в режиме совместимости, эмулирующем некоторые нестандартные особенности Netscape Communicator 4.x; однако некоторые функции версии 4.x (например, слои) не поддерживаются. Gecko также обеспечивает ограниченную поддержку некоторых нестандартных функций Internet Explorer, таких как элемент marquee и свойство document.all (хотя страницы, явно проверяющие наличие document.all, будут получать сообщение о том, что оно не поддерживается).

Использование

Gecko в основном используется в веб-браузерах, самыми ранними из которых были Netscape 6 и Mozilla Suite (впоследствии переименованный в SeaMonkey). Он также применяется в других браузерах на основе Mozilla, таких как Firefox и Firefox для мобильных устройств, а также в реализации клона Internet Explorer, входящей в состав Wine. Mozilla также использует его в своем почтовом клиенте Thunderbird. Среди других веб-браузеров, использующих Gecko, можно выделить GNU IceCat, Waterfox, K Meleon, Lunascape, Portable Firefox, Conkeror, Classilla и TenFourFox. Gecko также используется Sugar для компьютера OLPC XO 1. Gecko представляет собой полную реализацию XUL (XML User Interface Language) и в настоящее время определяет спецификацию XUL.

Прошлые пользователи

Продукты, которые ранее использовали Gecko, включают Pale Moon (теперь использующий Goanna), Epiphany (теперь известный как GNOME Web и использующий WebKitGTK) и GNOME DevHelp (теперь использующий WebKitGTK). Прекратившие своё существование продукты, которые использовали Gecko, включают Swiftfox, Flock, Galeon, Camino, Minimo, Beonex Communicator, Kazehakase, Songbird, Sunbird (календарь), MicroB, Nightingale, Instantbird и Picasa для Linux.

Собственная зависимость

На Windows и других платформах Gecko зависит от проприетарных компиляторов. Поэтому, FOSS-дистрибутивы Linux не могут включать пакет Gecko, используемый в слое совместимости с Windows Wine. После Gecko 2.0 номер версии был повышен до 5.0, чтобы соответствовать Firefox 5, и с тех пор поддерживается в синхронизации с основной версией Firefox и Thunderbird, что отражает тот факт, что он больше не является отдельной частью.

Надувная

В эпоху Netscape сочетание неудачных технических и управленческих решений привело к разрастанию программного обеспечения Gecko. Поэтому в 2001 году Apple предпочла форкнуть KHTML, а не использовать Gecko, для создания движка WebKit для своего браузера Safari.

Квантовый

Quantum — проект Mozilla, объединяющий несколько направлений разработки программного обеспечения для создания нового поколения веб-движка для пользователей Firefox. Он включает в себя множество улучшений Gecko, во многом перенесенных из экспериментального проекта Servo. Quantum также содержит доработки пользовательского интерфейса и взаимодействия с ним.

Предыстория

В 2012 году Mozilla начала экспериментальный проект Servo – движок, разработанный с нуля для повышения конкурентности и параллелизма, а также снижения уязвимостей, связанных с безопасностью памяти. Servo написан на языке программирования Rust, также разработанном Mozilla, который призван генерировать компилируемый код с улучшенной безопасностью памяти, конкурентностью и параллелизмом по сравнению с компилируемым кодом на C++. Именно поэтому было принято решение начать проект Quantum, чтобы интегрировать стабильные компоненты Servo в Firefox. В августе 2020 года Mozilla распустила всю команду разработчиков Servo.

Компоненты

Проект "Квант" состоит из нескольких подпроектов. Эта версия была выпущена в Firefox 57. Mozilla начала внедрение нового рендерера для определенных комбинаций оборудования и операционных систем в Firefox 67. Композитор: существующий композитор Gecko был перенесен в отдельный процесс, что изолирует вкладки браузера от сбоев, связанных с графическими драйверами. Поскольку сбои композитора не приводят к аварийному завершению процесса контента браузера, процесс композитора может быть прозрачно перезапущен без потери данных пользователя. Эта версия была выпущена в Firefox 53. DOM: Вдохновленный архитектурой Constellation из Servo и движком Presto от Opera, Quantum DOM использует кооперативно планируемые потоки внутри DOM для повышения отзывчивости без увеличения количества процессов и, следовательно, потребления памяти. Основная часть этой разработки была включена в Firefox 57. Flow: Комплекс мер по улучшению производительности, заметных пользователю, разрабатываемых командой, работающей над различными компонентами Gecko. Ориентирован на реальное повышение производительности в популярных веб-приложениях, таких как G Suite (теперь Google Workspace) и Facebook. Эта работа была завершена и выпущена в Firefox 57. Photon: Обновление пользовательского интерфейса всего приложения с акцентом на повышение производительности интерфейса. Рассматривается как сопутствующий проект Quantum Flow. Эта версия была выпущена в Firefox 57. Эта функция была выпущена в Firefox 59.

Синяя

Проект Mozilla Azure — это API для абстракции графики низкого уровня без сохранения состояния, используемый в Firefox. Проект преследует несколько целей, включая более точную совместимость с Direct2D, оптимизацию взаимодействия с состоянием и улучшенный контроль над характеристиками производительности и ошибками. Azure обеспечит 2D-аппаратное ускорение поверх 3D-графических бэкендов. Firefox начал использовать Azure вместо Cairo в 2012 году. Он написан на C++ и используется Servo. Название Azure — это дань уважения раннему основателю Netscape Джеймсу Х. Кларку и его ранним работам в Silicon Graphics, где рабочие станции часто называли в честь цветов.