Servo:開源嵌入式瀏覽器引擎
原文 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頁面 。