SerenityOS 作者新作品:跨平台Web浏览器 Ladybird

出品 | OSC开源社区(ID:oschina2013)

SerenityOS 系统的作者 Andreas Kling 近日介绍了他开源的跨平台浏览器项目:Ladybird。

Ladybird 浏览器于今年 7 月 4 日诞生,最初 Ladybird 的开发是作为 SerenityOS 系统的  “LibWeb”  浏览器引擎调试工具,随后 Andreas 想给它构建一个简单的 GUI 。随着 Ladybird 的不断完善,两个月后,Andreas 发现自己完成了一个 Web 浏览器的大部分开发工作, Ladybird 已经算是一个跨平台的 Web 浏览器。

(Ladybird 浏览器视觉效果)

Ladybird 浏览器基于 SerenityOS 的 LibWeb 和 LibJS 引擎,LibWeb 于 2019 年开始开发,当时被称为 LibHTML ,其 JavaScript 引擎 LibJS 则于 2020 年开发。

基本架构

LibWeb 和 LibJS 都是新的引擎。作者有 Qt 和 WebKit 项目的开发历史,所以从中得到了一些灵感,但所有的代码都是新的,浏览器和库用则 C++ 编写。

这是当前浏览器堆栈的粗略细分:

  • Ladybird : 选项卡式浏览器 GUI 应用程序
  • LibWeb:Web 引擎,多种标准:HTML、DOM、CSS、SVG,……
  • LibJS:ECMAScript 语言、运行时库、垃圾收集器
  • LibGfx:2D 图形、文本渲染、图像格式(PNG、JPG、GIF,...)
  • LibRegex:正则表达式引擎
  • LibXML : XML 解析器
  • LibWasm:WebAssembly 解析器和解释器
  • LibUnicode:Unicode 支持库
  • LibTextCodec : 文本编码转换库
  • LibMarkdown : Markdown 解析器
  • LibCore:其他支持功能(I/O、日期时间、MIME 数据……)
  • Qt:跨平台 GUI 和网络

LibWeb 有一个 Platform 层,Ladybird 为事件循环、计时器、系统字体设置等注入 Qt 支持代码。目前 Ladybird 使用 Qt 进行网络任务,因为在 SerenityOS 之外还没有多进程 RequestServer 系统。同样,Ladybird 目前是单进程的,而 SerenityOS 浏览器是每个选项卡的进程。

完成度:较低

目前 Ladybird  可在 Linux、macOS、Windows (WSL) 和 Android 上运行,但它仍处于开发初期,许多网络平台的功能仍缺失或损坏,需要很长时间才能准备好进行日常浏览。

Ladybird 已经通过了经典的 Acid3 标准测试,它涵盖了一堆基本的 CSS 布局特性和各种 DOM/HTML API。

Acid3 测试是来自 Web Standards Project 的 Web 测试页面,用于检查 Web 浏览器是否符合各种 Web 标准的元素,尤其是文档对象模型 (DOM) 和 JavaScript。

但该测试并未涵盖最新 Web 标准及功能,如 CSS flexbox、CSS Gird 等。这就导致它会出现很多布局和兼容性问题。例如用 Ladybird 浏览器浏览 Reddit 页面:

明显看到,还存在很多错位、换行等渲染问题。

目前 Ladybird 其 GUI 及引擎代码都在 BSD-2-Clause 许可证下开源,代码托管在 GitHub 上:https://github.com/SerenityOS/ladybird

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取

推荐阅读

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击领取2022最新10000T学习资料

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...