LWN:用Rust实现GNU Coreutils!

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

关注了就能看到更多这么棒的文章哦~

Rewriting the GNU Coreutils in Rust

June 8, 2021
This article was contributed by Ayooluwa Isaiah
DeepL assisted translation
https://lwn.net/Articles/857599/

随着内存安全(memory-safe)语言的发展(特别是 Rust 语言),我们应该来看一下目前在进行的将存在了几十年之久的 C 语言代码移植到 Rust 的大规模工作。uutils project 旨在用 Rust 重写 GNU Coreutils 项目中的所有实用程序(utilities)。该项目最初由 Jordi Boggiano 在 2013 年创建,旨在完美替代 Coreutils 程序,并且增加 Rust 所提供的 data-race 的保护以及内存安全特性。

许多读者都对 Coreutils 项目感到熟悉。它包括基本的文件操作、进程操作,以及文本操作的工具,这些工具在每个基于 GNU 的操作系统中应该都存在。Coreutils 项目创建出来就是为了整合以前单独提供的三套工具,即 Fileutils、Textutils 和 Shellutils,还有其他一些杂项工具。该项目中包括的许多程序,比如 rm、du、ls 和 cat,都已经存在了几十年,尽管存在其他实现了类似功能的工具。这些工具本身并不能直接在 Windows 等平台上运行。

总的来说,Coreutils 程序被认为是比较容易出成果的领域,应该可以在较短的时间内开发出基于 Rust 的替代版本。每个工具的要求都很明确,而且许多工具在概念上来看都是很简单的,但实际上工作并不一定很容易。虽然在使 uutils 进入可用状态方面已经取得了很大的进展,但要达到 Coreutils 现在相同的稳定程度和成熟程度还需要一些时间。

在这个项目中使用 Rust 本身可以加快开发速度,因为它可以完全消除许多可能的内存错误和其他未定义的行为。Rust 还为使用高效、无竞争的多线程执行(race-free multithreading)打开了大门,这可能可以在某些条件下加快程序运行的速度。重写 uutils 还提供了一个机会,在重新实现 Coreutils 的过程中还可以增强一些功能,从而在保持与 GNU 版本的兼容的前提下,提供更好的用户体验。例如,在 Coreutils 项目中长期未被接受的一些功能(比如为 mv 和 cp 等工具添加参数来显示进度条),目前正在重写为 Rust 版本的过程中被重新考虑。

What has been done so far

在项目的 GitHub 页面上可以看到一个表格,其中的实用程序被分为三栏。"已完成"、"半完成(Semi-Done)"、"待完成(To-Do)"。在写这篇文章时,正在进行开发的 106 个实用程序中只有 23 个还没有进入 "完成" 状态,其中 16 个被标记为 "半完成",7个在 "待完成" 栏。在 "待完成" 栏下的实用程序,要么根本没有被处理,要么目前正在进行初步实现(如 pr 和 chcon)。那些在 "半完成" 状态中的工具都有一些尚未支持的选项参数,或者它们的行为在某些情况下与 GNU 的同类工具略有不同。比如说:

  • tail 不支持 -F 或 –retry 标志。

  • more 在用管道输入时会失败,如 "cat foo.txt | more"。

  • install 缺少 -b 和 -backup 标志的支持。

  • 有几个工具不支持非 UTF-8 的参数,尽管当前通过把命令行参数解析从 getopts 迁移到 clap 已经缓解了这个问题。

切记,一个程序被标记为 "完成" 并不意味着所有的测试都通过了,也不意味着这个工具和 GNU 版本具有相同水平的性能和内存效率。例如,有一些尚未解决的问题是关于要改进 factor 的性能(当前大约慢 5 倍)和 sort 工具的性能(当前慢 1.5 倍到 6 倍)。其他有些情况下,uutils 版本的工具比对应的 GNU 版本要更快。其中一个例子是 cp 工具,它的性能有了明显的提高,这主要是由于使用了 sendfile() 和 copy_file_range() 系统调用,尽管 GNU 版本之前已经形成了一些方案,但一直没能真正用起来。

目前,Coreutils 测试套件中的 624 个测试只有 142 个是成功状态,而 GNU 版本则可以通过大约 546 个测试。然而,应该注意的是,许多错误是由于命令输出的细微差异造成的。

还有一个单独的表格,展示了 uutils 项目目前支持的所有平台和架构。几个主要的操作系统(Linux、macOS 和 Windows)在相应的各种不同架构中都有记录,尽管相当多的实用程序目前还没有在 Windows 上编译生成过。FreeBSD、NetBSD 和 Android 上大多数工具也已经有了编译好的二进制文件,除了少数实用程序(比如 chroot、uptime、uname、stat、who 等等)之外。Redox OS、Solaris、WebAssembly 和 Fuchsia 这几行的行目前都是空白,这反映了目前这些平台的优先级较低。

uutils 项目目前的版本是 0.0.6,已经被打包到各种 Linux 发行版和打包系统的仓库里了。值得注意的是,Sylvestre Ledru,Mozilla 的主管,同时也是 Debian 和 Ubuntu 项目的上贡献了许多工作的开发者,已经带头将该项目打包到 Debian 作为 GNU Coreutils 的替代品。它目前的状态被判定为足以让一个装有 GNOME 的系统能正常启动和运行、然后安装 1000 个最流行的 Debian 软件包、并构建 Firefox、Linux 内核和 LLVM/Clang。此外,uutils 也已经进入了 Arch Linux(Community 版本)、Homebrew for macOS 和 Exherbo Linux 发行版的软件库中。

Licensing

需要关注 uutils 项目的许可证(Licensing)。该项目中的所有实用程序都是在 permissive MIT 许可下授权的,而不是 GNU Coreutils 的 GPLv3 许可。这可能会使它在那些不接受 GPLv3 许可的软件的地方(因为 GPLv3 不支持 Tivoization 即限制只能执行某些版本,等等)更有吸引力。使用 MIT 许可证这一决定有一些人提出过反对,他们在 GitHub 中相关的 issue 上对这个选择提出了异议,他们宁愿看到在这种项目上使用 copyleft license。

主要的批评意见同样还是类似过去对 FOSS licensing 的争论:non-copyleft license 对最终用户的自由是有害的,因为它允许个人或组织将项目中任意部分纳入设备或其他软件的发行版中,而不需要提供源代码,这样就导致其他人不可能研究、修改或改进它。还有人担心,许可证的选择出发点实际上是为了最大限度地提高 Rust 的使用,而没有考虑其他方面的影响。用更宽松的许可证下的替代品取代 GPL 许可的工具,在一些人看来是一种倒退。

Contributing to uutils

关注 uutils 项目发展的最好方式是关注它的 GitHub 仓库和官方 Discord 讨论。要想知道如何开始为项目做贡献,可以在 git 仓库中的一份文件中看到介绍。

要使 uutils 准备好用在生产环境中的话,还有很多工作要做。该项目被定位为开始尝试 Rust 开发的一个很好的途径,并且已经有了一个 issue list,可以供新来者作为上手项目。该项目目前的重点似乎是达到与 GNU Coreutils 完全的兼容,并在解决其他问题之前计划先提高测试覆盖率。而诸如删除不必要的依赖项、提高性能、减少内存使用等问题,计划在消灭了兼容性问题之后再来解决。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

使用vim+gtags阅读内核源码 这个功能就是gtags-cscope的Find this global definitionIT行业,技术更新换代快,人们都喜欢追求最新的技术,对老技术和产品多少有些轻视。这一点在编辑器中也是这样,cscope、gtags这些以tag为基础的产品,由于不是真的懂得C代码,在现在的编程环境中,已经比不上lsp了。但是,在C代码阅读的场景中,特别是内核源码阅读的场景中,这些技术还是有一席用武之地,在历史的长河中继续发光发热。 阅读详情

相关推荐

CoreutilsRust 语言重构版

CoreutilsRust 语言重构版 1. 项目基础介绍与主要编程语言 coreutils 是一个在 UNIX/UNIX-like 系统上运行的基础工具集的重构版本,它使用 Rust 编程语言进行开发。Rust 语言以其安全性和性能闻名,本项目旨在利用 Rust 的这些特性,提供一个安全且高效的工具集。这些工具是操作系统日常使用中不可或缺的部分,如 ls, cp, mv 等。 2. 项目的...

gitblog_01008的博客 466

uutils coreutils - GNU coreutilsRust 跨平台实现

一、关于 uutils coreutils 1、项目概览 2、相关链接资源 3、功能特性 二、安装配置 基础安装 系统级安装 三、构建指南 1、环境要求 2、构建方式 Cargo 方式 Make 方式 四、文档生成 本地文档构建 五、测试与兼容性 GNU 测试套件 其它 参考项目 参考文献

AI工程化、开源分享、文档翻译、代码笔记 846

探索高效开发工具:UtilsCore - 功能强大的Java工具库

探索高效开发工具:UtilsCore - 功能强大的Java工具库 utilscore项目地址:https://gitcode.com/gh_mirrors/ut/utilscore UtilsCore是一个开放源码的Java工具库,由在上维护和更新。这个项目的目的是为Java开发者提供一系列实用、便捷的工具类,以提高他们的开发效率和代码质量。下面我们将详细介绍UtilsCore的核心功能、技术...

gitblog_00081的博客 992

Rust Coreutils 终极指南:跨平台命令行工具的现代化革命

**Rust Coreutils** 是一个用 Rust 语言重写的跨平台 GNU 核心工具集,旨在为 Linux、Windows、macOS 和其他平台提供统一、高性能的命令行工具体验。这个开源项目不仅保留了传统 GNU 工具的所有功能,还通过现代编程语言的优势带来了更好的安全性、性能和跨平台兼容性。🚀 ## 🔥 为什么选择 Rust Coreutils? ### 跨平台统一体验 无论您

gitblog_00759的博客 1128

uutils coreutilsRust重写的跨平台GNU核心工具集介绍

uutils coreutilsRust重写的跨平台GNU核心工具集介绍 【免费下载链接】coreutils 跨平台的 Rust 重写 GNU 核心工具集。 项目地址: https://gitcode.com/GitHub_Tr...

gitblog_00071的博客 865

LWNRust重写Linux最基本的软件包!

关注了就能看到更多这么棒的文章哦~Rewriting essential Linux packages in RustBy Joe BrockmeierFebruary 12, 2025FOSDEMGemini-1.5-flash translationhttps://lwn.net/Articles/1007907/大多数 Linux 系统都依赖于一套核心实用程序,这些程序是GNU Proje...

Linux News搬运工 1151

GNU Coreutils package

  Fileutils, Shellutils, and Textutils have been combined into the GNU Coreutils package. The tools supplied with this package are: chgrp - Changes file group ownership. chown - Chang

软体疯子专栏 1275

Coreutils工具包,Windows下使用Linux命令

Coreutils工具包,Windows下使用Linux命令

小青龍 的博客 2万+

GUN WINDOW 工具

GNU utilities for Win32 CoreUtils for Windows或者完整的 package dd for windows Unix ports - WHICH, TEE & CUT 转载于:https://www.cnblogs.com/zengkefu/p/7372872.html

weixin_30564901的博客 287

Windows使用touch命令

Windows使用Linux命令

教Linux的李老师 3889

在Windows 10/11 上安装GCC(GNU Compiler Collection)

在Windows 10上安装GCC(GNU Compiler Collection),你可以使用MinGW-w64,它是一个Windows平台的GCC编译器套件。

开心杨的个人博客 4万+

CoffeeScriptRedux错误处理机制:如何构建容错性强的编译器

CoffeeScriptRedux作为CoffeeScript编译器的重构版本,专注于提升编译器的健壮性和可扩展性。其错误处理机制是确保编译器在面对各种代码输入时能够优雅降级并提供有价值反馈的核心组件。本文将深入探讨CoffeeScriptRedux如何通过多层次的错误处理策略,构建出容错性强的编译器系统。 ## 编译器错误处理的核心原则 在编译器设计中,错误处理需要平衡精确性与友好性。Cof

gitblog_00322的博客 397

【亲测免费】 推荐开源项目:Gow - Windows上的轻量级Cygwin替代品

推荐开源项目:Gow - Windows上的轻量级Cygwin替代品 1、项目介绍 在Windows环境中运行开源UNIX工具,你是否曾经因为Cygwin的体积过大而犹豫不决?那么,让我们向你隆重推荐Gow(Gnu On Windows)——一个小巧却功能强大的工具集合,旨在让你在Windows上体验到近似的UNIX环境,而不必承受过大的安装负担。 2、项目技术分析 Gow采用了一种巧妙的方法,它...

gitblog_00014的博客 1221

GNU make、NMake、Autotools 、waf、cmake、premake 等构建工具

GNU make、NMake、Autotools 等传统构建工具,它们大都历史悠久、使用广泛、稳定可靠,但难用、不够智能,它们在使用场合也有很大的局限性。   SCons SCons 是一个优秀的编译工具,脚本可以用python书写,不过距离构建还有一些差距:项目小的话还好,规模一大,依赖分析速度急速下降,而且自动配置功能很弱 (跨平台构建能力不足)。 Waf 对 waf和 Cm

静故了群动 3427

gnu coreutils内核工具

周海汉 /文 gnu coreutils 是原来的gnu shellutils, fileutils, textutils三部分合成的。里面有许多很强大的shell,文件和文本处理工具。如sort, seq, split,uniq,cut,md5sum,wc等 gnu coreutils的手册英文版放在:http://www.gnu.org/software/coreutils

周海汉的开发专栏 7649

Django Two-Factor Auth快速入门:10步配置教程

想要为你的Django应用添加企业级安全保护吗?django-two-factor-auth是一个功能强大的Django双因素认证库,能够为你的用户账户提供额外的安全层。无论你是电商平台、SaaS服务还是企业管理系统,双因素认证都是保护用户账户安全的最佳实践。😊 ## 📋 为什么需要双因素认证? 在网络安全威胁日益严重的今天,仅靠密码已经无法提供足够的安全保障。双因素认证(2FA)通过要求

gitblog_00505的博客 579

深入uutils coreutils:架构设计与核心技术解析

深入uutils coreutils:架构设计与核心技术解析 【免费下载链接】coreutils 跨平台的 Rust 重写 GNU 核心工具集。 项目地址: https://gitcode.com/GitHub_Trending/...

gitblog_00623的博客 581

Unlimited-OCR-6bit多语言OCR测试:10种语言识别accuracy对比

Unlimited-OCR-6bit是百度官方Unlimited-OCR模型的6位仿射量化MLX转换版本,专为Apple Silicon推理优化,支持多语言OCR识别。本文将对其在10种常见语言上的识别accuracy进行详细对比测试,帮助用户了解该模型的多语言识别性能。 ## 测试环境与准备 ### 模型基本信息 Unlimited-OCR-6bit模型采用6bit精度,使用仿射量化方式,组

gitblog_00051的博客 423

Linux和其他类Unix系统的GNU coreutils 知多少

GNU coreutilsGNU项目的一部分,它是一组基本的命令行工具集,用于操作和管理Linux和其他类Unix系统中的文件和数据流。这些工具被广泛用于终端和脚本中,提供了许多常用的功能和实用程序。Linux和其他类Unix系统的GNU coreutils 知多少?了解它有助你熟悉常用的linux命令。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 2436
上一篇: LWN: 运行时的检查功能!
下一篇: LWN:给 io_uring 添加 audit 支持!
LinuxNews搬运工
博客等级 码龄7年 419粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值