Servo:开源嵌入式浏览器引擎

jopen 9年前

原文  http://www.infoq.com/cn/news/2015/06/Servo-Mozilla

嵌入式浏览器引擎可以嵌入其它应用程序,像常规Web浏览器一样展示内容,并允许开发者自定义用户体验。Mike Blumenkrantz是Enlightenment的发布经理,同时也是 EFL工具包 的核心开发者。近日,他 撰文 介绍了由Mozilla基金会和三星共同推动的开源嵌入式浏览器引擎项目Servo。

许多公司都使用了Web内容嵌入技术。比如,Rhythmbox、Kate、Eclipse等流行Linux应用程序、Microsoft Entourage、Apple Mail for Mac、Adobe的产品以及Valve的 Steam 客户端等等。然而,向应用程序嵌入Web内容的API却很少, WebKit 是最流行的一个。但它的问题是不稳定,开发者经常会因为需要与它的更新保持同步而不得不修改应用程序。 Blink 是WebKit的一个分支。它也有稳定性问题,而且只能用于C++。要解决这些问题,可以使用 Chromium嵌入式框架 (CEF)。该框架基于Blink浏览器引擎,但它实现了用户与底层引擎变化的隔离,并提供了基本的C API以及C++扩展。目前,Valve的Steam客户端以及Adobe的多种产品都使用了该API。

Servo浏览器引擎的目标是为开发者提供最大的灵活性。为了实现这个目的,它必须提供稳定的API和 ABI 。它使用Rust编写,这使它可以提供能够从C语言中直接调用的API。考虑到重新设计一个嵌入式Web API非常复杂,比如需要编写大量的文档,测试大量的框架以及大力的推广应用等,所以他们采用了一种不同的方式。

Servo实现了Chromium嵌入式框架的API。这意味着,正在使用CEF的开发者不需要对应用程序做任何修改就可以比较Blink和Servo引擎的性能,未来的开发者也不需要考虑另外一种浏览器API。这种实现方式主要包含两个方面的工作:

  • 确保“符号(Symbol)”完全覆盖:Servo嵌入式库可以钩连每个CEF函数调用。同时,任何时候分配的供外部使用的struct,其大小和成员位置必须与真正的CEF所分配的struct类似。符号列表可以借助Linux工具nm取得。
  • 尽可能准确的模拟每个方法调用的功能:这需要完全了解CEF的每个函数以及它如何连接到浏览器引擎。

目前,Servo尚处于起步阶段, 团队还非常小,项目还面临着一些问题,比如借助CEF提供的C++扩展跟踪C API执行。因此,Mike希望,感兴趣的开发者能够加入他们。更多信息请查看 GitHub页面