Kit web
WebKit es un motor de navegador desarrollado por Apple y utilizado principalmente en su navegador web Safari, así como en todos los navegadores web de iOS y iPadOS. WebKit también es utilizado por las consolas PlayStation a partir de la PS3, los sistemas operativos móviles Tizen, el lector de libros electrónicos Amazon Kindle, las consolas Nintendo a partir del navegador de Internet 3DS y el navegador BlackBerry descontinuado. La interfaz de programación de aplicaciones (API) C++ de WebKit proporciona un conjunto de clases para mostrar contenido web en Windows e implementa funciones del navegador como seguir enlaces cuando el usuario hace clic en ellos, administrar una lista de avance y retroceso y administrar un historial de páginas visitadas recientemente.
WebKit comenzó como una bifurcación de las bibliotecas KHTML y KJS de KDE y desde entonces ha sido desarrollado por los contribuyentes de KDE, Apple, Google, Nokia, Bitstream, BlackBerry, Sony, Igalia y otros. WebKit es compatible con macOS, Windows, Linux y varios otros sistemas operativos similares a Unix. El 3 de abril de 2013, Google anunció que había bifurcado WebCore, un componente de WebKit, para ser utilizado en futuras versiones de Google Chrome y el navegador web Opera, bajo el nombre Blink.
WebKit está disponible bajo la licencia BSD de 2 cláusulas con la excepción de los componentes WebCore y JavaScriptCore, que están disponibles bajo la licencia pública general reducida GNU. A partir del 7 de marzo de 2013, WebKit es una marca comercial de Apple, registrada en la Oficina de Marcas y Patentes de EE. UU.
Orígenes
El código que se convertiría en WebKit comenzó en 1998 como el motor de diseño KDE HTML (KHTML) y el motor KDE JavaScript (KJS). El proyecto WebKit fue iniciado dentro de Apple por Lisa Melton el 25 de junio de 2001, como una bifurcación de KHTML y KJS. Melton explicó en un correo electrónico a los desarrolladores de KDE que KHTML y KJS permitieron un desarrollo más fácil que otras tecnologías disponibles en virtud de ser pequeñas (menos de 140.000 líneas de código), estar claramente diseñadas y cumplir con los estándares. KHTML y KJS se trasladaron a macOS con la ayuda de una biblioteca de adaptadores y se cambiaron de nombre a WebCore y JavaScriptCore. JavaScriptCore se anunció en un correo electrónico a una lista de correo de KDE en junio de 2002, junto con la primera publicación de los cambios de Apple.
Según Apple, algunos cambios que requirieron diferentes tácticas de desarrollo involucraron características específicas de macOS que están ausentes en KHTML de KDE, como Objective-C, KWQ (pronunciado "quack") y implementación del subconjunto de Qt necesario para que KHTML funcione en macOS escrito en Objective C++ y llamadas a macOS.
Desarrollo dividido
El intercambio de código entre WebCore y KHTML se volvió cada vez más difícil a medida que la base del código divergía porque ambos proyectos tenían diferentes enfoques en la codificación y el intercambio de código. En un momento dado, los desarrolladores de KHTML dijeron que era poco probable que aceptaran los cambios de Apple y afirmaron que la relación entre los dos grupos era un "amargo fracaso". Afirmaron que Apple presentó sus cambios en parches grandes que contenían múltiples cambios con documentación inadecuada, a menudo en relación con futuras adiciones al código base. Por lo tanto, a los desarrolladores de KDE les resultó difícil integrar estos parches nuevamente en KHTML. Además, Apple había exigido que los desarrolladores firmaran acuerdos de confidencialidad antes de mirar el código fuente de Apple y ni siquiera entonces pudieron acceder a la base de datos de errores de Apple.
Durante el publicitado "divorcio" Durante ese período, el desarrollador de KDE Kurt Pfeifle (pipitas) publicó un artículo afirmando que los desarrolladores de KHTML habían logrado respaldar muchas (pero no todas) las mejoras de Safari desde WebCore a KHTML, y siempre apreciaron las mejoras provenientes de Apple y aún así hazlo. El artículo también señaló que Apple había comenzado a contactar a los desarrolladores de KHTML para discutir cómo mejorar la relación mutua y las formas de cooperación futura. De hecho, el proyecto KDE pudo incorporar algunos de estos cambios para mejorar la velocidad de renderizado de KHTML y agregar características, incluido el cumplimiento de la prueba de renderizado Acid2.
Tras la aparición de una historia sobre la bifurcación en las noticias, Apple publicó el código fuente de la bifurcación WebKit en un repositorio público de control de revisiones.
El equipo de WebKit también revirtió muchos cambios específicos de Apple en la base del código WebKit original e implementó capas de abstracción específicas de la plataforma para facilitar significativamente la transferencia del código de renderizado central a otras plataformas.
En julio de 2007, Ars Technica informó que el equipo de KDE pasaría de KHTML a WebKit. En cambio, después de varios años de integración, en agosto de 2010 se lanzó la versión 4.5.0 de la plataforma de desarrollo KDE con soporte tanto para WebKit como para KHTML, y el desarrollo de KHTML continúa.
Abastecimiento
El 7 de junio de 2005, el desarrollador de Safari, Dave Hyatt, anunció en su blog que Apple estaba abriendo el código fuente de WebKit (anteriormente, sólo WebCore y JavaScriptCore eran de código abierto) y abriendo el acceso al árbol de control de revisiones de WebKit y al rastreador de problemas.
A mediados de diciembre de 2005, la compatibilidad con gráficos vectoriales escalables (SVG) se fusionó en la versión estándar.
Los componentes JavaScriptCore y WebCore de WebKit están disponibles bajo la licencia pública general reducida GNU, mientras que el resto de WebKit está disponible bajo la licencia BSD de 2 cláusulas.
Mayor desarrollo
A principios de 2007, el equipo de desarrollo comenzó a implementar las extensiones de Hojas de Estilo Cascading (CSS), incluyendo animación, transiciones y transformaciones 2D y 3D; tales extensiones fueron lanzadas como borradores de trabajo para el Consorcio Web Mundial (W3C) en 2009 para la estandarización.
En noviembre de 2007, el proyecto anunció que había añadido soporte para funciones multimedia del borrador de la especificación HTML5, permitiendo que el vídeo incrustado se renderizara de forma nativa y se controlara mediante secuencias de comandos en WebKit.
El 2 de junio de 2008, el proyecto WebKit anunció que reescribieron JavaScriptCore como "SquirrelFish", un intérprete de código de bytes. El proyecto evolucionó hasta convertirse en SquirrelFish Extreme (abreviado SFX), anunciado el 18 de septiembre de 2008, que compila JavaScript en código de máquina nativo, eliminando la necesidad de un intérprete de código de bytes y acelerando así la ejecución de JavaScript. Inicialmente, la única arquitectura de procesador compatible con SFX era x86, pero a finales de enero de 2009, SFX se habilitó para macOS en x86-64, ya que pasa todas las pruebas en esa plataforma.
WebKit2
El 8 de abril de 2010, se anunció un proyecto llamado WebKit2 para rediseñar WebKit. Su objetivo era abstraer los componentes que proporcionan representación web limpiamente desde la interfaz circundante o el shell de la aplicación, creando una situación en la que "el contenido web (JavaScript, HTML, diseño, etc.) vive en un proceso separado de la interfaz de usuario de la aplicación". 34;. Esta abstracción tenía como objetivo hacer que la reutilización fuera un proceso más sencillo para WebKit2 que para WebKit. WebKit2 tenía "un cambio de API incompatible con respecto al WebKit original", lo que motivó su cambio de nombre.
Los objetivos de WebKit2 se configuraron para Linux, macOS, Windows, GTK y MeeGo-Harmattan. Safari para macOS cambió a la nueva API con la versión 5.1. Safari para iOS cambió a WebKit2 con iOS 8.
La API WebKit original ha pasado a llamarse API WebKitLegacy. La API WebKit2 ha pasado a llamarse simplemente API WebKit.
Usar

WebKit se utiliza como motor de renderizado en Safari y anteriormente lo utilizaba el navegador web Chrome de Google en Windows, macOS y Android (antes de la versión 4.4 KitKat). Chrome usó solo WebCore e incluyó su propio motor JavaScript llamado V8 y un sistema multiproceso. Chrome para iOS continúa usando WebKit porque Apple requiere que los navegadores web en esa plataforma lo hagan. Otras aplicaciones en macOS e iOS utilizan WebKit, como el cliente de correo electrónico de Apple Mail, App Store y la versión 2008 del administrador de información personal Entourage de Microsoft, los cuales utilizan WebKit para renderizar contenido HTML.
Base instalada
Nuevos navegadores web han sido construidos alrededor de WebKit como el navegador S60 en teléfonos móviles Symbian, BlackBerry Browser (ver 6.0+), Midori, navegador Chrome, el navegador Android Web antes de la versión 4.4 KitKat, y el navegador utilizado en el software del sistema PlayStation 3 de la versión 4.10. El navegador web Rekonq de KDE y los espacios de trabajo de Plasma también lo utilizan como el motor de renderización web nativo. WebKit ha sido adoptado como el motor de renderización en OmniWeb, iCab y Web (anteriormente llamado Epiphany) y Sleipnir, reemplazando sus motores de renderización originales. La Web de GNOME apoyó tanto a Gecko como a WebKit por algún tiempo, pero el equipo decidió que el ciclo de liberación de Gecko y los planes de desarrollo futuros harían que fuera demasiado complicado seguir apoyandolo. webOS utiliza WebKit como la base de su tiempo de ejecución de aplicaciones. WebKit se utiliza para renderizar HTML y ejecutar JavaScript en la plataforma de aplicación Adobe Integrated Runtime. En Adobe Creative Suite CS5, WebKit se utiliza para renderizar algunas partes de la interfaz de usuario. A partir de la primera mitad de 2010, un analista estimó el número acumulativo de teléfonos móviles enviados con un navegador basado en WebKit a 350 millones. A mediados de abril de 2015, la cuota del mercado del navegador WebKit era 50,3%.
Puertos
La semana después de que Hyatt anunciara el código abierto de WebKit, Nokia anunció que había portado WebKit al sistema operativo Symbian y estaba desarrollando un navegador basado en WebKit para teléfonos móviles con S60. Llamado Navegador web para S60, se utilizó en teléfonos móviles Nokia, Samsung, LG y otros teléfonos móviles Symbian S60. Apple también ha portado WebKit a iOS para ejecutarlo en iPhone, iPod Touch y iPad, donde se utiliza para representar contenido en el navegador web y el software de correo electrónico del dispositivo. La plataforma de teléfono móvil Android utilizó WebKit (y versiones posteriores, su bifurcación Blink) como base de su navegador web y Palm Pre, anunciado en enero de 2009, tiene una interfaz basada en WebKit. El Amazon Kindle 3 incluye un navegador experimental basado en WebKit.
En junio de 2007, Apple anunció que WebKit había sido portado a Microsoft Windows como parte de Safari. Aunque la empresa suspendió silenciosamente Safari para Windows, las adaptaciones de WebKit al sistema operativo de Microsoft todavía se mantienen activamente. El puerto de Windows utiliza las bibliotecas patentadas de Apple para funcionar y se utiliza para iCloud e iTunes para Windows, mientras que el puerto "WinCairo" El puerto es un puerto totalmente de código abierto y redistribuible.

Web Kit también ha sido portado a varios toolkits que soportan múltiples plataformas, como el kit de herramientas GTK para Linux, bajo el nombre WebKitGTK que es utilizado por Eolie, GNOME Web, Adobe Integrated Runtime, Enlightenment Foundation Libraries (EFL), y el kit de herramientas Clutter. Qt Software incluyó un puerto WebKit en la versión Qt 4.4 como un módulo llamado QtWebKit (desde entonces superado por Qt WebEngine, que utiliza Blink en su lugar). El Navegador Iris en Qt también utilizó WebKit. El puerto de la Fundación Iluminación (EFL) – EWeb Kit – fue desarrollado (por Samsung y ProFusion) enfocando los sistemas incrustados y móviles, para su uso como navegador independiente, widgets-gadgets, rico visor de texto y compositor. El puerto de Clutter es desarrollado por Collabora y patrocinado por Robert Bosch GmbH.
También hubo un proyecto sincronizado con WebKit (patrocinado por Pleyo) llamado Origyn Web Browser, que proporcionaba un metapuerto a una plataforma abstracta con el objetivo de agilizar la migración a sistemas integrados o ligeros. y más fácil. Este puerto se utiliza para dispositivos integrados como decodificadores, PMP y se ha adaptado a AmigaOS, AROS y MorphOS. MorphOS versión 1.7 es la primera versión del navegador web Origyn (OWB) que admite etiquetas multimedia HTML5.
Plataforma Web para Embebido
Plataforma web para integración (WPE) es un puerto WebKit diseñado para aplicaciones integradas; Mejora aún más la arquitectura al dividir los bloques funcionales de renderizado básicos en una biblioteca de rutinas de propósito general (libwpe), servidores de plataforma y el motor en sí (llamado WPE WebKit). El port GTK, aunque sea autónomo, se puede construir para usar estas bibliotecas base en lugar de su implementación de soporte de plataforma interna. Actualmente, Igalia mantiene el puerto WPE.
Bifurcación por Google
El 3 de abril de 2013, Google anunció que produciría una bifurcación del componente WebCore de WebKit, que se llamaría Blink. Los desarrolladores de Chrome decidieron utilizar la bifurcación para permitir una mayor libertad en la implementación de las funciones de WebCore en el navegador sin causar conflictos en sentido ascendente, y para permitir simplificar su base de código eliminando el código de los componentes de WebCore que Chrome no utiliza. En relación con el anuncio de Opera Software a principios de año de que cambiaría a WebKit mediante el código base Chromium, se confirmó que el navegador web Opera también cambiaría a Blink. Tras el anuncio, los desarrolladores de WebKit comenzaron a debatir sobre la eliminación del código específico de Chrome del motor para optimizar su código base. WebKit ya no tiene ningún código específico de Chrome (por ejemplo, sistema de compilación, enlaces del motor JavaScript V8, código de plataforma, etc.).
Componentes
Núcleo web
WebCore es una biblioteca de diseño, renderizado y modelo de objetos de documento (DOM) para HTML y gráficos vectoriales escalables (SVG), desarrollada por el proyecto WebKit. Su código fuente completo tiene la licencia GNU Lesser General Public License (LGPL). El marco WebKit envuelve WebCore y JavaScriptCore, proporcionando una interfaz de programación de aplicaciones Objective-C para el motor de renderizado WebCore basado en C++ y el motor de script JavaScriptCore, lo que permite que las aplicaciones basadas en Cocoa API puedan hacer referencia a él fácilmente; Las versiones posteriores también incluyen una abstracción de plataforma C ++ multiplataforma y varios puertos proporcionan más API.
WebKit pasa las pruebas Acid2 y Acid3, con una representación de píxeles perfectos y sin problemas de sincronización o suavidad en el hardware de referencia.
JavaScript Core
JavaScriptCore es un marco que proporciona un motor JavaScript para implementaciones de WebKit y proporciona este tipo de secuencias de comandos en otros contextos dentro de macOS. JavaScriptCore se deriva originalmente de la biblioteca del motor JavaScript (KJS) de KDE (que forma parte del proyecto KDE) y de la biblioteca de expresiones regulares PCRE. Desde que se bifurcó de KJS y PCRE, JavaScriptCore se ha mejorado con muchas características nuevas y un rendimiento muy mejorado.
El 2 de junio de 2008, el proyecto WebKit anunció que reescribieron JavaScriptCore como "SquirrelFish", un intérprete de código de bytes. El proyecto evolucionó hasta convertirse en SquirrelFish Extreme (abreviado SFX, comercializado como Nitro), anunciado el 18 de septiembre de 2008, acelerando aún más la ejecución de JavaScript.
El 13 de mayo de 2014 se anunció un compilador de optimización justo a tiempo (JIT) llamado FTL. Utiliza LLVM para generar código de máquina optimizado. "FTL" significa "Fourth-Tier-LLVM" y extraoficialmente significa más rápido que la luz, en alusión a su velocidad. A partir del 15 de febrero de 2016, el backend de FTL JIT se reemplaza por "Bare Bones Backend" (o B3 para abreviar).