(抱歉格式可能看起来很烂,笔者还在外地开忙,没有提前编辑好格式QAQ)
一个单文件、零依赖的 C++23 BusyBox 替代品,体积压缩 14%,测试全绿。
以下数据是笔者截至到5月30日发稿时的数据!
一句话介绍
CFBox 用现代 C++ 重写了 115 个常用 Linux 命令行工具,编译后只有一个 406 KB 的 ELF 二进制——通过软链接即可当 ls、cat、grep、cp、tar…… 用。
v0.2.0 做了什么
体积从 473 KB 降到 406 KB,减了 14%。这不是靠 strip 或 UPX,而是从源头砍掉了 C++ iostream 运行时:
- 彻底移除
<fstream> / <sstream> / <iostream>——全部替换为 <cstdio> 的 FILE* + fgets / sscanf std::stoi 全量替换为 std::strtol——避免 -fno-exceptions 下解析失败直接 abort()- 统一错误输出宏
CFBOX_ERR——102 个 applet 一刀切,告别散落的 fprintf(stderr, ...) fs::for_each_entry() 等文件系统工具——chown / chgrp / chmod 三个 applet 共用一套递归遍历,消掉大量重复代码
所有改动经过 379 个 GTest 测试、零 warning 编译、ASan 零泄漏验证。
依赖后续慢慢持续优化!
| BusyBox | ToyBox | CFBox |
|---|
| 语言 | C | C | C++23 |
| 编译产物 | 多文件 / 单文件 | 单文件 | 单文件 |
| 二进制大小 | ~1.5 MB+ | ~300 KB | 406 KB |
| 依赖 | glibc | glibc | glibc + libstdc++ + libm |
| 代码风格 | 宏 + 全局状态 | 宏 + 全局状态 | 现代 C++ / RAII |
CFBox 的定位不是取代 BusyBox(那不现实),而是提供一个代码可读、适合学习和二次开发的轻量替代。每个 applet 就是一个 .cpp 文件,读起来像教科书示例,不是黑魔法。(争取做到)
新增命令
chgrp、chmod、chown、clear、mountpoint、which——6 个运维高频命令。
下一步
v0.3.0 将推进核心命令的功能深度(tail -f、cp -a、test POSIX 全覆盖、ls -R --color),目标把功能覆盖从 ~30% 拉到 ~70%。以及顺便的,继续完善基建,和自动化benchmark进行性能检测!
链接
https://github.com/Awesome-Embedded-Learning-Studio/cfbox
Awesome Embedded Learning Studio
的开源项目,欢迎 Star / PR / Issue。