写点什么

从零开始的新跨平台浏览器:Ladybird 正式起飞

  • 2022-09-14
    北京
  • 本文字数:1396 字

    阅读完需:约 5 分钟

从零开始的新跨平台浏览器:Ladybird 正式起飞

近期,SerenityOS 的发起者 Andreas Kling 在博客中宣布了他最新开源跨平台浏览器项目 Ladybird,Ladybird 浏览器基于 SerenityOS 的 LibWeb 和 LibJS 引擎,LibWeb 始于 2019 年开发,其 JavaScript 引擎 LibJS 则于 2020 年开发。

 

Andreas 写道,他和他的团队不再只是想开发一个基于 Linux 的浏览器,而是想开发一个跨平台的浏览器,“建造一些有朝一日可能对更多人有用的东西”。根据文章末尾的常见问题解答,Ladybird 已经在 Linux、macOS、Windows 和 Android 上运行。

 

浏览器的诞生



Ladybird 浏览器诞生于 7 月 4 日,最初是作为 LibWeb 浏览器引擎调试工具,随后 Andreas 决定继续推进并为它构建一个简单的 GUI 。然而两个月后,Andreas 发现自己使用 Ladybird 完成了一个 Web 浏览器的大部分开发工作,这也让他意识到可以将 SerenityOS 的浏览器引擎”调整为“跨平台浏览器引擎”。

 

基本架构

 

从时间上来看,LibWeb 和 LibJS 都是比较新的引擎。并且 Andreas 有开发 Qt 和 WebKit 项目的经历,从中也吸取了一部分经验。“但所有的代码都是新的”,他在博文中表示,浏览器和库都是用 C++ 编写,并且在 2-clause BSD 许可下是免费的。“没有人可以购买该项目,但欢迎志愿者。毕竟,SerenityOS 不是一个人的表演。这项工作只有在 SerenityOS 社区的支持下才能实现,该社区已经发展到数百名贡献者,并正在帮助开发操作系统和浏览器。”

 

当前浏览器主要组件:

 

  • 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 进行联网,因为多进程的 RequestServer 系统在 SerenityOS 之外还没有使用。同时,Ladybird 是单进程的,“所有这些都是暂时的,并且会随着时间而改变。”

 

仍处于开发初期

 

Andreas 坦言目前该浏览器仍处于开发初期,许多功能要么根本无法使用,要么存在错误,甚至还需要很长时间才能真正投入日常使用。“我们处于‘让它工作,让它变得更好,让它更快’中的‘让它工作’阶段中,因此,我们现阶段更多地还是在关注正确性和功能支持,而不是优化。”

 

Ladybird 已经通过了经典的 Acid3 标准测试,它涵盖了基本的 CSS 布局特性和各种 DOM/HTML API。但该测试并未涵盖最新 Web 标准及功能,如 CSS flexbox、CSS Gird 等。这意味着,即便在 Ladybird 中浏览最新网站的稳定性正在提高,但仍然会出现很多布局和兼容性问题。

 

例如用 Ladybird 浏览器浏览 Reddit 页面:

 


写在最后

 

传统观点认为,如果没有巨大的资本支出和人力、成本的付出,从头开始构建一个新的浏览器引擎几乎是不可能的,然而,Andreas 正在做的事情似乎反驳了这一观点。

 

同时 Ladybird 的出现,也增加了浏览器和浏览器引擎的多样性,不少开发者表示对此项目的期待,并希望此项目和其他浏览器项目能够成功,“这似乎是一项令人难以置信的艰巨任务,但他们似乎确实有乐观的前景。”

2022-09-14 14:286669

评论

发布
暂无评论
发现更多内容

【React】使用Next.js构建并部署个人博客

海底烧烤店ai

nuxt 博客开发 博客搭建 react rout 8月月更

[JS入门到进阶] 手写解析uin8数组的工具:解析二进制字节,太快太方便了!

HullQin

CSS JavaScript html 前端 8月月更

使用 ECK 在 Kubernetes 集群中管理 Elastic Stack

Se7en

学习 Go 语言数据结构:实现哈希表

宇宙之一粟

哈希表 8月月更

职场人的未来,GO!咱们上云办公

创意时空

乘云远航|共赢新征程,打造数字化供应链竞争力!

创意时空

牵手华为云,云时通SRM助力企业采购数字化升级!

创意时空

玩转KubeEdge保姆级攻略

乌龟哥哥

8月月更

浅谈JS发布订阅模式

海底烧烤店ai

JavaScript 前端 发布订阅模式 8月月更

C/C++模板类模板与函数模板区别,以及用法详解

CtrlX

c c++ 面向对象 模板方法 8月月更

一文快速上手 Nacos 注册中心+配置中心!

王磊

Java SpringCloud

飞向深空:ColorOS 超算平台带来性能之变

脑极体

上了NVMe的路,才能飙起全闪存的车

白洞计划

长安链RPC服务学习笔记

长安链

【实践】手把手带你实现JWT登录鉴权

迷彩

分布式 微服务 前后端分离 JWT 8月月更

长安链国密TLS设计和实现学习

zookeeper的选主过程

浅羽技术

zookeeper 分布式 ZooKeeper原理 8月月更

非关系型数据库Redis核心内容

浅羽技术

数据库 redis redis持久化 Memcache 8月月更

每日一R「20」网络编程(二)

Samson

学习笔记 8月月更 ​Rust

加速拥抱数字化,云时通打造全新数字中台!

创意时空

React Spring实战之API以及animated 组件的运用

恒山其若陋兮

8月月更

【数据结构实践】手把手带你快速实现自定义二叉树

迷彩

数据结构 算法 二叉树 二叉树遍历 8月月更

《数字经济全景白皮书》银行业RPA应用专题分析 发布

易观分析

RPA 金融 银行

一文详解产品经理与项目经理的区别

产品海豚湾

产品经理 职业发展 项目经理 产品设计与思考 9月月更

直播预告 | Homebrew 作者 Max Howell:如何打造杰出的开发者工具

思码逸研发效能

开源 研发效能 开发者工具 开发工具 科技

【JVM】HotspotJVM分代回收机制

小明Java问道之路

8月月更

【JVM】HotspotJVM对象的分配策略,栈上分配与TLAB

小明Java问道之路

8月月更

zookeeper的特点和应用场景

浅羽技术

zookeeper 分布式 观察者模式 注册中心 8月月更

Apache DolphinScheduler 简单任务定义及复杂的跨节点传参

白鲸开源

工作流调度 海豚调度 调度器 大数据调度 任务传参

【JVM】HotspotJVM中的对象及引用

小明Java问道之路

JVM 内存 引用 对象 8月月更

「35分钟」开发刷题功能

小鑫同学

前端 H5 数据分析、 分页查询 开发.

从零开始的新跨平台浏览器:Ladybird 正式起飞_开源_闫园园_InfoQ精选文章