WebKit est un moteur de navigateur principalement utilisé dans le navigateur web Safari d'Apple , ainsi que dans la quasi-totalité des navigateurs web sur iOS et iPadOS . WebKit est également utilisé par les consoles PlayStation (à partir de la PS3), les systèmes d'exploitation mobiles Tizen , la liseuse Kindle d'Amazon , le navigateur Internet des consoles Nintendo (à partir de la 3DS), GNOME Web et le navigateur BlackBerry (désormais abandonné).
WebKit est initialement un fork des bibliothèques KHTML et KJS de KDE [ et a depuis été développé par contributeurs de KDE , Apple , Google , Nokia [ Bitstream , BlackBerry, Sony , Igalia et d'autres . WebKit est compatible avec macOS , Windows, Linux et divers autres systèmes d'exploitation de type Unix . Le 3 avril 2013, Google a annoncé avoir créé un fork de WebCore, un composant de WebKit, pour l'utiliser dans les futures versions de Google Chrome sous le nom de Blink . Depuis la version 15, sortie en mai 2013, le navigateur Opera a abandonné son moteur de rendu Presto au profit de WebKit, implémenté par Google dans le cadre du projet Chromium.
Son moteur JavaScript , JavaScriptCore, alimente également l' environnement d'exécution JS côté serveur Bun , contrairement à V8 utilisé par Node.js , Deno et Blink . L'interface de programmation (API) C++ de WebKit fournit un ensemble de classes pour afficher du contenu Web dans des fenêtres et implémente des fonctionnalités de navigateur telles que le suivi des liens lorsque l'utilisateur clique dessus, la gestion d'une liste de navigation précédente/suivante et la gestion de l'historique des pages récemment visitées.
WebKit est un logiciel libre et distribué sous la licence BSD 2-Clause à l'exception des composants WebCore et JavaScriptCore , qui sont distribués sous la licence publique générale limitée GNU (LGPL) . Depuis le 7 mars 2013, WebKit est une marque déposée d'Apple auprès de l' Office des brevets et des marques des États-Unis .
Origines
Le code qui allait devenir WebKit a vu le jour en 1998 sous le nom de moteur de rendu HTML ( KHTML ) et moteur JavaScript ( KJS ) de KDE. Le projet WebKit a été lancé chez Apple par Lisa Melton le 25 juin 2001 , comme une version dérivée de KHTML et KJS . Dans un courriel adressé aux développeurs de KDE , Melton expliquait que KHTML et KJS permettaient un développement plus aisé que les autres technologies disponibles grâce à leur taille réduite (moins de 140 000 lignes de code ), leur conception claire et leur conformité aux normes. KHTML et KJS ont été portés sur macOS à l'aide d'une bibliothèque d'adaptation et renommés WebCore et JavaScriptCore . JavaScriptCore a été annoncé dans un courriel envoyé à une liste de diffusion de KDE en juin 2002, en même temps que la première version des modifications apportées par Apple .
Selon Apple, certains changements qui ont nécessité des tactiques de développement différentes impliquaient des fonctionnalités spécifiques à macOS qui sont absentes de KHTML de KDE, telles que Objective-C ; KWQ (prononcé « quack »), une implémentation du sous-ensemble de Qt nécessaire pour faire fonctionner KHTML sur macOS, écrite en Objective C++ ; et les appels macOS.
Développement fractionné
L'échange de code entre WebCore et KHTML est devenu de plus en plus difficile à mesure que leurs bases de code divergeaient, car les deux projets utilisaient des approches de codage et de partage de code différentes. À un moment donné, les développeurs de KHTML ont déclaré qu'ils étaient peu susceptibles d'accepter les modifications d'Apple et ont qualifié la relation entre les deux groupes d'« échec cuisant ». Ils ont affirmé qu'Apple soumettait ses modifications sous forme de correctifs volumineux contenant de multiples changements avec une documentation insuffisante, souvent en lien avec de futurs ajouts à la base de code. Par conséquent, ces correctifs étaient difficiles à intégrer dans KHTML par les développeurs de KDE . De plus, Apple exigeait que les développeurs signent des accords de confidentialité avant de pouvoir consulter son code source, et même alors, ils n'avaient pas accès à sa base de données de bogues.
Durant la période de « divorce » médiatisée, Kurt Pfeifle ( pipitas ), développeur KDE, a publié un article affirmant que les développeurs de KHTML étaient parvenus à intégrer de nombreuses améliorations de Safari (mais pas toutes) de WebCore à KHTML, et qu'ils avaient toujours apprécié, et apprécient encore, les améliorations apportées par Apple. L'article indiquait également qu'Apple avait commencé à contacter les développeurs de KHTML pour discuter d'une amélioration de leurs relations et d'une future collaboration. De fait, le projet KDE a pu intégrer certaines de ces modifications afin d'améliorer la vitesse de rendu de KHTML et d'ajouter des fonctionnalités, notamment la conformité au test de rendu Acid2 .
Suite à la publication d'un article sur la bifurcation dans les médias, Apple a publié le code source de la bifurcation WebKit dans un dépôt de contrôle de révision public.
L'équipe WebKit a également annulé de nombreuses modifications spécifiques à Apple dans le code source original de WebKit et a implémenté des couches d'abstraction spécifiques à la plateforme, ce qui facilite considérablement l'intégration du code de rendu principal sur d'autres plateformes.
En juillet 2007, Ars Technica annonçait que l'équipe KDE allait passer de KHTML à WebKit. Finalement, après plusieurs années d'intégration, la plateforme de développement KDE version 4.5.0 a été publiée en août 2010, prenant en charge à la fois WebKit et KHTML. Le développement de KHTML s'est poursuivi jusqu'en 2016 avant d'être officiellement abandonné en 2023.
open-source
Le 7 juin 2005, Dave Hyatt, développeur de Safari, a annoncé sur son blog qu'Apple rendait WebKit open source (auparavant, seuls WebCore et JavaScriptCore étaient open source) et ouvrait l'accès à l'arbre de contrôle de révision de WebKit et au système de suivi des problèmes.
À la mi-décembre 2005, la prise en charge des graphiques vectoriels évolutifs (SVG) a été intégrée à la version standard.
Les composants JavaScriptCore et WebCore de WebKit sont disponibles sous la licence publique générale limitée GNU, tandis que le reste de WebKit est disponible sous la licence BSD à 2 clauses.
Développement ultérieur
Dès le début de 2007, l'équipe de développement a commencé à implémenter des extensions de feuilles de style en cascade (CSS), notamment des animations , des transitions et des transformations 2D et 3D ; ces extensions ont été publiées sous forme de brouillons de travail au World Wide Web Consortium (W3C) en 2009 pour normalisation.
En novembre 2007, le projet a annoncé qu'il avait ajouté la prise en charge des fonctionnalités multimédias de la spécification préliminaire HTML5 , permettant ainsi le rendu natif et le contrôle par script de la vidéo intégrée dans WebKit.
Le 2 juin 2008, le projet WebKit annonçait la réécriture de JavaScriptCore sous le nom de « SquirrelFish », un interpréteur de bytecode . Le projet a évolué vers SquirrelFish Extreme (SFX), annoncé le 18 septembre 2008, qui compile JavaScript en code machine natif , éliminant ainsi le besoin d'un interpréteur de bytecode et accélérant l'exécution de JavaScript. Initialement, seule l'architecture x86 était prise en charge par SFX , mais fin janvier 2009, SFX a été activé pour macOS sur x86-64 , ayant passé avec succès tous les tests sur cette plateforme.
WebKit2
Le 8 avril 2010, le projet WebKit2 a été annoncé afin de repenser WebKit. Son objectif était d'abstraire les composants assurant la mise en page et le rendu de manière transparente de leur interface ou enveloppe applicative, créant ainsi un système où « le contenu web (JavaScript, HTML, mise en page, etc.) réside dans un processus distinct de l'interface utilisateur de l'application ». Cette abstraction visait à simplifier la réutilisation du code dans WebKit2 par rapport à WebKit. WebKit2 présentait une modification d'API incompatible avec la version originale de WebKit, ce qui a motivé son changement de nom.
Les cibles WebKit2 étaient Linux, macOS, Windows, GTK et MeeGo -Harmattan. Safari pour macOS est passé à la nouvelle API avec la version 5.1. Safari pour iOS est passé à WebKit2 avec iOS 8.
L'API WebKit d'origine a été renommée API WebKitLegacy. L'API WebKit2 a été renommée simplement API WebKit.
Utiliser

WebKit est utilisé comme moteur de rendu dans Safari et était utilisé par le navigateur Chrome de Google sur Windows, macOS et Android (avant la version 4.4 KitKat). Chrome utilisait uniquement WebCore et intégrait son propre moteur JavaScript , V8 , ainsi qu'un système multiprocessus. Chrome pour iOS continue d'utiliser WebKit car Apple l'exige pour les navigateurs web sur cette plateforme. D'autres applications sur macOS et iOS utilisent WebKit, comme le client de messagerie Mail d'Apple , l'App Store et la version 2008 du gestionnaire d'informations personnelles Entourage de Microsoft , qui utilisent tous deux WebKit pour le rendu du contenu HTML.
Base installée
tels que le navigateur S60 sur les téléphones mobiles Symbian , BlackBerry Browser (version 6.0 et suivantes), Midori , Chrome [ les navigateurs web Android antérieurs à la version 4.4 KitKat, et le navigateur intégré au système d'exploitation de la PlayStation 3 à partir de la version 4.10 . Le navigateur web Rekonq de KDE et Plasma Workspaces l'utilisent également comme moteur de rendu web natif. WebKit a été adopté comme moteur de rendu dans OmniWeb , iCab , Web (anciennement Epiphany) et Sleipnir , remplaçant ainsi leurs moteurs de rendu d'origine. L'environnement web de GNOME a pris en charge à la fois Gecko et WebKit pendant un certain temps. Cependant, l'équipe a décidé que le cycle de vie de Gecko et les projets de développement futurs rendraient sa prise en charge trop complexe . webOS utilise WebKit comme base pour l'exécution de ses applications. WebKit est utilisé pour le rendu HTML et l'exécution JavaScript dans la plateforme d'applications Adobe Integrated Runtime . Dans Adobe Creative Suite CS5, WebKit est utilisé pour le rendu de certaines parties de l'interface utilisateur. Au premier semestre 2010, un analyste estimait que 350 millions de téléphones mobiles étaient livrés avec un navigateur basé sur WebKit. À la mi-avril 2015, la part de marché des navigateurs WebKit était de 50,3 %.
Ports
La semaine suivant l'annonce par Hyatt de l'ouverture du code source de WebKit, Nokia annonçait avoir porté WebKit sur Symbian et développer un navigateur basé sur WebKit pour les téléphones mobiles fonctionnant sous S60. Baptisé « Web Browser for S60 » , il était utilisé sur les téléphones Nokia, Samsung, LG et autres téléphones mobiles Symbian S60. Apple a également porté WebKit sur iOS pour l' iPhone , l'iPod Touch et l'iPad , où il est utilisé pour l'affichage du contenu dans le navigateur web et l'application de messagerie de l'appareil. La plateforme mobile Android utilisait WebKit (et ses versions ultérieures dérivées, Blink ) comme base de son navigateur web , et le Palm Pre , annoncé en janvier 2009, possède une interface basée sur WebKit. La liseuse Amazon Kindle 3 intègre un navigateur expérimental basé sur WebKit.
En juin 2007, Apple a annoncé que WebKit avait été porté sur Microsoft Windows dans le cadre de Safari. Bien que la société ait discrètement abandonné Safari pour Windows, les versions de WebKit pour le système d'exploitation de Microsoft sont toujours activement maintenues. La version Windows utilise les bibliothèques propriétaires d'Apple et est utilisée pour iCloud et iTunes pour Windows, tandis que la version « WinCairo » est entièrement libre et redistribuable.

WebKit a également été porté sur plusieurs boîtes à outils multiplateformes, comme la boîte à outils GTK pour Linux , sous le nom de WebKitGTK , utilisée par Eolie , GNOME Web , Adobe Integrated Runtime , Enlightenment Foundation Libraries (EFL) et la boîte à outils Clutter . Qt Software a inclus un portage de WebKit dans la version 4.4 de Qt sous la forme d'un module appelé QtWebKit (remplacé depuis par Qt WebEngine , qui utilise Blink). Le navigateur Iris sur Qt utilisait également WebKit. Le portage pour Enlightenment Foundation Libraries (EFL) – EWebKit – a été développé (par Samsung et ProFusion ) pour les systèmes embarqués et mobiles, et utilisé comme navigateur autonome, widgets/gadgets, visionneuse de texte enrichi et éditeur de texte. Le port Clutter est développé par Collabora et sponsorisé par Robert Bosch GmbH .
Il existait également un projet synchronisé avec WebKit (sponsorisé par Pleyo) appelé Origyn Web Browser , qui fournissait un méta-portage vers une plateforme abstraite afin de faciliter et d'accélérer le portage vers des systèmes embarqués ou légers. Ce portage est utilisé pour des appareils embarqués tels que les décodeurs et les lecteurs multimédias portables (PMP) et a été porté sur AmigaOS , AROS , et MorphOS . La version 1.7 de MorphOS est la première version d' Origyn Web Browser (OWB) prenant en charge les balises média HTML5 .
Plateforme Web pour systèmes embarqués
La plateforme Web pour systèmes embarqués ( WPE ) est un portage de WebKit conçu pour les applications embarquées. Elle améliore l'architecture en divisant les fonctionnalités de rendu de base en une bibliothèque de routines génériques (libwpe), des modules d'arrière-plan pour la plateforme et le moteur lui-même (appelé WPE WebKit). Le portage GTK, bien qu'autonome, peut être compilé pour utiliser ces bibliothèques de base au lieu de son implémentation interne spécifique à la plateforme. Le portage WPE est actuellement maintenu par Igalia .
Fork par Google
Le 3 avril 2013, Google annonça la création d'une version dérivée du composant WebCore de WebKit, baptisée Blink . Les développeurs de Chrome décidèrent de créer cette version dérivée afin d'accroître la liberté d'implémentation de ses fonctionnalités dans le navigateur, sans risque de conflits avec les composants en amont, et de simplifier leur code en supprimant celui des composants WebCore inutilisés par Chrome. Suite à l'annonce faite plus tôt dans l'année par Opera Software de sa migration vers WebKit via le code source de Chromium , il fut confirmé que le navigateur Opera adopterait également Blink. Après cette annonce, les développeurs de WebKit entamèrent des discussions sur la suppression du code spécifique à Chrome afin d'alléger leur code source. WebKit ne contient plus aucun code spécifique à Chrome (par exemple, système de compilation, points d'entrée du moteur JavaScript V8, code de la plateforme, etc.).
Composants
WebCore
WebCore est une bibliothèque de mise en page, de rendu et de modélisation objet de document (DOM) pour HTML et SVG, développée par le projet WebKit. Son code source complet est distribué sous licence GNU LGPL. Le framework WebKit encapsule WebCore et JavaScriptCore, offrant une interface de programmation (API) Objective-C au moteur de rendu WebCore et au moteur de script JavaScriptCore, tous deux basés sur C++ . Ceci permet une utilisation aisée par les applications utilisant l' API Cocoa . Les versions ultérieures incluent également une abstraction de plateforme C++ multiplateforme , et divers ports offrent des API supplémentaires.
WebKit réussit les tests Acid2 et Acid3 , avec un rendu pixel-perfect et sans problème de synchronisation ou de fluidité sur le matériel de référence.
JavaScriptCore
JavaScriptCore est un framework qui fournit un moteur JavaScript pour les implémentations WebKit et permet d'exécuter ce type de script dans d'autres contextes au sein de macOS. JavaScriptCore est initialement dérivé de la bibliothèque JavaScript KJS de KDE (qui fait partie du projet KDE) et de la bibliothèque d'expressions régulières PCRE . Depuis sa création à partir de KJS et PCRE, JavaScriptCore a intégré de nombreuses nouvelles fonctionnalités et a considérablement amélioré ses performances.
Le 2 juin 2008, le projet WebKit a annoncé la réécriture de JavaScriptCore sous le nom de « SquirrelFish » , un interpréteur de bytecode basé sur les registres remplaçant l'interpréteur original parcourant l'AST. Le projet a ensuite évolué vers SquirrelFish Extreme (abrégé SFX, commercialisé sous le nom de Nitro), annoncé le 18 septembre 2008, accélérant encore l'exécution de JavaScript grâce à l'introduction de la compilation à la volée .
Un compilateur JIT ( Just-In-Time ) optimisant nommé FTL a été annoncé le 13 mai 2014. Il utilise LLVM pour générer du code machine optimisé. « FTL » signifie « Fourth-Tier-LLVM » et, de manière non officielle, « faster-than-light » , en référence à sa vitesse. Depuis le 15 février 2016, le moteur de compilation JIT de FTL est remplacé par « Bare Bones Backend » (ou B3 en abrégé).