WebKit es un motor de navegador que se utiliza principalmente en el navegador web Safari de Apple , 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 descontinuado navegador BlackBerry .
WebKit comenzó como una bifurcación de las bibliotecas KHTML y KJS de KDE , [1] [9] y desde entonces ha sido desarrollado por los contribuyentes de KDE , Apple , Google , Nokia , [9] Bitstream , BlackBerry , Sony , Igalia y otros. [10] WebKit es compatible con macOS , Windows , Linux y varios otros sistemas operativos similares a Unix . [11] 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 . [12] [13]
Su motor JavaScript , JavascriptCore, también impulsa el tiempo de ejecución JS del lado del servidor Bun , [14] a diferencia del V8 utilizado por Node.js y Blink . 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 hacia atrás y administrar un historial de páginas visitadas recientemente.
WebKit es de código abierto y está disponible bajo la licencia BSD 2-Clause [15] [8] 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 Patentes y Marcas de EE. UU. [16]
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, [17] [18] como una bifurcación de KHTML y KJS . Melton explicó en un correo electrónico a los desarrolladores de KDE [1] 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. [1] 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. [19]
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"), una implementación del subconjunto de Qt requerido para que KHTML funcione en macOS escrito en Objective C++ y llamadas a macOS. [20]
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. [21] En un momento, 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". [22] 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. [23] Además, Apple había exigido que los desarrolladores firmaran acuerdos de confidencialidad antes de mirar el código fuente de Apple e incluso entonces no pudieron acceder a la base de datos de errores de Apple. [24]
Durante el publicitado período de "divorcio", 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 todavía lo hacen. entonces. 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. [25] 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 . [26]
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 . [27]
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. [28]
En julio de 2007, Ars Technica informó que el equipo de KDE pasaría de KHTML a WebKit. [29] En cambio, después de varios años de integración, la versión 4.5.0 de la plataforma de desarrollo KDE se lanzó en agosto de 2010 con soporte para WebKit y KHTML, y el desarrollo de KHTML continuó hasta 2016 antes de que se descontinuara oficialmente en 2023. [30] [ 31]
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. [27]
A mediados de diciembre de 2005, la compatibilidad con gráficos vectoriales escalables (SVG) se fusionó con la versión estándar. [32]
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. [8]
A principios de 2007, el equipo de desarrollo comenzó a implementar extensiones de hojas de estilo en cascada (CSS), incluidas animaciones , transiciones y transformaciones tanto 2D como 3D; [33] dichas extensiones se publicaron como borradores de trabajo para el Consorcio World Wide Web (W3C) en 2009 para su estandarización. [34]
En noviembre de 2007, el proyecto anunció que había agregado soporte para funciones multimedia del borrador de la especificación HTML5 , permitiendo que el video incrustado se renderice de forma nativa y se controle mediante script en WebKit. [35]
El 2 de junio de 2008, el proyecto WebKit anunció que reescribieron JavaScriptCore como "SquirrelFish", un intérprete de código de bytes . [36] [37] El proyecto evolucionó a 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. [38] 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. [39]
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". 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. [40]
Los objetivos de WebKit2 se configuraron para Linux, macOS, Windows, GTK y MeeGo -Harmattan. [41] [42] Safari para macOS cambió a la nueva API con la versión 5.1. [43] Safari para iOS cambió a WebKit2 con iOS 8. [44]
La API WebKit original pasó a llamarse API WebKitLegacy. [45] La API WebKit2 ha pasado a llamarse simplemente API WebKit. [46]
WebKit se utiliza como motor de renderizado dentro de Safari y anteriormente lo usaba 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. [47] Chrome para iOS continúa usando WebKit porque Apple requiere que los navegadores web en esa plataforma lo hagan. [48] 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 representar contenido HTML.
Se han creado nuevos navegadores web en torno a WebKit, como el navegador S60 [49] en teléfonos móviles Symbian , BlackBerry Browser (ver 6.0+), Midori , el navegador Chrome , [50] [51] el navegador web Android anterior a la versión 4.4 KitKat y el navegador utilizado en el software del sistema PlayStation 3 a partir de la versión 4.10. [52] El navegador web Rekonq de KDE y Plasma Workspaces también lo utilizan como motor de renderizado web nativo. WebKit se ha adoptado como motor de renderizado en OmniWeb , iCab y Web (anteriormente llamado Epiphany) y Sleipnir , reemplazando sus motores de renderizado originales. La Web de GNOME admitió tanto Gecko como WebKit durante algún tiempo, pero el equipo decidió que el ciclo de lanzamiento de Gecko y los futuros planes de desarrollo harían que fuera demasiado engorroso continuar admitiéndolo. [53] webOS utiliza WebKit como base del tiempo de ejecución de su aplicación. [54] WebKit se utiliza para representar HTML y ejecutar JavaScript en la plataforma de aplicaciones Adobe Integrated Runtime . En Adobe Creative Suite CS5, WebKit se utiliza para representar algunas partes de la interfaz de usuario. En la primera mitad de 2010, un analista estimó en 350 millones el número acumulado de teléfonos móviles enviados con un navegador basado en WebKit. [55] A mediados de abril de 2015, la cuota de mercado del navegador WebKit era del 50,3%. [56]
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. [57] La plataforma de teléfono móvil Android utilizó WebKit (y versiones posteriores su bifurcación Blink ) como base de su navegador web [58] [59] [60] y Palm Pre , anunciado en enero de 2009, tiene una interfaz basada en WebKit. [61] El Amazon Kindle 3 incluye un navegador experimental basado en WebKit. [62]
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 [63] , las adaptaciones de WebKit al sistema operativo de Microsoft todavía se mantienen activamente. [64] [65] El puerto de Windows utiliza bibliotecas patentadas de Apple para funcionar y se usa para iCloud [66] e iTunes [67] para Windows, mientras que el puerto "WinCairo" es un puerto redistribuible y de código abierto. [68] [69]
WebKit también se ha adaptado a varios kits de herramientas que admiten múltiples plataformas, como el kit de herramientas GTK para Linux , bajo el nombre WebKitGTK que utiliza Eolie, [70] GNOME Web , [71] [72] Adobe Integrated Runtime , Enlightenment Foundation Libraries. (EFL) y el kit de herramientas Clutter . [73] Qt Software incluyó un puerto WebKit en la versión Qt 4.4 como un módulo llamado QtWebKit [74] (desde que fue reemplazado por Qt WebEngine , que usa Blink en su lugar). El navegador Iris en Qt también usaba WebKit. El puerto Enlightenment Foundation Libraries (EFL), EWebKit, fue desarrollado (por Samsung y ProFusion [75] ) centrándose en los sistemas integrados y móviles, para su uso como navegador independiente, widgets, visor de texto enriquecido y compositor. [ cita requerida ] El puerto Clutter es desarrollado por Collabora y patrocinado por Robert Bosch GmbH .
También hubo un proyecto sincronizado con WebKit (patrocinado por Pleyo) [76] llamado Origyn Web Browser , que proporcionó un metapuerto a una plataforma abstracta con el objetivo de hacer que la migración a sistemas integrados o livianos sea más rápida y sencilla. [77] Este puerto se utiliza para dispositivos integrados como decodificadores , PMP y se ha portado a AmigaOS , [78] [79] AROS [80] y MorphOS . MorphOS versión 1.7 es la primera versión del navegador web Origyn (OWB) que admite etiquetas multimedia HTML5 . [81] [82]
Web Platform for Embedded (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.
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. [47] 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 base de código. [83] 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.). [ cita necesaria ]
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. [ cita necesaria ]
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. [84]
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. [19] [85] JavaScriptCore se deriva originalmente de la biblioteca del motor JavaScript de KDE ( KJS ) (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. [86]
El 2 de junio de 2008, el proyecto WebKit anunció que reescribieron JavaScriptCore como "SquirrelFish", un intérprete de código de bytes . [36] [37] 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. [38]
El 13 de mayo de 2014 se anunció un compilador de optimización justo a tiempo (JIT) llamado FTL. [87] 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. [88] A partir del 15 de febrero de 2016, el backend de FTL JIT se reemplaza por "Bare Bones Backend" (o B3 para abreviar). [89]
{{cite web}}
: Mantenimiento CS1: URL no apta ( enlace ){{cite web}}
: Mantenimiento CS1: URL no apta ( enlace ){{cite web}}
: Mantenimiento CS1: URL no apta ( enlace )Eliminada para KF6, la rama 'kf5' contiene el último estado mantenido.