Rust 行业应用盘点
Rust 是一门通用的高级系统级编程语言,其应用领域基本可以同时覆盖 C/Cpp/Java/Go/Python 的应用领域。
具体而言,Rust 的应用领域目前覆盖到以下领域:
下面来盘点不同领域内国内外的 Rust 项目。通过提供代码量、团队规模、项目周期相关数据,希望可以让大家对 Rust 领域应用和开发效率能有一个比较直观的认识。
数据服务
数据服务领域,包括了数据库,数据仓储,数据流,大数据,分布式系统等。
TiKV(国内/开源/分布式数据库)
关键字:数据库/ 分布式系统/ CNCF
介绍
TiKV 是一个开源的分布式事务 Key-Value 数据库,专注为下一代数据库提供可靠、高质量、实用的存储架构。最初由 PingCAP 团队在 目前,TiKV 已经在知乎、一点资讯、Shopee、美团、京东云、转转等多行业头部企业得到上线应用。
TiKV 通过 Raft 一致性算法来实现数据多副本之间的一致性,本地采用了 RocksDB 存储引擎存储数据,同时 TiKV 支持数据自动切分和迁移。TiKV 的跨行事务最初参考 Google Percolator 事务模型,并进行了一些优化,提供快照隔离与带锁快照隔离,支持分布式事务。
2018 年 8 月被 CNCF 宣布接纳为沙箱云原生项目,在 2019 年 5 月从沙箱晋级至孵化项目。
代码与团队规模
TiKV 项目 包含 Rust 代码行数大约 30 万行(包含测试代码)。
TiKV 是全球性开源项目,可以从贡献者名单来查看团队规模。TiKV 组织中也包含了一些 Go/Cpp 项目,这个并不算在内,只统计参与 Rust 项目的人力规模。
主力开发:20 人左右。
社区贡献: 300 多人。
项目周期
TiKV 是作为 TiDB 的底层存储跟随 TiDB 演进。TiDB 为 Go 开发,TiKV 为 Rust 开发。
2016 年 1 月作为 TiDB 的底层存储引擎设计并开发 。
2016 年 4 月开源 发布第一版。
2017 年 10 月 16 日,TiDB 发布 GA 版(TiDB 1.0), TiKV 发布 1.0 。
2018 年 4 月 27 日,TiDB 发布 2.0 GA 版, TiKV 发布 2.0 。
2019 年 6 月 28 日,TiDB 发布 3.0 GA 版本, TiKV 发布 3.0 。
2020 年 5 月 28 日,TiDB 发布 4.0 GA 版本, TiKV 发布 4.0。
2021 年 4 月 07 日,TiDB 发布 5.0 GA 版本, TiKV 发布 5.0。
小评
有些朋友可能比较关注 Rust 开发效率如何,并且想对其量化,尤其是想对比 C/ Cpp / Go 等其他语言的开发效率。
私以为量化开发效率是非常困难的,尤其是和其他语言比较的量化。我们不妨换个角度来看这件事,比如,从敏捷项目迭代管理来看这件事。如果一门语言,可以满足日常的敏捷开发迭代需求,可以帮助完成产品的进化,那足以说明这门语言的开发效率了。
据了解,PingCAP 中 Go 开发人员是 Rust 开发人员的四五倍之多,当然工作量也差不多是这样的比例。从上面的数据,我们可以看得出来, Rust 项目(TiKV)依然可以稳步跟得上 Go 项目(TiDB)的迭代节奏,说明 Rust 的开发效率还是足以胜任现代化开发需求。
TensorBase (国内/开源/实时数据仓库)
关键字:实时数据仓库/ 创业/ 天使轮
介绍
TensorBase 是金明剑博士于 2020 年 8 月启动的创业项目,从一个现代的全新视角出发,用开源的文化和方式,重新构建一个 Rust 下的实时数据仓库,服务于这个海量数据时代的数据存储和分析。TensorBase 项目目前已获得世界知名创业投资加速机构的天使轮投资。
代码与团队规模
因为 TensorBase 是构建于 Apache Arrow 和 Arrow DataFusion 之上,所以代码统计排除掉这两个项目的依赖。
TensorBase 核心代码行数 54000 多行。
团队规模:
主力开发: 1 人。
社区贡献:13 人。
因为是新项目,开源社区还在建设中。
项目周期
TensorBase 以时间为节奏发版,而非语义版。 迭代周期预计 一年一个大版本,一月一个小版本。
从 2021 年 4 月 20 正式发版,到最近 6 月 16,保持这个节奏。
Timely Dataflow (国外/开源/实时数据流)
关键字:Dataflow/ 分布式系统/创业
介绍
Timely Dataflow 是 基于微软 这篇 Timely Dataflow 论文: 《Naiad: A Timely Dataflow System》的 现代化 Rust 实现。是 clockworks.io 公司的开源产品。
在分布式系统中对流式数据进行复杂的处理,比如多次迭代或者递增计算是非常困难的。Storm, Streaming Spark, MillWheel 都不能很好的适应各种应用复杂的需求。Naiad 通过引入 timestamp 的概念,给出了一个非常 low-level 的模型,可以用来描述任意复杂的流式计算。
dataflow 系统包罗万象,MapReduce,Spark 都可以算是其中代表。Timely dataflow 给出了一个完全基于时间的抽象,统一了流式计算和迭代计算。当你需要对流式数据并行处理且需要迭代控制的时候,可以使用 Timely Dataflow 。
代码与团队规模
Rust 代码量 大约 13000 行。
团队规模:
主力开发:4 人。
社区贡献:30 多人。
项目周期
2017 年 9 月 7 号,0.3.0 版本。
2018 年 6 月 28 号,0.6.0 版本。
2018 年 9 月 16 号,0.7.0 版本。
2018 年 12 月 3 号,0.8.0 版本。
2019 年 3 月 31 号,0.9.0 版本。
2019 年 7 月 10 号,0.10.0 版本。
2021 年 3 月 10 号,0.12.0 版本。
基本上 三个月 出 一个 小版本,除了 Timely Dataflow 之外该团队同时还维护一个构建于 Timely Dataflow 之上的 Differential Dataflow ,和 Timely Dataflow 同步迭代。
Noria (国外/学术研究/开源/数据库)
关键字:数据库/ 学术论文项目
介绍
Noria 是一种新的流式数据流系统,旨在作为基于 MIT Jon Gjengset 的博士学位论文的重型 Web 应用程序的快速存储后端,也参考了 OSDI'18 的论文。 它类似于数据库,但支持预计算和缓存关系查询结果,以便加速查询。 Noria 自动将缓存的结果保持为底层数据,存储在持久性基础表中。 Noria 使用部分状态数据流来减少内存开销,并支持动态,运行时数据流和查询更改。
代码与团队规模
Rust 代码行数大约 59000 多行。
团队规模:
主力贡献者:2 人
社区贡献者:21 人
项目周期
因为是个人学术研究项目,所以发布周期没有那么明显。
项目周期 2016 年 7 月 30 ~ 2020 年 4 月 30,一共 5000 多 commit。
Vector (国外/开源/数据管道)
关键字:数据管道/分布式系统/创业
Vector 是 Timer 公司构建的一款高性能的、端到端的(代理和聚合器)可观察性数据管道。它是开源的,比该领域(Logstash、Fluentd 之类)的所有替代方案快 10 倍。目前像 豆瓣、checkbox.ai、fundamentei、BlockFi、Fly.io 等公司使用了 Vector 。 点击此处查看官方性能报告,点击此处查看目前生产环境中使用 Vector 的公司。
代码与团队规模
代码量大约 18 万行 Rust 代码。
团队规模:
主力开发:9 人
社区贡献:140 人
项目周期
2019 年 3 月 22,初始版本发布。
2019 年 6 月 10,0.2.0 版本发布
2019 年 7 月 2,0.3.0 版本发布
2019 年 9 月 25,0.4.0 版本发布
2019 年 10 月 11,0.5.0 版本发布
2019 年 12 月 13,0.6.0 版本发布
2020 年 1 月 12,0.7.0 版本发布
2020 年 2 月 26,0.8.0 版本发布
2020 年 4 月 21,0.9.0 版本发布
2020 年 7 月 23,0.10.0 版本发布
2021 年 3 月 12,0.11.0 ~ 0.12 版本发布
2021 年 4 月 22,0.13.0 版本发布
2021 年 6 月 3,0.14.0 版本发布
Arrow-rs (国外/开源/大数据标准)
关键字: 大数据/数据格式标准/Apach
arrow-rs 是 Apache Arrow 的 Rust 实现。Apache Arrow 是 一种适合异构大数据系统的内存列存数据格式标准。它有一个非常大的愿景:提供内存数据分析 (in-memory analytics) 的开发平台,让数据在异构大数据系统间移动、处理地更快。
Arrow 从 2.0 版本开始引入 Rust ,从 4.0 开始 Rust 实现迁移到了独立仓库 arrow-rs 。
Arrow 的 Rust 实现实际上由几个不同的项目组成,包括以下几个独立 crate 和 库 :
arrow,arrow-rs 核心库,包含在 arrow-rs 中。
arrow-flight ,arrow-rs 组件之一,包含在 arrow-rs 中。
parquet,arrow-rs 组件之一,包含在 arrow-rs 中。在大数据生态内,Parquet 是最为流行的文件存储格式。
DataFusion,一个可扩展的内存查询执行引擎,使用 Arrow 作为其格式。
Ballista,一个分布式计算平台,由 Apache Arrow 和 DataFusion 驱动,包含在 DataFusion 中。
代码与团队规模
arrow-rs 各相关组件加起来,Rust 代码量 大约 18 万行。
团队规模:
主力开发:大约 10 人
社区贡献: 550 多人
项目周期
项目 DataFusion 在 2016 年就开始构建了,后来进入了 Apache Arrow 项目。
以 arrow-rs 4.0 开始算:
2021 年 4 月 18 ,版本 4.0 发布。
2021 年 5 月 18,版本 4.1 发布。
2021 年 5 月 30, 版本 4.2 发布。
2021 年 6 月 11, 版本 4.3 发布。
InfluxDB IOx (国外/ 开源/时序数据库)
关键字:时序数据库/分布式
InfluxDB IOx,是 InfluxDB 的下一代时序引擎,使用 Rust + Aarow 来重写。
现有设计主要有以下几个致命性问题:
无法解决时间线膨胀的问题
在云原生环境下,对内存管理要求比较严格,这意味 mmap 不在适用,而且 InfluxDB 需要支持无本地盘的运行模式
由于索引与数据分开存储,导致高效的数据导入导出功能难以实现
上述这三个问题都是现有设计的核心之处,因此要想支持现阶段需求,重写是个比较好的选择。
代码与团队规模
InfluxDB IOx 代码量大约是 16 万行 Rust 代码。
团队规模:
主力开发: 5 人
社区贡献: 24 人
项目周期
该项目从 2019 年 11 月开始立项,但截至到今天此项目还非常早期,它还没有准备好进行测试,也没有任何构建或文档。
但是从 GitHub 活动状态来看,开发状态还非常积极。主要的开发工作都是在 2021 年开始的。
CeresDB (国内/商业/时序数据库)
关键字:时序数据库
介绍
CeresDB 是蚂蚁集团研发的一款 TP/AP 融合时序数据库,满足金融时序、监控、IOT 等场景下的海量时序数据的存储、多维查询下钻和实时分析需求。有开源计划,但目前暂未开源。
团队规模
目前数据库开发大约 8-10 个人。
其他信息还未可知。
tantivy (国外/开源/全文检索)
关键字:全文检索/ lucene
tantivy 是一个由 Apache Lucene 启发的全文搜索引擎库,用 Rust 实现。
tantivy 性能卓越,这里有一个基于 Rust + Tantivy + AWS 构建的应用 :提供十亿网页搜索并生成常见单词云。
代码及团队规模
代码量大约为 50000 行 Rust 代码。
团队规模:
主力开发:1 人
社区贡献:85 人
项目周期
项目自 2016 年立项,迭代周期为平均一月一个小版本发布,目前发布到 0.15.2 版本。
Rucene (国内/开源/搜索引擎)
关键字:知乎/ lucene
介绍
Rucene 是知乎团队开源的一款基于 Rust 实现的搜索引擎。Rucene 不是完整的应用程序,而是可以轻松用于将完整文本搜索功能添加到应用程序的代码库和 API。它是对 Apache Lucene 6.2.1 项目的 Rust 移植。
代码及团队规模
代码量大约为 10 万 行 Rust 代码。
团队规模:
主力开发: 4 人
社区贡献: 0 人
项目周期
可能因为是公司内部项目开源化,目前没有迭代出具体语义版本。在知乎内是用于生产环境的。
其他一些项目
libp2p-rs,是一个模块化和可拓展的网络堆栈,专注于传输协议无关,模块化和可移植编码,最终实现无论设备所处的环境、运行的协议如何,libp2p 都能让设备的互联成为现实。由国内 Netwarps 团队开发,该团队是一个致力于实现去中心化网络和存储技术的创业团队,目标在于使用去中心化技术支撑各类 IOT 应用,以及保障数据安全。基于此目标,Netwarps 开发了去中心化文件存储系统(DFS)和去中心化计算平台(DCP)。
云原生
云原生领域包括:机密计算、Serverless、分布式计算平台、容器、WebAssembly、运维工具等
StratoVirt (国内/开源/容器)
关键字:容器/ 虚拟化/ Serverless
StratoVirt 是 华为 OpenEuler 团队研发的 基于 Rust 的下一代虚拟化平台。
Strato,取自 stratosphere,意指地球大气层中的平流层,大气层可以保护地球不受外界环境侵害,而平流层则是大气层中最稳定的一层;类似的,虚拟化技术是操作系统平台之上的隔离层,既能保护操作系统平台不受上层恶意应用的破坏,又能为正常应用提供稳定可靠的运行环境;以 Strato 入名,寓意为保护 openEuler 平台上业务平稳运行的轻薄保护层。同时,Strato 也承载了项目的愿景与未来: 轻量、灵活、 安全和完整的保护能力。
StratoVirt 是计算产业中面向云数据中心的企业级虚拟化平台,实现了一套架构统一支持虚拟机、容器、Serverless 三种场景,在轻量低噪、软硬协同、安全等方面具备关键技术竞争优势。StratoVirt 在架构设计和接口上预留了组件化拼装的能力和接口,StratoVirt 可以按需灵活组装高级特性直至演化到支持标准虚拟化,在特性需求、应用场景和轻快灵巧之间找到最佳的平衡点。
代码与团队规模
代码量大约是 27000 行 Rust 代码。
团队规模:
主力开发:4 人。
社区贡献:15 人。
项目周期
2020-09-23,发布 0.1.0 版本。
2021-03-25,发布 0.2.0 版本。
2021-05-28 ,发布 0.3.0 版本。
Firecracker (国外/产品)
关键字: 容器/ Serverless/ FaaS
Firecracker 由 AWS 发布并将 firecracker 开源, 它的定位是面向 Serverless 计算业务场景。 Firecracker 本质上是基于 KVM 的轻量级的 microVM, 可以同时支持多租户容器和 FaaS 场景。 Security 和 Fast 是 firecracker 的首要设计目标。 它的设计理念可以概括为:
基于 KVM
精简的设备集(极简主义)
基于 Rust 语言(Builtin Safety)
定制的 guest kernel(快速启动)
优化内存开销(使用 musl c)
Firecracker 使用了极为精简的设备模型(仅有几个关键的模拟设备),目的是减少攻击面已提升安全性。 同时这 irecracker 使用了一个精简的内核(基于 Apline Linux),这使得 Firecracker 可以做在 125ms 内拉起一个虚拟机。 Firecracker 使用 musl libc 而不是 gnu libc,能够将虚拟机的最低内存开销小到 5MB。
代码及团队规模
代码量大约为 75000 多行。
团队规模:
主力开发:7 人
社区贡献:140 人
项目周期
从 2018 年 3 月 5 号 发布 0.1.0 开始,基本上是每个月发一个小版本。
截止到上个月,刚发布了 0.24.0 版本。
Krustlet (国外/产品)
关键字: Kubernetes/ WebAssembly/ 容器
介绍
微软 Deis Labs发布了Krustlet,它是使用 Rust 实现的一种 Kubernetes kubelet。它监听 Kubernetes API,以获取新的 Pod 请求(在集群中运行基于 WASI 的应用程序),只要请求事件与节点选择器是匹配的。因此,要在 Krustlet 节点上运行应用程序,用户可以使用 taints、tolerations 和节点选择器。此外,用户必须为应用程序生成 WebAssembly 二进制文件。如果应用程序是用 C 语言开发的,就用clang,如果应用程序是用 Rust 开发的,就用cargo。然后,用户必须使用wasm-to-oci打包,并将容器镜像推送到容器注册中心。要部署应用程序,用户需要定义一个 Kubernetes 清单,其中包含 tolerations。
目前该项目还未到 1.0,有很多实验性特性,但是它的存在证明了 WebAssembly 在容器方面的应用方向。但现在 微软加入了 字节码联盟 ,该项目也会连同字节码联盟的其他成员,一起发展 WebAssembly,特别是即将到来的 WASI 规范工作和模块链接。
代码及团队规模
代码量大约为 21000 多行。
团队规模:
主力开发: 7 人
社区贡献: 32 人
项目周期
自从 2020 年 4 月 7 日,0.1.0 发布以来,大约每一两个月发布一次新版本,目前发布到 0.7.0 版本。
团队有计划在未来几个月内达到 1.0 版本。
linkerd2-proxy (国外/产品)
关键字: 服务网格/ k8s
介绍
Linkerd 算是 服务网格的鼻祖,但是由于 Linkerd-proxy 运行需要 Java 虚拟机的支持,在启动时间、预热、内存消耗等方面,相比起晚它半年发布的挑战者 Envoy 均处于全面劣势。后来才重写了 Linkerd2 。
Linkerd2 (曾命名为 Conduit) 是 Buoyant 公司推出的下一代轻量级服务网格框架。与 linkerd 不同的是,它专用于 Kubernetes 集群中,并且比 linkerd 更轻量级(基于 Rust 和 Go,没有了 JVM 等大内存的开销),可以以 sidecar 的方式把代理服务跟实际服务的 Pod 运行在一起(这点跟 Istio 类似)。
linkerd2-proxy 是 Linkerd2 中的底层代理。代理可以说是服务网格中最关键的组件。它可以随应用程序的部署而扩展,因此低附加延迟和低资源消耗至关重要。它也是处理应用程序所有敏感数据的地方,因此安全性至关重要。如果代理速度慢、臃肿或不安全,那么服务网格也是如此。使用 Rust 重写后,Linkerd2-proxy的性能与资源消耗方面都已不输 Envoy。
Rust 是 Linkerd2-proxy 的唯一选择。它提供了闪电般的性能、可预见的低延迟和我们知道服务网格代理需要的安全属性。它还提供了现代语言特性,如模式匹配和富有表现力的静态类型系统,以及工具,如内置的测试框架和包管理器,使在其中编程变得非常愉快。
Linkerd2-proxy 构建在 Rust 异步生态之上,使用了Tokio, Hyper, and Tower 等框架和库。
代码及团队规模
代码量大约为 43000 多行。
团队规模:
主力开发:3 人。
社区贡献:37 人。
项目周期
目前该项目已经是 V2.148.0 版本。发布周期大约是每周一个小版本。
Lucet (国外/产品)
关键字: Faas/ Serverless/ WebAssembly / Compiler
Lucet 是一个本机 Webassembly 编译器和运行时。 它旨在安全地在您的应用程序内执行不受信任的 WebasseMbly 程序。由 Fastly 公司开发,属于 字节码联盟 的子项目。Fastly 于 2020 年从 Mozilla 招募了 WebAssembly Server side 团队,目前 lucet 团队已经和 wasmtime 团队合并。
Fastly 庞大的 CDN 业务催生了它们进军边缘计算的想法,并逐渐成为其中最具竞争力和投入度最高的头部公司。
关于边缘计算,另外一家头部公司是 Cloudflare(NET.US)。从技术角度看,Fastly 和 Cloudflare 在其无服务器边缘计算解决方案中采用了两种不同的方法。
Cloudflare 选择在 Chromium V8 引擎上构建其解决方案。这使得他们可以利用 Google(GOOG.US) Chrome 团队已经完成的工作,在 2018 年便将边缘计算产品快速推向市场。
这是对当时由云供应商(如 Amazon(AMZN.US) Lambda)提供的无服务器解决方案的重大改进。Cloudflare 的工作者将冷启动时间减少了 100 倍,进入到毫秒阶段。并将内存使用量减少了 10 倍,从而可以更有效地利用硬件资源。
但 Fastly 决定不依赖现有技术来进行无服务器计算,例如可重复使用的容器或 V8 引擎,而是决定全心投入 WebAssembly,并构建了自己的 Lucet 编译器和运行时,对性能、安全性和紧凑性进行了优化。
自 2017 年以来,Fastly 一直在幕后进行这项工作,它为 Compute@Edge 产品线提供了坚实的基础,该平台现在为多个客户运行生产代码。
Lucet 将 WebAssembly 编译为快速、有效的二进制文件以便执行,还可以通过内存分配来增强安全性,并且不会从先前的请求中产生任何残留。Lucet 还包括一个经过严格优化的简化运行时环境,Fastly 团队在该环境上花费了大部分开发时间。结果获得了比 V8 引擎更好的性能。
Fastly 冷启动时间完全进入微秒级别--官方宣称为 35 微秒。这至少比 V8 引擎快 100 倍,后者需要 3-5 毫秒才能启动(3,000 到 5,000 微秒)。
同样,由于 Lucet 仅包含运行已编译的汇编代码所需的代码模块,因此它只需要几千字节的内存。这大约是 V8 引擎使用的 3MB 的千分之一。
代码与团队规模
lucet 代码量为 29000 多行, wasmtime 总代码量为 27 万多行。
团队规模:
主力开发 : 16 人。
社区贡献:200 多人 (wasmtime 贡献者居多)
项目周期
lucet 目前进入维护期,wasmtime 在高速重构。
评价迭代周期为 每个月发一个小版本。
wasmcloud (国外/开源/产品)
关键字: WebAssembly/ 分布式计算
介绍
WasmCloud 运行时可以用于云、浏览器和嵌入式等场景。wasmcloud 是一个基于 WebAssembly 的分布式计算平台。比较有创新的地方在于,它制定了一个 waPC 标准,用于 Guest 和 Host 的安全过程调用,来解决当前 WASI 等特性不完善的问题。
代码及团队规模
代码量大约为 11000 多行 Rust 代码。
团队规模:
主力开发:2 人。
社区贡献:11 人。
项目周期
该项目从 2021 年 2 月 17 启动,迭代周期大约是每两周一个小版本。
Habitat (国外/开源/运维工具)
关键字:Chef/ DevOps/ 运维工具
介绍
Habitat 让应用团队能够在任何环境中构建、部署、管理任何应用 ,不管是传统的数据中心,还是容器化的微服务。
“Lift & Shift” 遗留应用到现代平台 。把已有的、对商业至关重要的应用迁移到现代平台上对许多机构来说 是一个痛点。
通过云原生(云、容器)的策略来交付 应用 。许多机构在移居和部署云原生平台的 过程中备受阻碍。
特点:
Habitat 把管理界面和应用构建在一起,使得自 动化更加简便。
Habitat Operator:让你的所有应用仅需一个 Kubernetes Operator,不需 要每个应用都有特制的 Operator。
不管你的应用在不在 Kubernetes 上,Habitat 的 Open Service Broker 都能通过 Kubernetes 的原生界面让它们共存。
代码及团队规模
代码量大约为 74000 行 Rust 代码。
团队规模:
主力开发:5 人。
社区贡献:140 人
项目周期
迭代周期为每周一个小版本,目前版本为 1.6.342。
其他一些项目
DatenLord 是用 Rust 实现的新一代开源分布式存储,面向云原生场景提供高性能存储解决方案。为了提高 IO 性能,DatenLord 采用绕过内核 (bypass Kernel) 的方式,主要在用户态实现 IO 功能,避免内核执行 IO 任务带来的额外开销,从而实现高性能分布式存储。Datenlord 是国内创业团队,点此查看更多信息。
Datafuse,是一种实时数据处理和分析 DBMS,基于 Apache Arrow-rs 开发,受 ClickHouse 启发。该项目属于 Datafuse labs,是由中国开发者领头的项目,但不清楚公司是在国内还是国外。
操作系统
操作系统领域包括使用 Rust 实现的各种操作系统。
Rust for Linux (国外/ Rust 进入 Linux 支持项目 )
关键字: Linux
介绍
Rust for Linux 项目旨在推动 Rust 成为 Linux 内核第二编程语言。
Linux 内核是现代互联网的核心,从服务器到客户端设备。它处于处理网络数据和其他形式的输入的第一线。因此,Linux 内核中的漏洞会产生广泛的影响,使人们、组织和设备的安全和隐私面临风险。由于它主要是用 C 语言编写的,而 C 语言不是内存安全的,所以内存安全漏洞,如缓冲区溢出和使用后赋值,是一个持续的问题。通过使 Linux 内核的部分内容用 Rust 语言编写成为可能,这是内存安全的,我们可以完全消除某些组件的内存安全漏洞,比如驱动程序。
当前进展:Google 赞助 且 由 ISRG 组织雇佣 Miguel Ojeda (核心开发),让他全职从事 Rust for Linux 和其他安全工作,为期一年。希望能通过让他全职从事这项工作,为支持数字基础设施尽一份力。
团队规模
核心开发: 1 ~ 6 人。
暂未有其他信息。
Coreutils
关键字: GNU/ Shell/ Rust for Linux
介绍
Coreutils 是 GNU Shell 的核心实用程序的 Rust 实现。
代码及团队规模
代码量大约为 77000 行 Rust 代码。
团队规模:
主力开发:8 人
社区贡献:250 人
项目周期
项目于 2020 年底启动,迭代周期平均一月一个小版本,目前 0.0.6 版本。目前状态,足以通过 GNOME 启动 Debian 系统。
Occulum (国内/开源/TEE 库操作系统)
关键字: 机密计算/ 可信计算/ TEE / 库操作系统
Occulum 是蚂蚁开源的 TEE 操作系统,也是 CCC 机密计算联盟中第一个由中国公司发起的开源项目。
Occlum 提供 POSIX 编程接口,支持多种主流语言(C/C++, Java, Python, Go, Rust 等),支持多种安全文件系统。可以说,Occlum 提供了一个兼容 Linux 的 Enclave 运行环境,使得机密计算可以轻松支持已有的应用,也使得机密应用开发者复用原有开发技能。Occlum 不但在工业界场景中得到了广泛的应用,而且也在系统顶会 ASPLOS 2020 发表了学术论文,代表了机密计算业界的领先水平。
从架构上来看,Occlum 不但提供基本的类似 Linux 的操作系统能力,而且提供一个类似 Docker 的用户使用接口,比如这里的 Occlum build 和 Occlum run 等都跟 docker 的命令类似。
代码与团队规模:
Occulum 代码量大约 28000 多行。
团队规模:
主力开发: 5 人。
社区贡献:22 人。
项目周期
迭代周期是每六周发一个新版。
rCore 和 zCore (国内/ 教育/ 学术/ 开源/ 操作系统)
关键字: 清华大学/ rCore/ zCore/ 操作系统/ 教学
介绍
rCore 是用 Rust 重新实现的 Linux 内核,诞生于 2018 年,目前已在清华计算机系的操作系统教学实验中试点应用。
zCore 是用 Rust 语言重新实现的 Zircon (Google Fuchsia OS 的微内核)微内核。它运行在内核态,对外提供与 Zircon 完全相同的系统调用,因此能够运行原生的 Fuchsia 用户程序。不仅如此,它还可以作为一个普通的用户进程运行在 Linux 或 macOS 的用户态,我们一般把这种模式称为 LibOS 或 User-Mode OS。你甚至无需安装 QEMU 模拟器,只需装上 Rust 官方工具链,就可以编译运行体验 zCore!
一些相关学习资源:
代码及团队规模
rCore 代码量大约为 26000 行 Rust 代码,zCore 代码量大约为 27000 行 Rust 代码。
团队规模:
主力开发:3~5 人
社区贡献:30 人左右
项目周期
两个项目都已进入维护期,没有对外发布版本。
Redox (国外/ 开源/ 操作系统)
关键字:操作系统
介绍
Redox 是一个用Rust语言编写的类 UNIX 操作系统 , 它的目标是把 Rust 语言的创新带入到一个现代的微内核和全系列的应用程序。Redox 幕后公司应该是 System 76 公司。主要项目放在 GitLab 中。
代码及团队开发
代码量目前大约为 134 万行 Rust 代码,算得上是 Rust 生态中重量级项目了。
团队规模:
主力开发: 21 人
社区贡献:79 人。
项目周期
Redox 从 2016 年开始立项,直到 2017 年 0.3 版本开始,每年发布一个小版本,到今年已经发布到 0.5 版本。
tockOS (国外/开源/嵌入式实时操作系统)
关键字:嵌入式操作系统/实时
介绍
Tock 是一个嵌入式操作系统,设计用于在基于 Cortex-M 和 RISC-V 的嵌入式平台上运行多个并发的、互不信任的应用程序。Tock 的设计以保护为中心,既可以防止潜在的恶意应用程序,也可以防止设备驱动程序。Tock 使用两种机制来保护操作系统的不同组件。首先,内核和设备驱动程序是用 Rust 编写的,Rust 是一种提供 compile-time 内存安全、类型安全和严格别名的系统编程语言。Tock 使用 Rust 来保护内核(例如调度程序和硬件抽象层)不受特定于平台的设备驱动程序的影响,并将设备驱动程序彼此隔离。其次,Tock 使用内存保护单元将应用程序彼此和内核隔离开来。
Google 发布的这个 OpenSK 是跑在 Tock 上面的!OpenSK 是用 Rust 编写的安全密钥的开源实现,该密钥同时支持 FIDO U2F 和 FIDO2 标准。
代码及团队规模
代码量大约为 15 万 行 Rust 代码。
团队规模:
主力开发:4 人。
社区贡献:123 人。
项目周期
该项目目前已进入维护期。
目前 1.6 版本发布,以往迭代周期大概是每半年发布一个小版本。