Введение
Механизм веб-браузера
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.
According to Apple, some changes which called for different development tactics involved macOS specific features that are absent in KDE's KHTML, such as Objective C, KWQ (pronounced "quack") an implementation of the subset of Qt required to make KHTML work on macOS written in Objective C++, and macOS calls.
Развитие сплита
Обмен кодом между 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).