WebKit

WebKit是一个开源的Web浏览器引擎(Web browser engine)。它被用于Apple Safari。

Webkit亦被使用于Apple iOS、BlackBerry Tablet OS及Amazon Kindle的预设浏览器。WebKit的C++应用程序接口提供了一系列的Class以在视窗上显示网页内容，并且实现了一些浏览器的特色，如使用者连结点击、管理前后页面列表及近期历史页面等等。

WebKit的HTML及JavaScript程式码源自KDE的KHTML及KJS函式库的一个分支，现已由KDE、Apple、Google、Nokia、Bitstream、BlackBerry及Igalia等独立开发。Mac OS、Windows、GNU/Linux以及其他类Unix系统操作系统，皆支援这个专案。2013年4月3日，Google宣布它建立了WebKit中WebCore元件的分支—Blink，Blink用于新版Google Chrome与Opera。

WebKit的WebCore及JavaScriptCore元件使用GNU宽通用公共许可证，其他元件则采用BSD许可证。

截至2013年3月7日，Webkit商标已被苹果公司在美国专利及商标局注册为其商标。

## 缘起

WebKit的程式码源自1998年所开发的KDE的HTML排版引擎KHTML及KDE的JavaScript引擎KJS的程式码。Apple的Don Melton于2001年6月25日开始了WebKit这个专案，当时WebKit仅为KHTML及KJS的复刻，Melton在电子邮件中向KDE开发者解释，KHTML及KJS比起其他技术有着更容易开发、更轻巧（少于140000行程式码）、更加干净的设计，以及更与标准相容的优势，KHTML及KJS将会透过连接器函式库（adapter library）的帮忙被移植到Mac OS X，并重新命名为WebCore及JavaScriptCore。JavaScriptCore在2002年6月，于KDE的邮件列表（mailing list）中首度发表，包含着苹果公司首次释出的部分。WebCore在2003年1月，首度发布于Macworld Expo中由苹果公司CEO Steve Jobs发表的Safari浏览器。当WebCore首次使用在第一个Safari的测试版本的同时，JavaScriptCore首次并以私有framework的方式包进Mac OS X v10.2，苹果公司将其使用在Sherlock软件。Mac OS X v10.3是第一个Apple发布内建WebKit的操作系统，尽管它已经被内建在10.2内了。

Apple表示，有些牵涉到Mac OS X的特定功能（例如：Objective-C、KWQ及Mac OS X特定函式）将会在KDE的KHTML中缺席，这行为被称为不同的发展策略。

### 开发分裂

由于这两个分支（KHTML及WebCore）有着不同的目的而进行开发，所以他们程式码互相补丁（patch）的难度越来越高。KHTML的开发者认为，他们不喜欢接受苹果公司对于KHTML的改变，并宣称两个组织的关系有些不好（a bitter failure），苹果提交他们相当大的补丁，其中包含相当大数目的改变，但是却缺少相关文件，并且经常包含着未来的扩充，然而这些补丁对于KDE的开发者而言，要整合回KHTML是相当困难的。此外，苹果公司要求开发者阅览Apple的程式码之前必须签署保密条款（non-disclosure agreements），甚至还不能存取苹果公司的bug数据库。

在公布分裂的期间，KDE开发者Kurt Pfeifle（pipitas）贴出了一篇文章，宣称KHTML开发者已经设法从WebCore移植许多（但非全部）Safari所改进的项目回KHTML，而他们一直都希望这些改进是来自于苹果公司。这篇文章让Apple开始联络KHTML的开发者，并讨论有关增进彼起关系的方法及未来的合作模式，事实上KDE专案确实有能力合并一些项目，来改进KHTML的渲染速度以及加入一些新的功能特色，包含Acid2渲染测试的改进。

自从新闻播报了fork事件之后，Apple在CVS发布了他们自己维护的WebKit版本，在他们发布代码后，Apple及KHTML开发者已经加深了合作关系，许多KHTML的开发者也成为了WebKit SVN代码库的审查（Reviewer）及提交者（Submitter）。

WebKit工作团队同时也逆转许多Webkit程式码当中，专为苹果特定的修正，并且实现了一个平台特定的抽象层，可使渲染的程式码于其他平台可以更顺利的运作。

在2007年7月，Ars Technica网站发布一篇文章，指出KDE开发团队将从KHTML转移到WebKit，再经由多年的整合，KDE开发平台4.5于2010年8月释出，它同时支援WebKit及KHTML，而KHTML的开发仍在继续。

### 开源

在2005年6月7日，Safari开发者戴夫·海厄特（Dave Hyatt）于他的blog宣布Apple将把Webkit开源（之前仅有WebCore及JavaScriptCore开源），并且开放了WebKit的CVS程式库以及bug数据库工具。这项消息由苹果公司软件工程的高阶副总（Senior Vice President）Bertrand Serlet于苹果公司2005年的Worldwide Developers Conference公开。

在2005年12月中，可缩放向量图形的支援被加入了标准版本，在2006年1月初，这项程式码从CVS转移至Subversion。

WebKit的JavaScriptCore及WebCore元件目前以GNU较宽松公共许可证方式授权，而其他的WebKit元件则是以BSD授权公开。

### 更进一步发展

在2007年一开始，开发团队开始实现层叠样式表（CSS）的扩充，包含动画、转换（transitions）以及2D和3D的转场（transform），这样的扩充在2009年W3C的标准中被列入草案。

在2007年11月，这项专案宣布，他们已经完成了HTML5媒体特色的支援，允许页面中以原生的方式嵌入影片，并且可以被script所控制。

在2008年6月2日，WebKit专案宣布他们重写了JavaScriptCore，被称为"SquirrelFish"，它是一个字节码直译器（Bytecode Interpreter），这项专案验后来变成SquirrelFish Extreme（SFX），它可将JavaScript编译为机器语言而不再需要直译器，这样的做法加速了JavaScript的执行，这项专案于2008年9月18日发布。一开始，SFX仅支援x86架构，于2009年1月底，SFX于OSX支援了x86-64架构，并且在该平台通过了所有的测试。

### 二次开发分裂

WebKit中WebCore元件被Chromium开源方案所采用，随着两边开发差异越来越大，苹果在WebKit的WebCore添加许多专有的代码（如Objective-C）Chromium用不到却要花时间去编译，反而拖累了Chromium开发及发展。Chromium的多进程架构（Multi-Process）难以合并入WebCore代码中，且苹果也不愿妥协采用，选择自行开发自己的WebKit2多进程架构。

因此Chromium的开发者由于希望在浏览器的开发上拥有更大的自由度，同时避免与上游冲突，更可透过移除Chrome没有使用的元件而简化自己的程式库，所以决定开发WebKit的WebCore分支版本Blink，于2013年4月3日释出，被用于基于Chromium的网页浏览器，如Microsoft Edge与Google Chrome等。

### WebKit2

WebKit2发布于2010年4月8日，WebKit2的目标是将元件抽象化，并提供更干净的网页渲染，它会利用从周围的界面或是应用程序的壳，建立一个环境使网页的内容（JavaScript、HTML、排版等等）将会在另外一个进程(Process)运行，比起WebKit，这个抽象化的做法打算令WebKit2可重复使用一个更简单的程序。因为WebKit2对比起WebKit有一个不相容的API，所以导致他的名字被改变为WebKit2。

目前WebKit2仅开放于Mac、Windows及MeeGo-Harmattan。

## 使用

<image>

<image>

作为渲染引擎使用的WebKit，被使用在Safari及Google Chrome浏览器于Windows、Mac OS X、iOS及Android平台（然而，Chrome仅仅使用WebCore，而JavaScript引擎及多工系统则自行开发）。其他的在Mac OS X底下的应用程序也使用WebKit，例如Apple的e-mail用户端软件Mail以及微软的个人信息管理系统Microsoft Entourage 2008，皆使用WebKit来渲染HTML内容的e-mail讯息。

Opera软件公司于2013年初宣布，他们将停止他们自行开发的Presto排版引擎，由Webkit专案取代，在未来将会以Webkit来取代，并贡献给Webkit专案。

### iOS

2007年6月29日，iPhone上市，WebKit通过Safari浏览器进入iOS平台，而且立即成为当时iOS平台唯一的排版引擎。

苹果公司成为了这一项目的领导者。

### 内建平台

新的网页浏览器已经内建了WebKit，例如Symbian手机的S60浏览器、BlackBerry浏览器（ver 6.0+）、Midori、Chrome浏览器、Android网页浏览器、PlayStation_3_系统软件4.0以上所使用的浏览器、KDE的Rekonq浏览器以及Plasma Workspaces都使用WebKit作为原生的网页渲染引擎。WebKit已经被OmniWeb、iCab及Web（前面所说的Epiphany）采用，并取代原有的渲染引擎，Sleipnir于2012年开始在他们的浏览器开发WebKit，并于2012年5月17日进入第三个Alpha阶段。Epiphany同时支援Gecko及WebKit，但他们的团队描述Gecko的发布周期及未来的开发计划将会令他们对于Gecko的支援太过笨重。HP的WebOS使用WebKit作为它应用程序执行时期的基础。Valve Corporation的Steam最新更新的界面，使用WebKit作为它界面的渲染以及内建的浏览器。WebKit在Adobe_AIR中被使用在渲染HTML及执行JavaScript，在Adobe Creative Suite CS5，WebKit用来渲染部分元件的使用界面。

截至2010年上半年，分析估计内建WebKit浏览器的移动设备已经达到3亿5千万，WebKit的市场份额已经达到36%，同等于Internet Explorer所使用的Trident/MSHTML引擎的市场份额，如果这个成长持续下去，使用WebKit的总和（Chrome、Safari以及智能手机/平板）于2012年底将会超过50%，而WebKit将会是市场的领导者。

### 移植

在Hyatt发布WebKit开源之后的那一周，Nokia宣布他们将移植WebKit到Symbian操作系统，并为S60开发一个基于WebKit的移动设备浏览器，现在已经被命名为Web Browser for S60，它被使用在Nokia、Samsung、LG及其他使用Symbian S60的移动电话。Apple也已经移植WebKit到iOS并将其运行于iPhone、iPod Touch及iPad，它被使用在这些装置的网页浏览器及电子邮件软件。Android移动电话平台也使用WebKit作为它网页浏览器的基础，而于2009年1月发布的Palm Pre使用WebKit作为它的界面。Amazon Kindle 3包含着一个以WebKit打造实验性质的浏览器。

在2007年6月，Apple宣布WebKit已经被移植到iOS，并作为Safari的一部分，还有一些正在进行中的项目，将WebKit移植到开源的操作系统Syllable、Haiku以及AROS Research Operating System（AROS）.。

WebKit也被移植到许多Toolkits使其支援多平台，例如GTK+ toolkit、Qt framework,、Adobe AIR、Enlightenment Foundation Libraries (EFL)以及Clutter toolkit。Qt Software（Digia所拥有）于Qt 4.4包含Qt port，Qt port的WebKit也可使用在Konqueror 4.1版本之后。在Qt底下的Iris Browser也使用WebKit。The Enlightenment Foundation Libraries (EFL)的移植还在进行（经由Samsung及ProFUSION），他们将专注在嵌入式及行动系统，并将其作为一个独立运行的浏览器、Widgets/Gadgets、文件阅读及修改软件。Clutter的移植是由Collabora所开放，由Bosch所赞助。

还有一个专案与WebKit同步（由Pleyo所赞助），被称之为Origyn Web Browser，他提供了一个多元的移植方式，将其移植到抽象的平台，目的是让移植到嵌入式或是轻量系统可以更快速简单。这个移植被使用在嵌入式装置，例如set-top boxes、PMP，而他已经被移植到AmigaOS、AROS及MorphOS，MorphOS 1.7是第一个支援HTML5媒体标签的Origyn Web Browser (OWB)。

### 其他平台

#### Windows

2008年3月18日，Safari 3.1 for Windows转正，解决了Windows平台下WebKit一直存在的部分兼容性问题。同年9月3日推出的Google Chrome使得这一平台进一步成熟。而在Windows Mobile战线，领先推出稳定版的是拓驰公司的Iris Browser。

Windows是除Mac OS X外另一个得到WebKit.org官方支持的版本。

#### Linux

2008年10月22日投入市场的Android，其内置浏览器Google Chrome Lite代表着脱胎于Linux的Webkit内核“回归”Linux平台。尽管WebKit的原型Khtml是由Qt写成，但Linux下当前最受瞩目的WebKit项目却是Gnome领导的WebKit/Gtk+。不过随着奇趣科技于2008年6月被Nokia收购，Qt方面也加快了WebKit的开发进程。目前，Google Chrome，Xfce的Midori，GNOME的Epiphany、KDE的Konqueror，Arora以及QupZilla是Linux系统下最流行的Webkit内核浏览器。

#### Symbian

2005年，诺基亚公司的S60团队成为手机端WebKit的先驱，他们将WebKit框架移植到了Symbian S60平台，作为S60第三版的浏览器内核。

### 分支

在2013年4月3日，Google宣布他将自行开发WebCore的分支，也就是Blink引擎。Chrome的开发者由于希望在浏览器的开发上拥有更大的自由度，同时避免与上游冲突，更可透过移除Chrome没有使用的元件而简化自己的程式库，所以决定开发WebKit的分支版本。同时Opera软件在同年稍早也宣布，他们将自有引擎转换到Chromium的程式库，在此时也同时转换到Blink的分支。根据这份声明，WebKit的开发者开始讨论移除Chrome相关程式码的可能性，以精简整个WebKit程式库。

## 元件

### WebCore

WebCore是一个由WebKit专案所开发的布局（Layout）、渲染（Rendering）及HTML和SVG的DOM函式库，完整的程式码皆由GNU宽通用公共许可证所授权，WebKit框架包装了WebCore及JavaScriptCore，并提供一个Objective-C应用程序接口来接介由C++所开发的WebCore渲染引擎及JavaScriptCore脚本引擎，透过Cocoa API就可以在应用程序中很简单的使用这些元件。之后的版本同时包含了一个跨平台的C++抽象平台，并且提供各种API使用。

WebKit通过Acid2及Acid3的测试，包含完美像素的渲染（pixel-perfect rendering）以及没有任何时间及不顺的问题。

### JavaScriptCore

JavaScriptCore是一个在WebKit中提供JavaScript引擎的框架，而且在Mac OS X作为其他内容的脚本引擎。JavaScriptCore最初是为KDE的JavaScript引擎（KJS）函式库及PCRE正则表达式函式库，JavaScriptCore从KJS及PCRE复刻之后，已比原先进步了许多，有了新的特色以及极大的效能改进。

在2008年6月2日，WebKit专案宣布，将被重写为"SquirrelFish"，它是一个字节码直译器，这个专案演变成SquirrelFish Extreme（简称为SFX，市场称之为Nitro），首次公开于2008年9月18日，它会将Javascript编译为原生的机器语言，不再需要字节码直译器，同时加速了JavaScript的执行效率。

### Drosera

Drosera是一个JavaScript调试工具，它被包含在每日编译的WebKit版本内。它被命名为茅膏菜属，这是一种食虫植物。Drosera目前已经被Web Inspector取代了。

## 现在使用WebKit引擎的浏览器

### 开源

- Midori：当前最新测试版0.1.5所用的引擎版本是WebKitGTK+ 1.1.13
- Epiphany：原使用Gecko，2.28版开始改用WebKit
- Arora：当前最新版本号是0.11.0，使用QtWebKit调用Webkit核心
- Falkon：当前最新版本号是1.3.5，使用QtWebKit调用Webkit核心

### 非开源

Avant Browser｜当前最新正式版2018 build 1采用Trident/WebKit/Gecko三引擎。

Lunascape｜当前最新正式版6.15.1采用Trident/WebKit/Gecko三引擎。

Safari｜当前最新版。

Orion｜当前最新版0.99.137beta。

Sleipnir｜当前最新正式版6.2.10采用WebKit引擎。所用的引擎版本是 Blink 537.36 (Chromium 64.0.3282.140)

搜狗高速浏览器｜当前最新正式版7.5.8.27113其2.0版开始采用Trident/WebKit双引擎。

傲游浏览器｜当前最新正式版5.1.6.3000。

QQ浏览器｜当前最新正式版9.6.11165.400腾讯公司的浏览器产品，采用Trident/WebKit双引擎。

## 基本资料

- 作者：KDE
- 开发者：苹果公司、Adobe、KDE、Igalia及其它开发者
- 发行日期：1998年11月4日（KHTML释出）；2005年6月7日（WebKit开源）
- 操作系统：跨平台
- 编程语言：C++
- 类型：排版引擎
- 许可协议：GNU LGPL v2.1（某些JavaScriptCore与WebCore元件中的档案）、BSD v2.0（大部分浏览器引擎）