#linux #bindings #operating #operating-system #ffi #system

不使用 std tiny-start

微小的启动函数和符号重定位

4 个版本

0.1.3 2024年5月5日
0.1.2 2023年11月7日
0.1.1 2023年10月1日
0.1.0 2023年9月5日

#15 in #operating


tiny-std 中使用

MPL-2.0 许可证

335KB
7.5K SLoC

微小 std

类似于一个糟糕的、可能存在错误的微小标准库,用于 Linux。

注意:v0.1.0 在稳定版 >= 1.72 / 夜间版 >= 08-17 上损坏

2023年8月16日至2023年8月17日之间对 rustc 的某些更新导致 tiny-std 编译错误,在调用 memset 时导致无限递归,编译器有时将其作为优化的一部分插入 更多详细信息
这已在 v0.1.1 中通过将敏感于重写的代码拆分到具有 #![no_builtins] 的单独crate中修复。

因此,版本 0.1.0 已从 crates.io 中撤回。

当合适的时候

如果您实际上正在尝试做一些实质性的工作,请查看 RustixRelibc

常规 stdlib 可能适用于几乎所有用例,因为支持的唯一操作系统是 Linux,您可能有一个分配器,尽管在我的测试中,tiny-std 至少会生成一个更小的二进制文件。

支持的平台

  1. x86_64
  2. aarch64

核心功能

  1. 带或不带 alloc 运行
  2. 最小的文件系统覆盖范围
  3. 最小的 spawn 覆盖范围
  4. 最小的 Unix 套接字支持
  5. 最小的线程支持
  6. 实验性的 io_uring 支持

想要的功能(不分先后顺序)

  1. 通过 signalfd 处理信号
  2. 线程会很棒,但重新发明这个特定的轮子可能会爆炸代码大小,并且很难做正确。
  3. io-uring 文件系统操作

示例

  • PGWM 是使用 tiny-std 构建的最大的项目。
    目前,最小 WM 静态 pie 链接,大小为 790K
  • 二进制项目的某些工作设置示例可以在测试运行器中找到,包括有和无分配器/线程的。

许可证

本项目及任何贡献均受MPL-2.0许可证的约束。许多代码直接来源于rust-std,并且API旨在尽可能与rust-std相似/兼容,该API受MIT许可证约束,可以在以下位置找到:rust-std-MIT

依赖项

~435KB
~12K SLoC