2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

从零开始的新跨平台浏览器: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:288887

评论

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

Java创建对象的方法有哪些?

奈学教育

Java

高效程序员的45个习惯:敏捷开发修炼之道(7)

石云升

敏捷开发 晨会

架构设计复杂度来源

escray

学习 从零开始学架构 架构师预科班

花两个半月吃透这份Java手打面经,成功从外包上岸到京东

Java迁哥

Java 学习 腾讯 面试 资料

区块链交易所开发源码,数字货币交易所app开发

13530558032

Java中强、软、弱、虚四种引用详解

古月木易

Java

【API进阶之路】破圈,用一个API代替10人内容团队

华为云开发者联盟

内容 编辑 API 华为云 文本摘要

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

vivo商城前端架构升级-总览篇

vivo互联网技术

node.js Vue 大前端 架构设计

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 大前端 jenkins React

Java中强、软、弱、虚四种引用详解

奈学教育

Java

ArCall远比你想象的要强大的多

anyRTC开发者

WebRTC 在线教育 直播 RTC 安卓

数字货币钱包系统定制开发,区块链钱包源码

13530558032

JDK8 Unsafe.java 源码

Darren

源码 并发 CAS 代码注释 unsafe

【运维探讨】RPA落地实践,提升IT运维工作效能!

嘉为蓝鲸

RPA 运维自动化 标准化 系统运维 流程

分析HiveQL 生成的MapReduce执行程序

任小龙

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

LeetCode题解:84. 柱状图中最大的矩形,双循环暴力,JavaScript,详细注释

Lee Chen

大前端 LeetCode

9块钱,构建个私有网盘,关键不限速

华为云开发者联盟

网站 OBS 在线网盘 华为云 云存储

面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

小傅哥

数据结构 小傅哥 队列 ArrayDeque

实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

华为云开发者联盟

迁移 灾备 数据复制 云连接 数据同步

35K成功上岸华为商城事业部,只因学透了这几个开源的商城项目

Java迁哥

Java 华为 源码 资料 商城项目

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

拥抱K8S系列-01-CentOS7安装docker

张无忌

Docker centos 运维

Java创建对象的方法有哪些?

古月木易

Java

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务

鲲鹏迁移第一批吃螃蟹的人,践行技术国际化

华为云开发者联盟

鲲鹏920 服务器 华为云 ARM芯片 X86

JVM中unsafe.cpp源码

Darren

c++ 源码 JVM unsafe

程序员如何获取一份高薪工作?阿里P8大牛给你一些中肯的建议

Java迁哥

Java 华为 程序员 面试 资料

week12 homework

burner

区块链支付系统源码开发,USDT承兑支付平台

13530558032

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