Rust 语言 开源生态发展 2022 年度回顾 (rust语言为什么在中国不火)

Rust 语言 开源生态发展 2022 年度回顾 (rust语言为什么在中国不火)

作者:张汉东

全文目录:

本文是“Rust 语言 2022 年度回顾”的第二部分,包含了:Rust 开源生态发展。第一部分:top="1141.0625">Rust 开源生态发展

Rust 语言是开源的,其生态中开源项目也是必不可少的一部分。Rust 语言也是通用的,其应用覆盖诸多领域,我们将从以下几个领域来进行盘点。

本文分类梳理的开源项目,只是选举 Rust 生态中各个领域具有代表性和有潜力的项目,以此来观察 Rust 生态的发展。实际上,在撰写本文时,crates.io 上发布的 crate 数量已经达到了 10 万个,在 GitHub 上面的 Rust 开源项目也是不计其数,在 GitLab 社区也有很多的 Rust 开源项目,本文不可能罗列那么全,选取的项目仅供大家参考。

crates 行业系数(Industry Coefficient)

David Tolnay 根据 crates.io 中 crate 下载量统计了 crates 行业系数,从侧面反应 Rust crate 的应用状况。

行业系数的计算公式为:周二至周四下载量/周末下载量 - 总体平均水平(周一和周五有跨时区问题,所以未参与统计)

这个行业系数表明,如果一个 crate 在 工作日(周二到周四) 经常被下载,则系数为正,如果在 周末 经常被下载,则系数为负。比如,Serde 的工作日下载量与周末下载量的比率几乎与 crates-io 的总体比率相同。Prost 在工作日的下载量比例较大,而在周末较小,因为没有人在周末做 protobuf 相关的东西。周末被认为是 Rust 爱好者在“玩” Rust。

从 2022 年 9 月份对 90 天内超过 100 万下载量的某些 crate 的一次统计结果中,简单地得出一个粗略笼统的结论,仅供参考:

相关统计代码位于:,感兴趣可以自行执行代码进行统计。

操作系统

Rust for linux支持状况

Linus Torvalds 于 2022 年 12 月 11 日发布了Linux Kernel 6.1,作为 2022 年的最终主线内核版本。出于多种原因,这个版本很重要。也许最重要的是在未来几天内,主线内核中对 Rust 语言的初始支持,以获得更好的安全性和内存安全代码。越是从 C 转向 Rust,这势必越会减少内核漏洞的数量。

Linux Kernel 6.1 中最重要的变化是引入了初始的 Rust 框架代码。高达 12k 行的代码仅带来了 Rust 的基本基础设施。有了这个基础,新的驱动程序、子系统和内核模块有望通过 Rust 编程语言登陆内核。

主要支持包括以下四个方面:

一直领导 Rust for Linux 工作的 Miguel Ojeda 在 11 月份又发出了一组 28 个补丁,为内核提供了更多的 Rust 核心添加。很可能会在 Linux 6.2 合并窗口中及时看到这项工作。

Miguel (Rust for linux 核心开发者)对 2023 年 Rust-for-Linux 的期望:

嵌入式安全操作系统 TockOS 2.1 发布

TockOS 2.1 发布。 在 TockOS 迈向 2.0 时,许多核心的内核 API 被重新设计和重写。并且支持 11 个新的硬件平台,包括 RISC-V。

TockOS 的贡献者之一 Alexandru ,创办了公司,为汽车软件 OEM 和开发商提供安全操作系统和开发工具。

Redox 发布 0.8 版

Redox 在今年发布了 0.8 版。该版本确保真正的硬件正常工作,添加了 i686 支持,启用了音频和初步多显示器支持等功能,并且简化了引导和安装基础结构并使其更加健壮。

0.8 的一些重要改进摘要:

另外一件有趣的事是,Redox OS 在今年收到了一笔多达 400,000 美元的匿名捐款。匿名的方式使得目前无法使用。目前,Redox 作者正在与一个法律团队合作,具体确定OFAC 对 Tornado Cash 的制裁如何 适用于通过 Tornado Cash (米国数字货币交易平台)进行的这笔捐赠。目前,由于作者是米国公民,目前已阻止这笔捐款的转移,以遵守可能的 OFAC 制裁。如果作者被允许使用这笔捐款,他将在另一篇文章中描述它对 Redox OS 的意义。

KataOS : 用于进行机器学习的嵌入式设备的操作系统

谷歌今年宣布发布 KataOS,它是用于进行机器学习的嵌入式设备的操作系统。KataOS 从设计上就具备安全考虑,不但几乎完全是由 Rust 实现的,而且是建立在 seL4 微内核的基础之上,seL4 在数学上被证明是安全的,具有保证保密性、完整性和可用性。

KataOS 提供了一个可验证的安全平台来保护用户的隐私,因为应用程序在逻辑上不可能破坏内核的硬件安全保护,并且系统组件是可验证的安全。KataOS 也几乎完全用 Rust 实现,它为软件安全提供了一个强大的起点,因为它消除了整类错误,例如差一错误和缓冲区溢出。

当前的 GitHub 版本包括大部分 KataOS 核心部分,包括用于 Rust 的框架(例如 sel4-sys crate,它提供 seL4 系统调用 API),一个用 Rust 编写的备用根服务器(动态系统范围的内存管理需要) ),以及内核对 seL4 的修改,可以回收根服务器使用的内存。此外还与Antmicro合作,通过 Renode 为目标硬件启用 GDB 调试和模拟。

为了全面证明一个安全的环境系统,团队还为 KataOS 构建了一个名为 Sparrow 的参考实现,它将 KataOS 与一个安全的硬件平台相结合。因此,除了逻辑上安全的操作系统内核之外,Sparrow 还包括一个逻辑上安全的信任根,它是在 RISC-V 架构上使用OpenTitan构建的。然而,对于我们的初始版本,我们的目标是使用 QEMU 模拟运行的更标准的 64 位 ARM 平台。

最终目标是开源所有 Sparrow,包括所有硬件和软件设计。目前,仅在 GitHub 上发布 KataOS的早期版本。

drone-os: 嵌入式操作系统

是 嵌入式操作系统,旨在将不影响性能的现代开发方法带入嵌入式编程领域。开发者来自乌克兰,在 2022 年局势动荡下更新不多但是还在维护中,看上去工作重点在 Raspberry Pi Pico (RP2040) 的支持上面。

DroneOS 遵循以下设计原则

ros2_rust: ROS2 的 Rust 绑定

是一个用于编写与 ROS 2 集成的 Rust 机器人应用程序的库。ROS 2 是一个流行的开源机器人框架,用于各种领域(自动驾驶汽车、无人机、人形机器人等)。

ros2_rust 旨在使开发人员能够使用 Rust 编写 ROS 2 应用程序。目前尚未达到与 C++ 和 Python ROS 2 库同等的功能,但正在努力实现这一目标。

该库今年发布到了 0.3 版本。

随着 Rust for Linux 进入 Linux 6.1 ,Brandon Minor(传感器融合公司Tangram Vision的创始人兼 CEO)认为这将对机器人社区起到巨大的推动作用。

该网站记录了 Rust 在开源机器人解决方案方向的开源库。

Aero:现代、实验性的类 Unix 操作系统

灵感来自于 Linux 内核,遵循宏内核设计。支持现代 PC 特性,如 长模式、5 级分页和 SMP(多核)。Aero 并非一个 Linux 发行版,它运行自己的内核,不与 Linux 内核共享任何源码或二进制文件。

Rust 与 NuttX 操作系统

Apache NuttX 是一个实时嵌入式操作系统 RTOS,可在许多平台(如:8 位到 64 位平台)上移植,并且像 Linux 的小型版本一样工作(因为它符合 POSIX 标准)。现在,我们可以在 NuttX 上使用 Rust 创建更安全的嵌入式应用程序,也可以定制自己的驱动程序。详细请参考文章:。

将 Rust 的 std 移植到 rustix 上

是一个具有多个后端的系统调用封装库。它有一个原始的 Linux 系统调用后端,以及一个 libc 后端,其他后端也在开发中。Rustix 是为内存安全、I/O 安全和性能而设计的。

将 std 移植到 rustix 的第一个原因是 rustix 从 std 中剔除了很多不安全的块。与操作系统的对话仍然需要不安全,但在 rustix 中,Unsafe 块被集中在单个系统调用上。Rustix 还为系统调用提供了地道的 Result 错误处理。它还使用了 Rust 引用和切片,而不是原始指针。这些都使得阅读 std 的代码更加容易,并专注于系统调用的重要语义,而不会受到 libc API 机制的干扰。

rustix 也是向 Linux 上不依赖 libc 的 Rust 工具链迈出的一步。Rustix 能够从 Rust 代码中直接调用 Linux 系统。

Aya :专注于可操作性和开发者体验的 eBPFRust 库

不依赖于或。它完全是用 Rust 从头开始构建的,只使用crate 来执行系统调用。借助 BTF 支持并与 musl 链接,它提供了真正的一次编译,随处运行的解决方案,其中一个独立的二进制文件可以部署在许多 linux 发行版和内核版本上。在大多数环境中,Rust Nightly 是构建所需的唯一依赖项。rustc 不公开其内部 LLVM.so 库(即 aarch64)的某些环境需要安装共享的 LLVM 库。但是不需要 libbpf、clang 或 bcc!

基于 Aya 的项目的用户空间部分可以是异步的,同时支持 Tokio 和 async-std。Aya 可以加载 eBPF 程序,在异步上下文中对 eBPF 映射和 perf 缓冲区执行操作。如果想了解 Aya 更多信息可以查看。

数据库与数据分析

RedisJSON: Redis 官方支持 JSON

RedisJSON 是一个 Rust 实现的 Redis 模块,实现了 ECMA-404 JSON 数据交换标准作为原生数据类型。它允许从 Redis 键(文档)存储、更新和获取 JSON 值。主要特点:

Arrow2 与 Arrow>Apache Arrow 是大数据列式内存数据平台,有一个非常大的愿景:提供内存数据分析 (in-memory analytics) 的开发平台,让数据在异构大数据系统间移动、处理地更快。它采用 Cpp 实现,目前已经被业内大量使用。

Arrow 从 2.0 版本开始引入 Rust,从 4.0 开始 Rust 实现迁移到了独立仓库。随后社区也有人发布了。Arrow2 是 arrow-rs 的竞争者,两者的主要区别:

Arrow target="_blank">讨论是否将 top="7591.0625">surrealdb:文档图数据库

是一个可扩展的、分布式的、协作的、文档图(document-graph)云原生数据库。 适用于 Web、移动、无服务器、Jamstack、后端和传统应用程序。SurrealDB 通过简化数据库和 API 堆栈,消除对大多数服务器端组件的需求,并允许您更快、更便宜地构建安全、高性能的应用程序,从而缩短现代应用程序的开发时间。SurrealDB 既充当数据库又充当现代、实时、协作的 API 后端层。

目前客户端已支持 JavaScript、WebAssembly 和 Ebmer.js;服务端已支持 JavaScript、Node.js、Golang、Rust 和 Deno。其他语言也即将支持。

Cube: 无头商业智能平台

是 Rust 实现的一个开源无头商业智能( Headless Business Intelligence)平台。无头意味着没有前端展现层,只提供分析 API 。Cube 旨在与所有支持 SQL 的数据源一起工作,包括像 Snowflake 或 Google BigQuery 的云数据仓库,像 Presto 或 Amazon Athena 的查询引擎,以及像 Postgres 的应用数据库。Cube 有一个内置的关系型缓存引擎,为 API 请求提供亚秒级的延迟和高并发性。

Rust 实现的一些 K/V 存储引擎

greptimedb : 完全分布式的云原生时间序列数据库

greptimedb是一个使用 Rust 从头构建的完全分布式的云原生时间序列数据库。它提供多租户、开箱即用、完全托管的服务,每个用户都运行一个安全高效的数据生命周期:摄取、存储、分析、数据管理、可视化、异常检测、预测等。

GreptimeDB Cloud 服务主要由三个组件组成:

GreptimeDB 创始团队来自蚂蚁集团,更多信息可以参考GreptimeDB 官网。

Xline : 用于元数据管理的地理分布式 KV 存储

是基于的新共识协议实现的用于元数据管理的地理分布式 KV 存储。

跨数据中心网络延迟是影响地理分布式系统性能的最重要因素,尤其是在使用共识协议时。我们知道共识协议很流行用于实现高可用性。例如,Etcd 使用协议,该协议在最近开发的系统中非常流行。

Raft 虽然稳定且易于实现,但从客户端的角度来看,需要 2 个 RTT(往返时间, Round trip time)才能完成一个共识请求。客户端和领导服务器之间发生一个 RTT,领导服务器使用另一个 RTT 将消息广播到跟随者服务器。在地理分布式环境中,RTT 很长,从几十毫秒到几百毫秒不等,因此在这种情况下 2 个 RTT 太长了。

Xline 采用名为的新共识协议来解决上述问题。有关详细说明,请参阅论文。该协议的主要好处是在竞争不太激烈时减少 1 个 RTT。Xline 是第一个使用 CURP 的产品。

PingCAP Rust 重新实现的 Tidis 现在已开源

是 TiKV 的服务层,旨在提供基于 PingCAP 的 Redis 协议兼容的分布式存储服务。它实现了多种数据类型( string/hash/list/set/sortedset ),已被社区广泛使用。

之前是 go 语言实现的 1.0 版,现在已经完全用 Rust 重新设计和重写,以便获得更好的性能和更低的延迟。以及更重要的功能,例如 Lua 脚本、TLS 连接、锁优化等。

Databend v0.8 发布

v0.8 的开发于 3 月 28 号开始,在过去的几个月中,新增了几十万行代码,相当于把>

Databend 在今年也使用sqllogictest-rs成功地将 sqllogictest 框架(Sqllogictest是一个用于验证 SQL 数据库正确性的测试框架)从 Python 切换到 Rust 了 。

warpgate: 无需客户端的 Mysql 堡垒机

是一款 Rust 实现的适用于 Linux 的智能 SSH、HTTPS 和 MySQL 堡垒主机,不需要特殊的客户端应用程序。

该项目目前处于阶段,正在收集社区反馈。

BastionLab : 用于数据科学协作的 Rust 隐私框架

BastionLab专为敏感数据协作而构建。

由于安全和隐私问题,数据所有者和数据科学家之间的协作对于健康、金融或广告等高度监管的领域来说是一个巨大的挑战。远程协作时,数据所有者必须打开他们的整个数据集,通常是通过 Jupyter 笔记本。这种过于广泛的访问会造成巨大的隐私漏洞,因为允许的操作太多,这使得数据科学家能够从远程基础设施中提取信息(打印整个数据库、将数据集保存在权重中等)。

BastionLab 通过提供细粒度的访问控制解决了这个问题。它向数据所有者保证,数据科学家只能对他们的数据执行隐私友好的操作,并且只能与他们共享匿名输出。

BastionLab 确保数据所有者的远程数据永远不会被数据科学家直接访问。三个主要元素确保了这一点:

mvsqlite : 分布式 MVCC SQLite

项目是一个在 FoundationDB 上运行的分布式 MVCC SQLite。SQLite 是一个单写数据库——由于其基本的设计选择,这不会轻易改变。但是一组(N 个)sqlite 数据库是一个 N-writer 数据库。 mvsqlite 提供了必要的机制来执行可序列化的跨数据库事务,而无需额外的开销。

lnx : Elasticsearch 和 Aloglia 的快速替代品

是基于 tokio 和tantivy 搜索引擎构建的 Elasticsearch 和 Aloglia 的快速替代品。lnx 可以同时为数以万计的文档插入提供毫秒级索引(不再等待事物被索引!),每个索引事务和处理搜索的能力,就像它只是哈希表上的另一个查找一样。

同类型开源项目

ReadySet : 轻量级 SQL 缓存引擎

是一个用 Rust 编写的轻量级 SQL 缓存引擎,可帮助开发人员增强现有应用程序的性能和可扩展性。它可以预先计算经常访问的查询结果,并随着数据库中基础数据的变化自动使这些结果保持最新。ReadySet 与 MySQL 和 Postgres 兼容,无需更改代码即可采用。ReadySet 既充当 SQL 缓存又充当代理。

Readyset 在 2022 年融资了 2900 万美元。ReadySet 的产品起源于 Marzoev 和该公司的第二位联合创始人 Jon Gjengset 在麻省理工学院攻读博士学位时所做的研究。

网络服务

tokio 生态 2022 发展

在 2022 年进入了稳定维护期,今年的侧重点在于 tokio 生态:

Volo:国内首个 Rust 语言的 RPC 框架

是字节跳动服务框架团队研发的轻量级、高性能、可扩展性强、易用性好的 Rust RPC 框架,使用了 Rust 最新的 GAT 和 TAIT 特性。Volo 使用作为中间件抽象层,Motore 基于 GAT 设计。

在和 Kitex 相同的测试条件(限制 4C)下,Volo 极限 QPS 为 35W;同时,我们内部正在验证基于(CloudWeGo 开源的 Rust Async Runtime)的版本,极限 QPS 可以达到 44W。

Volo 框架更多说明参考Volo官方文档。

hyper 1.0 rc 版本发布

hyper 1.0 第一个候选版本发布,产品进入“抛光期”。在这个阶段 hyper 将从四个方面进一步完善以便顺利发布 1.0 版本“:

目前 HTTP/3 也正在被整合进 hyper 过程中。hyper 生态中还有中间件等值得被关注。

hyper 是一个非常完善且“正确的” HTTP 协议实现,广泛应用于各个项目中,有位网友在 reddit 上发帖问:像 hyper 这样的 HTTP 协议实现,声称是“正确的”,这到底意味着什么?

以下节选自高赞回答:

mmids: Rust 编写的多媒体收发系统

[mmids]((Ingestion and Distribution System)是一个功能强大、用户友好、开源的实时视频工作流服务器。

目前 mmids 能做什么?

github地址

zbus 2.0 发布

D-Bus 是一种在 Linux(尤其是桌面和嵌入式系统)上非常流行的进程间通信 (IPC) 机制。 而 zbus 是一个纯粹的 Rust 库,旨在使 D-Bus 处理尽可能简单,许多服务(例如 systemd、NetworkManager、Geoclue 等)都使用它。

而大家期待已久的 2.0 稳定版发布了!

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。