WebKit es un motor de navegador utilizado principalmente en el navegador web Safari de Apple , así como en todos los navegadores web de iOS y iPadOS . WebKit también lo utilizan 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 , que ya no se fabrica .
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 de Blink . [12] [13]
Su motor JavaScript , JavascriptCore, también impulsa el entorno de ejecución JS del lado del servidor Bun , [14] a diferencia del V8 utilizado por Node.js , Deno y Blink . La interfaz de programación de aplicaciones (API) C++ de WebKit proporciona un conjunto de clases para mostrar contenido web en ventanas e implementa funciones del navegador como seguir enlaces cuando el usuario hace clic en ellos, administrar una lista de atrás hacia adelante y administrar un historial de páginas visitadas recientemente.
WebKit es de código abierto y está disponible bajo la licencia BSD de 2 cláusulas [15] [8] con excepción de los componentes WebCore y JavaScriptCore, que están disponibles bajo la Licencia Pública General Reducida de GNU . A partir del 7 de marzo de 2013, WebKit es una marca registrada de Apple en la Oficina de Patentes y Marcas de los Estados Unidos. [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 permitían 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 ), diseñadas de manera limpia y compatibles con los estándares. KHTML y KJS se portaron a macOS con la ayuda de una biblioteca adaptadora y se renombraron 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 el primer lanzamiento de los cambios de Apple. [19]
Según Apple, algunos cambios que requerían tácticas de desarrollo diferentes involucraban 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 macOS. [20]
El intercambio de código entre WebCore y KHTML se hizo cada vez más difícil a medida que la base de 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 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". [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 incorporaciones a la base de código. Por lo tanto, estos parches eran difíciles de integrar de nuevo en KHTML para los desarrolladores de KDE . [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 en el que afirmaba que los desarrolladores de KHTML habían logrado incorporar muchas (pero no todas) las mejoras de Safari desde WebCore a KHTML, y que siempre habían apreciado las mejoras que venían de Apple y que todavía lo hacen. El artículo también señalaba que Apple había comenzado a ponerse en contacto con 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 añadir funciones, incluida la compatibilidad con 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 de WebKit en un repositorio público de control de revisión . [27]
El equipo de WebKit también revirtió muchos cambios específicos de Apple en la base de código original de WebKit e implementó capas de abstracción específicas de la plataforma para hacer que la conversión del código de renderizado principal a otras plataformas fuera significativamente más fácil. [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 KDE Development Platform se lanzó en agosto de 2010 con soporte tanto para WebKit como para KHTML, y el desarrollo de KHTML continuó hasta 2016 antes de que se suspendiera 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, solo WebCore y JavaScriptCore eran de código abierto) y abriendo el acceso al árbol de control de revisión de WebKit y al rastreador de problemas. [27]
A mediados de diciembre de 2005, el soporte para gráficos vectoriales escalables (SVG) se incorporó a la compilación estándar. [32]
Los componentes JavaScriptCore y WebCore de WebKit están disponibles bajo la Licencia Pública General Reducida de 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 en el Consorcio World Wide Web (W3C) en 2009 para su estandarización. [34]
En noviembre de 2007, el proyecto anunció que había añadido soporte para las características multimedia del borrador de especificación HTML5 , permitiendo que el vídeo incrustado se renderice de forma nativa y se controle mediante scripts en WebKit. [35]
El 2 de junio de 2008, el proyecto WebKit anunció que reescribieron JavaScriptCore como "SquirrelFish", un intérprete de bytecode . [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 bytecode y acelerando así la ejecución de JavaScript. [38] Inicialmente, la única arquitectura de procesador compatible con SFX era la x86 , pero a fines 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 una representación web limpia de su interfaz circundante o shell de 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 el WebKit original", lo que motivó su cambio de nombre. [40]
Los objetivos de WebKit2 se establecieron en 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 original de WebKit ha sido renombrada como API WebKitLegacy. [45] La API de WebKit2 ha sido renombrada como API WebKit simple. [46]
WebKit se utiliza como motor de renderizado dentro de 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 solo usaba WebCore e incluía su propio motor de JavaScript llamado V8 y un sistema multiproceso. [47] Chrome para iOS sigue usando WebKit porque Apple exige que los navegadores web de esa plataforma lo hagan. [48] Otras aplicaciones en macOS e iOS hacen uso de WebKit, como el cliente de correo electrónico de Apple Mail , App Store y la versión de 2008 del administrador de información personal Entourage de Microsoft , los cuales hacen uso de WebKit para renderizar 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 (versión 6.0+), Midori , el navegador Chrome , [50] [51] el navegador web Android antes de 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 and Web (anteriormente llamado Epiphany) y Sleipnir , reemplazando sus motores de renderizado originales. La Web de GNOME admitió tanto a Gecko como a WebKit durante algún tiempo, pero el equipo decidió que el ciclo de lanzamiento de Gecko y los planes de desarrollo futuros lo harían demasiado engorroso para seguir admitiéndolo. [53] webOS utiliza WebKit como base de su tiempo de ejecución de aplicaciones. [54] WebKit se utiliza para renderizar HTML y ejecutar JavaScript en la plataforma de aplicaciones Adobe Integrated Runtime . En Adobe Creative Suite CS5, se utiliza WebKit para renderizar algunas partes de la interfaz de usuario. En la primera mitad de 2010, un analista estimó que el número acumulado de teléfonos móviles con un navegador basado en WebKit era de 350 millones. [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 Web Browser for S60 , se utilizó en Nokia, Samsung, LG y otros teléfonos móviles Symbian S60. Apple también ha portado WebKit a iOS para ejecutarse en el iPhone , iPod Touch y iPad , donde se utiliza para representar contenido en el navegador web del dispositivo y el software de correo electrónico. [57] La plataforma de teléfonos móviles Android utilizó WebKit (y versiones posteriores de su bifurcación Blink ) como base de su navegador web [58] [59] [60] y el 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 compañía discontinuó silenciosamente Safari para Windows [63] , los puertos de WebKit al sistema operativo de Microsoft aún se mantienen de forma activa. [64] [65] El puerto de Windows utiliza las bibliotecas propietarias de Apple para funcionar y se utiliza para iCloud [66] e iTunes [67] para Windows, mientras que el puerto "WinCairo" es un puerto completamente de código abierto y redistribuible. [68] [69]
WebKit también ha sido portado a varios kits de herramientas que soportan múltiples plataformas, como el kit de herramientas GTK para Linux , bajo el nombre WebKitGTK que es usado por 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 entonces reemplazado por Qt WebEngine , que usa Blink en su lugar). El navegador Iris en Qt también usó WebKit. El puerto Enlightenment Foundation Libraries (EFL) – EWebKit – fue desarrollado (por Samsung y ProFusion [75] ) enfocado en los sistemas embebidos y móviles, para uso como navegador independiente, widgets-gadgets, 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 meta-puerto a una plataforma abstracta con el objetivo de hacer que la portabilidad a sistemas integrados o ligeros 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 . La versión 1.7 de MorphOS es la primera versión de Origyn Web Browser (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 renderización básicos en una biblioteca de rutinas de propósito general (libwpe), backends de plataforma y el propio motor (llamado WPE WebKit). El puerto GTK, aunque autónomo, se puede crear para utilizar estas bibliotecas base en lugar de su implementación de soporte de plataforma interna. El puerto WPE está actualmente mantenido por Igalia.
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 realizar la bifurcación para permitir una mayor libertad en la implementación de las características de WebCore en el navegador sin causar conflictos en sentido ascendente, y para permitir la simplificación de su base de código eliminando el código de los componentes WebCore que no utiliza Chrome. En relación con el anuncio de Opera Software a principios de año de que cambiaría a WebKit por medio de la base de código 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, buildsystem, ganchos del motor JavaScript V8, código de plataforma, etc.). [ cita requerida ]
WebCore es una biblioteca de diseño, renderizado y Document Object Model (DOM) para HTML y Scalable Vector Graphics (SVG), desarrollada por el proyecto WebKit. Su código fuente completo está licenciado bajo la Licencia Pública General Reducida de GNU (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 sea fácilmente referenciado por aplicaciones basadas en la API Cocoa ; las versiones posteriores también incluyen una abstracción de plataforma C++ multiplataforma , y varios puertos proporcionan más API. [ cita requerida ]
WebKit pasa las pruebas Acid2 y Acid3 , con una representación perfecta en píxeles y sin problemas de sincronización o suavidad en el hardware de referencia. [84]
JavaScriptCore es un framework que proporciona un motor de JavaScript para implementaciones de WebKit y proporciona este tipo de scripting en otros contextos dentro de macOS. [19] [85] JavaScriptCore se deriva originalmente de la biblioteca del motor de JavaScript de KDE ( KJS ) (que es parte del proyecto KDE) y de la biblioteca de expresiones regulares PCRE . Desde que se bifurcó de KJS y PCRE, JavaScriptCore ha sido 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ó a 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 optimizador Just-in-Time (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}}
: CS1 maint: unfit URL (link){{cite web}}
: CS1 maint: unfit URL (link){{cite web}}
: CS1 maint: unfit URL (link)Eliminado para KF6, la rama 'kf5' contiene el último estado mantenido.