Введение

Механизм веб-браузера

WebKit начал свою историю как форк библиотек KHTML и KJS из KDE, и с тех пор продолжал развиваться благодаря вкладу разработчиков KDE, Apple, Google и Nokia. WebKit поддерживает macOS, Windows, Linux и различные другие Unix-подобные операционные системы. 3 апреля 2013 года Google объявила о создании форка WebCore, компонента WebKit, для использования в будущих версиях Google Chrome и веб-браузера Opera под названием Blink. WebKit является программным обеспечением с открытым исходным кодом и распространяется по лицензии BSD 2-Clause, за исключением компонентов WebCore и JavaScriptCore, которые доступны по лицензии GNU Lesser General Public License. По состоянию на 7 марта 2013 года WebKit является зарегистрированным товарным знаком Apple, зарегистрированным в Патентном и товарном ведомстве США.

Происхождение

Код, который впоследствии стал WebKit, начал свою историю в 1998 году как движок разметки KDE HTML (KHTML) и движок JavaScript KDE (KJS). Проект WebKit был начат в Apple Лизой Мелтон 25 июня 2001 года как ответвление от KHTML и KJS. Мелтон объяснила в электронном письме разработчикам KDE, что, по мнению Apple, некоторые изменения, потребовавшие иного подхода к разработке, были связаны со специфическими для macOS функциями, отсутствующими в KHTML от KDE, такими как Objective-C, KWQ (произносится "quack") – реализация подмножества Qt, необходимого для работы KHTML на macOS, написанная на Objective-C++, и вызовы macOS API.

Развитие сплита

Обмен кодом между WebCore и KHTML становился все более сложным по мере расхождения кодовых баз, поскольку оба проекта придерживались различных подходов к кодированию и обмену кодом. В какой-то момент разработчики KHTML заявили, что вряд ли примут изменения от Apple и назвали отношения между двумя группами «полным провалом». Они утверждали, что Apple предоставляла свои изменения большими патчами, содержащими множество изменений с недостаточной документацией, часто касающихся будущих дополнений к кодовой базе. Поэтому разработчикам KDE было сложно интегрировать эти патчи обратно в KHTML. Кроме того, Apple требовала от разработчиков подписывать соглашения о неразглашении перед ознакомлением с исходным кодом Apple, и даже после этого они не имели доступа к базе данных ошибок Apple. В период публичного «развода» разработчик KDE Курт Пфайфл (pipitas) опубликовал статью, в которой утверждал, что разработчикам KHTML удалось портировать многие (но не все) улучшения Safari из WebCore в KHTML, и они всегда ценили улучшения, поступающие от Apple, и продолжают это делать. В статье также отмечалось, что Apple начала связываться с разработчиками KHTML для обсуждения путей улучшения взаимоотношений и возможностей будущего сотрудничества. Фактически, проекту KDE удалось включить некоторые из этих изменений для повышения скорости рендеринга KHTML и добавления новых функций, включая соответствие тесту рендеринга Acid2. После появления новостей о форке, Apple опубликовала исходный код форка WebKit в общедоступном репозитории системы контроля версий. Команда WebKit также отменила многие изменения, специфичные для Apple, в оригинальной кодовой базе WebKit и реализовала платформенно-зависимые уровни абстракции, чтобы значительно упростить перенос основного кода рендеринга на другие платформы. В июле 2007 года Ars Technica сообщила, что команда KDE перейдет с KHTML на WebKit. Однако, после нескольких лет интеграции, в августе 2010 года была выпущена KDE Development Platform версии 4.5.0 с поддержкой как WebKit, так и KHTML, и разработка KHTML продолжается.

Открытый ресурс

7 июня 2005 года разработчик Safari Дэйв Хайат объявил в своем веб-логе, что Apple открывает исходный код WebKit (ранее открытыми были только WebCore и JavaScriptCore) и предоставляет доступ к системе контроля версий WebKit и системе отслеживания ошибок. Компоненты JavaScriptCore и WebCore WebKit распространяются под лицензией GNU Lesser General Public License, а остальная часть WebKit – под лицензией BSD 2-Clause. В 2009 году такие расширения были представлены в качестве рабочих проектов в World Wide Web Consortium (W3C) для стандартизации. В ноябре 2007 года проект объявил о добавлении поддержки медиа-функций спецификации HTML5, что позволило встраиваемому видео отображаться и управляться скриптами непосредственно в WebKit. 2 июня 2008 года проект WebKit объявил о переписывании JavaScriptCore в виде "SquirrelFish" – интерпретатора байт-кода. Проект развился в SquirrelFish Extreme (сокращенно SFX), представленный 18 сентября 2008 года, который компилирует JavaScript в машинный код, устраняя необходимость в интерпретаторе байт-кода и, таким образом, ускоряя выполнение JavaScript. Первоначально SFX поддерживал только процессорную архитектуру x86, но в конце января 2009 года поддержка SFX была включена для macOS на x86 64, поскольку все тесты успешно проходились на этой платформе.

WebKit2 (включает в себя

8 апреля 2010 года был анонсирован проект WebKit2, предназначенный для переработки WebKit. Его целью было чёткое отделение компонентов, отвечающих за отрисовку веб-страниц, от окружающего интерфейса или оболочки приложения, чтобы "веб-контент (JavaScript, HTML, разметка и т. д.) существовал в отдельном процессе от пользовательского интерфейса приложения". Такая абстракция должна была упростить повторное использование компонентов WebKit2 по сравнению с WebKit. WebKit2 содержал "несовместимые изменения API по сравнению с оригинальным WebKit", что и послужило причиной смены названия. WebKit2 был нацелен на платформы Linux, macOS, Windows, GTK и MeeGo Harmattan. Safari для macOS перешла на новый API в версии 5.1, а Safari для iOS – с выходом iOS 8. Оригинальный API WebKit был переименован в WebKitLegacy API, а API WebKit2 – просто в WebKit API.

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

WebKit используется в качестве движка рендеринга в Safari и ранее использовался веб-браузером Google Chrome в Windows, macOS и Android (до версии 4.4 KitKat). Chrome использовал только WebCore, а также включал собственный движок JavaScript под названием V8 и многопроцессную систему. WebKit также используется в других приложениях на macOS и iOS, таких как почтовый клиент Apple Mail, App Store и версия 2008 года персонального информационного менеджера Entourage от Microsoft, которые оба используют WebKit для отображения HTML-контента.

Установленная основа

Новые веб-браузеры были созданы на основе WebKit, такие как браузер S60 на мобильных телефонах Symbian, браузер BlackBerry (версия 6.0+), Midori, браузер Chrome, веб-браузер Android до версии 4.4 KitKat и браузер, используемый в системном программном обеспечении PlayStation 3 с версии 4.10. Веб-браузер Rekonq от KDE и Plasma Workspaces также используют его как встроенный движок веб-рендеринга. WebKit был принят в качестве движка рендеринга в OmniWeb, iCab и Web (ранее известный как Epiphany) и Sleipnir, заменив их собственные движки рендеринга. Веб GNOME некоторое время поддерживал как Gecko, так и WebKit, но команда решила, что цикл выпуска Gecko и планы его дальнейшего развития сделают поддержку слишком сложной. webOS использует WebKit в качестве основы для среды выполнения приложений. WebKit используется для рендеринга HTML и выполнения JavaScript в платформе приложений Adobe Integrated Runtime. В Adobe Creative Suite CS5 WebKit используется для рендеринга некоторых элементов пользовательского интерфейса. По оценкам аналитика, по состоянию на первое полугодие 2010 года было отгружено 350 миллионов мобильных устройств с браузерами на основе WebKit. К середине апреля 2015 года доля рынка браузеров WebKit составляла 50,3%.

Порты

Через неделю после того, как Hyatt объявил об открытии исходного кода WebKit, Nokia сообщила о портировании WebKit на операционную систему Symbian и разработке браузера на основе WebKit для мобильных телефонов с S60. Этот браузер, названный Web Browser for S60, использовался на мобильных телефонах Nokia, Samsung, LG и других устройствах Symbian S60. Apple также портировала WebKit на iOS для работы на iPhone, iPod Touch и iPad, где он применяется для отображения контента в веб-браузере и почтовом клиенте. Мобильная платформа Android использовала WebKit (а в более поздних версиях – его форк Blink) в качестве основы для своего веб-браузера, а Palm Pre, представленный в январе 2009 года, имел интерфейс, основанный на WebKit. Amazon Kindle 3 включал в себя экспериментальный браузер на основе WebKit. В июне 2007 года Apple объявила о портировании WebKit на Microsoft Windows в составе Safari. Хотя Safari для Windows был незаметно прекращен, порты WebKit для операционной системы Microsoft по-прежнему активно поддерживаются. Windows-порт использует проприетарные библиотеки Apple для функционирования и применяется в iCloud и iTunes для Windows, в то время как порт "WinCairo" является полностью открытым и распространяемым. WebKit также был портирован на несколько наборов инструментов, поддерживающих различные платформы, такие как GTK для Linux, под названием WebKitGTK, который используется в Eolie, GNOME Web, Adobe Integrated Runtime, Enlightenment Foundation Libraries (EFL) и Clutter. Qt Software включила порт WebKit в выпуск Qt 4.4 в виде модуля QtWebKit (впоследствии замененного Qt WebEngine, использующим Blink). Браузер Iris на Qt также использовал WebKit. Порт Enlightenment Foundation Libraries (EFL) – EWebKit – был разработан (компаниями Samsung и ProFusion) с упором на встраиваемые и мобильные системы для использования в качестве автономного браузера, виджетов, средств просмотра и редакторов текста. Порт Clutter разработан компанией Collabora при спонсорской поддержке Robert Bosch GmbH. Существовал также проект, синхронизированный с WebKit (при поддержке Pleyo), под названием Origyn Web Browser, который предоставлял метапорт для абстрактной платформы с целью упрощения и ускорения портирования на встраиваемые или легковесные системы. Этот порт используется во встраиваемых устройствах, таких как приставки, портативные медиаплееры, и был портирован в AmigaOS, AROS и MorphOS. MorphOS версии 1.7 стала первой версией Origyn Web Browser (OWB), поддерживающей HTML5-теги мультимедиа.

Веб-платформа для встроенных

Web Platform for Embedded (WPE) — это порт WebKit, разработанный для встраиваемых приложений. Он дополнительно улучшает архитектуру, разделяя основные блоки рендеринга на библиотеку универсальных подпрограмм (libwpe), платформенные бэкенды и сам движок (под названием WPE WebKit). Порт GTK, несмотря на свою автономность, может быть собран с использованием этих базовых библиотек вместо собственной реализации поддержки платформы. В настоящее время поддержку WPE обеспечивает компания Igalia.

Поделка Google

3 апреля 2013 года Google объявил о создании форка компонента WebCore движка WebKit, который получил название Blink. Разработчики Chrome приняли решение о создании форка, чтобы получить больше свободы в реализации функций WebCore в браузере, не вызывая конфликтов с основной веткой разработки, а также для упрощения кодовой базы за счет удаления кода компонентов WebCore, не используемых Chrome. В связи с более ранним объявлением Opera Software о переходе на WebKit посредством кодовой базы Chromium, было подтверждено, что веб-браузер Opera также перейдет на Blink. После этого разработчики WebKit начали обсуждение удаления специфичного для Chrome кода из движка для оптимизации его кодовой базы. В настоящее время WebKit не содержит кода, специфичного для Chrome (например, системы сборки, хуков для JavaScript-движка V8, платформенного кода и т.п.).

WebCore (ядерное ядро)

WebCore — это библиотека для компоновки, отрисовки и модели объектов документа (DOM) для HTML и масштабируемой векторной графики (SVG), разработанная проектом WebKit. Полный исходный код распространяется под лицензией GNU Lesser General Public License (LGPL). Фреймворк WebKit оборачивает WebCore и JavaScriptCore, предоставляя приложению интерфейс программирования приложений Objective C для движка отрисовки WebCore и движка скриптов JavaScriptCore, реализованных на C++, что позволяет легко использовать их в приложениях, основанных на API Cocoa. Более поздние версии также включают кроссплатформенную абстракцию платформы C++, а различные порты предоставляют дополнительные API. WebKit успешно проходит тесты Acid2 и Acid3, обеспечивая точную отрисовку каждого пикселя и отсутствие проблем с производительностью или плавностью на эталонном оборудовании.

Язык JavaScript

JavaScriptCore — это фреймворк, предоставляющий JavaScript-движок для реализаций WebKit и обеспечивающий использование этого типа скриптов в других контекстах macOS. JavaScriptCore изначально был создан на основе библиотеки JavaScript-движка KJS от KDE (являющейся частью проекта KDE) и библиотеки регулярных выражений PCRE. После отделения от KJS и PCRE, JavaScriptCore был значительно улучшен, получил множество новых функций и повышение производительности. 2 июня 2008 года проект WebKit объявил о переписывании JavaScriptCore в "SquirrelFish" — интерпретатор байт-кода. Он использует LLVM для генерации оптимизированного машинного кода. "FTL" расшифровывается как "Fourth Tier LLVM", а неофициально — "быстрее скорости света", что отражает его высокую скорость работы. С 15 февраля 2016 года бэкэнд FTL JIT был заменен на "Bare Bones Backend" (или, сокращенно, B3).