西尔维斯特·莱德鲁(Sylvestre Ledru) (以使用Clang编译器构建Debian GNU / Linux而闻名的开发人员) 最近发布了有关实验的报告 成功 用Rust重写的一组替代实用程序coreutils。
对于不熟悉Coreutils的用户,您应该知道它包括诸如sort,cat,chmod,chown,chroot,cp,date,dd,echo,hostname,id,ln和ls之类的实用程序。 西尔维斯特·莱德鲁(Sylvestre Ledru) 提到 为 集成到Debian的第一阶段 Rust中coreutils版本的版本,建立了以下目标:
- 为Debian和Ubuntu创建一个具有替代Rust Rustutils的软件包。
- 使用rust-coreutils在Gnome桌面环境中引导Debian。
- 从存储库中安装1000个最受欢迎的软件包。
- 使用rust-coreutils从Firefox,LLVM / Clang和Linux内核源进行构建。
和它 在为Rust / coreutils创建了100多个补丁之后,所有预期目标均已成功实现。 目前 正在进行的工作突出了缺少的实用程序和选项的实现,提高代码质量和一致性,开发测试套件,修复运行GNU Coreutils测试套件时发生的错误(到目前为止,在141个测试中,有613个已成功运行)。
另外,还要提到在创建rust-coreutils软件包时,决定不替换该软件包。 coreutils, 但允许它们并行运行。 该实用程序的Rust版本安装在/ usr / lib / cargo / bin /中,并通过将该目录添加到PATH环境变量中来激活。 创建rust-coreutils软件包使得很难下载存储库中的所有构建依赖项,包括Rust和几个小盒子软件包。
我开始为在Rust中开发的替代Coreutils做贡献。 该项目旨在提议直接替代基于C的GNU Coreutils,并希望评估它是否可以用于运行普通的Debian。 与几年前我对clang.debian.net所做的类似(使用clang而不是gcc重建Debian档案)。
希望大多数读者知道Coreutils是什么。 它是一组执行简单操作(复制/移动文件,更改权限/所有权等)的程序。 即使某些命令来自70年代,它们还是Linux,Unix和macOS的核心。 虽然可以找到不同的实现,但是它们正在尝试在参数,选项等方面保持兼容。 Coreutils的这种实现没有什么不同!
另一方面,它提到创建启动映像没有特别的问题。 系统,但是要使软件包适应rust-coreutils环境需要大量的工作,因为许多安装后脚本都调用coreutils套件实用程序,因为大多数问题是由于缺少必要的选项引起的,例如,它提到实用程序“ cp”缺少选项“ -archive”和“ -no-dereference”,而对于“ ln”,它不支持“ -relative”和选项mktemp-“ -t«,Insync»-fs«,in安装-»–所有者«和»–group«。
由于行为差异还出现了其他问题例如,安装实用程序不支持将/ dev / null指定为输入文件,在mkdir中而不是“ -parent”中有一个选项“ -parents”,依此类推。
在Debian中打包并不是一件简单或简单的任务。 它需要独立加载文件中的所有依赖项。 Rust拥有新的生态系统和小盒子,这使这项任务变得更加困难。
在测试大型代码库的构建时,没有重大问题。 在编译Firefox和LLVM / Clang时,使用python和cmake脚本,因此替换coreutils不会影响它们。 Linux内核构建相对平稳,仅出现两个问题:chown与符号链接一起使用时的错误输出,以及ln实用程序中缺少“ -n”选项。
最后 如果您想进一步了解该笔记, 您可以查看详细信息 在下面的链接中。