WebKit — это браузерный движок, который в основном используется в веб-браузере Safari от Apple , а также во всех веб-браузерах на iOS и iPadOS . WebKit также используется консолями PlayStation , начиная с PS3, мобильными операционными системами Tizen , электронными книгами Amazon Kindle , консолями Nintendo, начиная с 3DS Internet Browser , и снятым с производства BlackBerry Browser .
WebKit начинался как ответвление библиотек KHTML и KJS из KDE , [1] [9] и с тех пор был дополнительно разработан участниками KDE , Apple , Google , Nokia , [9] Bitstream , BlackBerry , Sony , Igalia и другими. [10] WebKit поддерживает macOS , Windows , Linux и различные другие Unix-подобные операционные системы . [11] 3 апреля 2013 года Google объявила, что она ответвила WebCore, компонент WebKit, для использования в будущих версиях Google Chrome и веб-браузера Opera , под названием Blink . [12] [13]
Его движок JavaScript , JavascriptCore, также поддерживает серверную среду выполнения JS Bun [14] в отличие от V8 , используемого Node.js и Blink . Интерфейс прикладного программирования (API) C++ WebKit предоставляет набор классов для отображения веб- контента в окнах и реализует такие функции браузера, как переход по ссылкам при нажатии пользователем, управление списком переходов вперед и назад и управление историей недавно посещенных страниц.
WebKit имеет открытый исходный код и доступен по лицензии BSD 2-Clause [15] [8] за исключением компонентов WebCore и JavaScriptCore, которые доступны по лицензии GNU Lesser General Public License . По состоянию на 7 марта 2013 года WebKit является товарным знаком Apple, зарегистрированным в Патентном и товарном бюро США. [16]
Код, который должен был стать WebKit, появился в 1998 году как движок макета KDE HTML ( KHTML ) и движок KDE JavaScript ( KJS ). Проект WebKit был начат в Apple Лизой Мелтон 25 июня 2001 года [17] [18] как ответвление KHTML и KJS . Мелтон объяснила в электронном письме разработчикам KDE [1] , что KHTML и KJS позволяют легче разрабатывать, чем другие доступные технологии , в силу того, что они небольшие (менее 140 000 строк кода ), чисто спроектированы и соответствуют стандартам. KHTML и KJS были перенесены на macOS с помощью библиотеки адаптеров и переименованы в WebCore и JavaScriptCore. [1] JavaScriptCore был анонсирован в электронном письме в список рассылки KDE в июне 2002 года, вместе с первым выпуском изменений Apple. [19]
По данным Apple, некоторые изменения, потребовавшие иной тактики разработки, включали специфические для macOS функции, отсутствующие в KHTML KDE, такие как Objective-C , KWQ (произносится как «кряк») — реализация подмножества Qt, необходимого для работы KHTML на macOS, написанная на Objective C++, и вызовы macOS. [20]
Обмен кодом между WebCore и KHTML становился все более сложным, поскольку кодовая база расходилась, поскольку оба проекта имели разные подходы к кодированию и совместному использованию кода. [21] В какой-то момент разработчики KHTML заявили, что они вряд ли примут изменения Apple, и заявили, что отношения между двумя группами были «горьким провалом». [22] Они утверждали, что Apple представила свои изменения в больших патчах, содержащих множественные изменения с неадекватной документацией, часто в отношении будущих дополнений к кодовой базе. Таким образом, разработчикам KDE было сложно интегрировать эти патчи обратно в KHTML. [23] Кроме того, Apple потребовала, чтобы разработчики подписывали соглашения о неразглашении, прежде чем просматривать исходный код Apple, и даже тогда они не могли получить доступ к базе данных ошибок Apple. [24]
В период разрекламированного «развода» разработчик KDE Курт Пфайфл ( pipitas ) опубликовал статью, в которой утверждалось, что разработчикам KHTML удалось перенести многие (но не все) улучшения Safari из WebCore в KHTML, и они всегда ценили улучшения, исходящие от Apple, и продолжают ценить их. В статье также отмечалось, что Apple начала связываться с разработчиками KHTML для обсуждения того, как улучшить взаимоотношения и пути будущего сотрудничества. [25] Фактически, проект KDE смог включить некоторые из этих изменений, чтобы улучшить скорость рендеринга KHTML и добавить функции, включая соответствие тесту рендеринга Acid2 . [26]
После появления истории о форке в новостях Apple опубликовала исходный код форка WebKit в публичном репозитории с контролем версий . [27]
Команда WebKit также отменила многие специфичные для Apple изменения в исходной кодовой базе WebKit и внедрила специфичные для платформы слои абстракции, чтобы значительно упростить передачу основного кода рендеринга на другие платформы. [28]
В июле 2007 года Ars Technica сообщила, что команда KDE перейдет с KHTML на WebKit. [29] Вместо этого, после нескольких лет интеграции, в августе 2010 года была выпущена версия KDE Development Platform 4.5.0 с поддержкой как WebKit, так и KHTML, а разработка KHTML продолжалась до 2016 года, прежде чем была официально прекращена в 2023 году. [30] [31]
7 июня 2005 года разработчик Safari Дэйв Хайатт объявил в своем веблоге , что Apple открывает исходный код WebKit (ранее открытым исходным кодом были только WebCore и JavaScriptCore) и открывает доступ к дереву управления версиями WebKit и системе отслеживания ошибок. [27]
В середине декабря 2005 года поддержка масштабируемой векторной графики (SVG) была включена в стандартную сборку. [32]
Компоненты JavaScriptCore и WebCore WebKit доступны по лицензии GNU Lesser General Public License, в то время как остальная часть WebKit доступна по лицензии BSD 2-Clause. [8]
Начиная с начала 2007 года, команда разработчиков начала внедрять расширения каскадных таблиц стилей (CSS), включая анимацию , переходы и 2D- и 3D-преобразования; [33] такие расширения были выпущены в качестве рабочих проектов в Консорциум Всемирной паутины (W3C) в 2009 году для стандартизации. [34]
В ноябре 2007 года проект объявил о добавлении поддержки медиа-функций проекта спецификации HTML5 , что позволяет встроенному видео изначально отображаться и управляться скриптами в WebKit. [35]
2 июня 2008 года проект WebKit объявил, что они переписали JavaScriptCore как «SquirrelFish», интерпретатор байт-кода . [36] [37] Проект превратился в SquirrelFish Extreme (сокращенно SFX), анонсированный 18 сентября 2008 года, который компилирует JavaScript в машинный код , устраняя необходимость в интерпретаторе байт-кода и, таким образом, ускоряя выполнение JavaScript. [38] Первоначально единственной поддерживаемой архитектурой процессора для SFX была x86 , но в конце января 2009 года SFX был включен для macOS на x86-64, поскольку он прошел все тесты на этой платформе. [39]
8 апреля 2010 года был анонсирован проект под названием WebKit2 по перепроектированию WebKit. Его целью было абстрагировать компоненты, которые обеспечивают веб-рендеринг, от окружающего их интерфейса или оболочки приложения, создавая ситуацию, в которой «веб-контент (JavaScript, HTML, макет и т. д.) живет в отдельном процессе от пользовательского интерфейса приложения». Эта абстракция была призвана сделать повторное использование более простым процессом для WebKit2, чем для WebKit. WebKit2 имел «несовместимое изменение API с исходным WebKit», что и послужило причиной смены его названия. [40]
Цели WebKit2 были установлены на Linux, macOS, Windows, GTK и MeeGo -Harmattan. [41] [42] Safari для macOS перешел на новый API с версии 5.1. [43] Safari для iOS перешел на WebKit2 с iOS 8. [44]
Первоначальный API WebKit был переименован в API WebKitLegacy. [45] API WebKit2 был переименован в API WebKit. [46]
WebKit используется в качестве движка рендеринга в Safari и ранее использовался веб-браузером Chrome от Google на Windows, macOS и Android (до версии 4.4 KitKat). Chrome использовал только WebCore и включал собственный движок JavaScript под названием V8 и многопроцессорную систему. [47] Chrome для iOS продолжает использовать WebKit, поскольку Apple требует, чтобы веб-браузеры на этой платформе делали это. [48] Другие приложения на macOS и iOS используют WebKit, такие как почтовый клиент Apple Mail , App Store и версия 2008 года менеджера персональных данных Microsoft Entourage , оба из которых используют WebKit для рендеринга HTML-контента.
На основе WebKit были созданы новые веб-браузеры, такие как браузер S60 [49] на мобильных телефонах Symbian , браузер BlackBerry (версия 6.0+), Midori , браузер Chrome [50] [51] веб -браузер Android до версии 4.4 KitKat и браузер, используемый в системном программном обеспечении PlayStation 3 с версии 4.10. [52] веб-браузер Rekonq от KDE и рабочие пространства Plasma также используют его в качестве собственного движка веб-рендеринга. WebKit был принят в качестве движка рендеринга в OmniWeb , iCab and Web (ранее называвшийся Epiphany) и Sleipnir , заменив их оригинальные движки рендеринга. Web от GNOME некоторое время поддерживал как Gecko , так и WebKit, но команда решила, что цикл выпуска Gecko и будущие планы разработки сделают его слишком громоздким, чтобы продолжать его поддерживать. [53] webOS использует WebKit в качестве основы среды выполнения приложений. [54] WebKit используется для рендеринга HTML и запуска JavaScript в платформе приложений Adobe Integrated Runtime . В Adobe Creative Suite CS5 WebKit используется для рендеринга некоторых частей пользовательского интерфейса. По состоянию на первую половину 2010 года аналитик оценил совокупное количество мобильных телефонов, поставляемых с браузером на основе WebKit, в 350 миллионов. [55] К середине апреля 2015 года доля рынка браузеров WebKit составляла 50,3%. [56]
Через неделю после того, как Hyatt объявила об открытом исходном коде WebKit, Nokia объявила, что она портировала WebKit на операционную систему Symbian и разрабатывает браузер на основе WebKit для мобильных телефонов под управлением S60. Названный Web Browser for S60 , он использовался на Nokia, Samsung, LG и других мобильных телефонах Symbian S60. Apple также портировала WebKit на iOS для работы на iPhone , iPod Touch и iPad , где он используется для отображения контента в веб-браузере устройства и программном обеспечении электронной почты. [57] Платформа мобильных телефонов Android использовала WebKit (и более поздние версии его ответвления Blink ) в качестве основы своего веб-браузера [58] [59] [60] а Palm Pre , анонсированный в январе 2009 года, имеет интерфейс на основе WebKit. [61] Amazon Kindle 3 включает экспериментальный браузер на основе WebKit. [62]
В июне 2007 года Apple объявила, что WebKit был портирован на Microsoft Windows как часть Safari. Хотя Safari для Windows был молчаливо прекращен [63] компанией, порты WebKit на операционную систему Microsoft по-прежнему активно поддерживаются. [64] [65] Порт Windows использует собственные библиотеки Apple для работы и используется для iCloud [66] и iTunes [67] для Windows, тогда как порт «WinCairo» является полностью открытым исходным кодом и распространяемым портом. [68] [69]
WebKit также был портирован на несколько наборов инструментов, поддерживающих несколько платформ, таких как набор инструментов GTK для Linux под названием WebKitGTK , который используется Eolie, [70] GNOME Web , [71] [72] Adobe Integrated Runtime , Enlightenment Foundation Libraries (EFL) и набор инструментов Clutter. [73] Qt Software включила порт WebKit в релиз Qt 4.4 как модуль под названием QtWebKit [74] (с тех пор как был заменен Qt WebEngine , который вместо этого использует Blink). Браузер Iris на Qt также использовал WebKit. Порт Enlightenment Foundation Libraries (EFL) – EWebKit – был разработан ( Samsung и ProFusion [75] ) с упором на встроенные и мобильные системы для использования в качестве автономного браузера, виджетов-гаджетов, средства просмотра и компоновки форматированного текста. [ необходима ссылка ] Порт Clutter разработан компанией Collabora и спонсируется Robert Bosch GmbH .
Также существовал проект, синхронизированный с WebKit (спонсируемый Pleyo) [76] под названием Origyn Web Browser , который предоставлял метапорт для абстрактной платформы с целью сделать портирование на встроенные или легкие системы более быстрым и простым. [77] Этот порт используется для встроенных устройств, таких как телевизионные приставки , PMP, и он был портирован в AmigaOS , [78] [79] AROS [80] и MorphOS . MorphOS версии 1.7 является первой версией Origyn Web Browser (OWB), поддерживающей теги медиа HTML5 . [81] [82]
Web Platform for Embedded (WPE) — это порт WebKit, разработанный для встраиваемых приложений; он дополнительно улучшает архитектуру, разделяя основные функциональные блоки рендеринга на библиотеку подпрограмм общего назначения (libwpe), бэкэнды платформы и сам движок (называемый WPE WebKit). Порт GTK, хотя и автономный, может быть построен для использования этих базовых библиотек вместо его внутренней реализации поддержки платформы. Порт WPE в настоящее время поддерживается Igalia.
3 апреля 2013 года Google объявила, что создаст ответвление компонента WebKit WebCore, которое будет называться Blink . Разработчики Chrome решили создать ответвление, чтобы предоставить большую свободу в реализации функций WebCore в браузере, не вызывая конфликтов вверх по течению, и чтобы упростить его кодовую базу, удалив код для компонентов WebCore, не используемых Chrome. В связи с объявлением Opera Software в начале года о переходе на WebKit с помощью кодовой базы Chromium , было подтверждено, что веб-браузер Opera также перейдет на Blink. [47] После объявления разработчики WebKit начали обсуждение удаления специфичного для Chrome кода из движка, чтобы оптимизировать его кодовую базу. [83] WebKit больше не имеет специфичного для Chrome кода (например, buildsystem, хуки движка V8 JavaScript, код платформы и т. д.). [ необходима цитата ]
WebCore — это библиотека макета, рендеринга и объектной модели документа (DOM) для HTML и масштабируемой векторной графики (SVG), разработанная проектом WebKit. Ее полный исходный код лицензирован в соответствии с лицензией GNU Lesser General Public License (LGPL). Фреймворк WebKit оборачивает WebCore и JavaScriptCore, предоставляя интерфейс прикладного программирования Objective-C для движка рендеринга WebCore на основе C++ и движка сценариев JavaScriptCore, что позволяет легко ссылаться на него приложениям на основе API Cocoa ; более поздние версии также включают кроссплатформенную абстракцию платформы C++, а различные порты предоставляют больше API. [ необходима цитата ]
WebKit проходит тесты Acid2 и Acid3 с пиксельной визуализацией и отсутствием проблем со временем или плавностью на эталонном оборудовании. [84]
JavaScriptCore — это фреймворк, который предоставляет движок JavaScript для реализаций WebKit и предоставляет этот тип сценариев в других контекстах в macOS. [19] [85] JavaScriptCore изначально получен из библиотеки JavaScript engine ( KJS ) KDE (которая является частью проекта KDE) и библиотеки регулярных выражений PCRE . После ответвления от KJS и PCRE, JavaScriptCore был улучшен за счет множества новых функций и значительно улучшенной производительности. [86]
2 июня 2008 года проект WebKit объявил, что они переписали JavaScriptCore как «SquirrelFish», интерпретатор байт-кода . [36] [37] Проект развился в SquirrelFish Extreme (сокращенно SFX, продаваемый как Nitro), анонсированный 18 сентября 2008 года, который еще больше ускоряет выполнение JavaScript. [38]
Оптимизирующий компилятор just-in-time (JIT) под названием FTL был анонсирован 13 мая 2014 года. [87] Он использует LLVM для генерации оптимизированного машинного кода. «FTL» означает «Fourth-Tier-LLVM» и неофициально — faster-than-light , что указывает на его скорость. [88] С 15 февраля 2016 года бэкэнд FTL JIT заменен на «Bare Bones Backend» (или B3 для краткости). [89]
{{cite web}}
: CS1 maint: unfit URL (link){{cite web}}
: CS1 maint: unfit URL (link){{cite web}}
: CS1 maint: unfit URL (link)для KF6, ветка 'kf5' содержит последнее поддерживаемое состояние.