< 返回版块

Mike Tang 发表于 2026-11-06 20:50

systemd 给自身组件加 Rust 支持

systemd 的 PR #44324 给仓库加上可选的 Rust 程序构建支持。Christian Brauner 提交了这个 PR。eszlari 2026 年 10 月 26 日把链接发到 r/rust,采集时 106 分、38 条评论。采集时 PR 状态是 Open。

选项默认 auto。需要 rustc >= 1.85、bindgen >= 0.71.1,Debian 13 自带的版本正好满足。1.85 是最低支持的 Rust 版本,也会交给 bindgen,生成的绑定不会要求比手写代码更新的编译器。bindgen 0.72.0 会生成编不过的代码,被拒绝。auto 在找到工具链时启用。-Drust=enabled 在找不到工具链时直接失败。

Rust 支持还要 meson 1.4.0,用来接 rust 模块的 bindgen()。仓库没有抬高 meson 最低版本。更老的 meson 上 -Drust=auto 会自己关掉。交叉编译还没做,bindgen 需要知道目标平台。HAVE_RUST 用来决定 unit、man page 和测试要不要带上 Rust 程序。

libsystemd-shared、libsystemd、NSS 和 PAM 模块继续用 C。Rust 程序和 C 程序一样动态链接 libsystemd-shared。Rust 这边用 core,不用 std,也不用 alloc,没有外部 crate。

configure 时会跑一次 bindgen,输入是 tools/bindgen-probe.h。bindgen 运行时才加载 libclang,只找到二进制不能说明能生成绑定。探测会报 libclang 版本,并带上 bindgen < 0.72.1 配 libclang >= 22 会处理错的写法。组合坏了就拒绝,或者关掉 Rust 支持,不留到后面编译才失败。

lint 和 codegen 是项目级 rustc 参数。警告只在 --werror 时当错误,和 C 一样。unsafe 必须写在 unsafe 块里。每个 unsafe 块要有 SAFETY 注释,每个 unsafe 函数要有 Safety 段,靠 clippy 的 undocumented_unsafe_blocks 等检查。公开项要有文档。指针转换的 lint 保持显式。所有构建类型都开溢出检查。全部 panic=abort。edition 是 2021。meson 传给编译器的源码路径相对构建目录,file!() 进 journal 的 CODE_FILE= 之前会被重映射,做法和 C 侧的 PROJECT_FILE 一样。

同一组提交里还有 bindgen 生成的 crate,绑定 libsystemd-shared 导出的函数、类型和常量,覆盖 src/basic/、src/shared/ 和它实现的公开 sd-*.h,以及 systemd 代码看到的 libc 和内核接口。绑定在构建时从 bindings.h 生成,编译参数和 include 栈跟 libsystemd-shared 相同。布局断言对不上就编译失败。静态 inline 辅助函数由 bindgen 写成 C trampoline,编进 Rust 调用方。共享库本身不改,也不会把 libsystemd-shared 的代码拷进程序。

评论里 InternalServerError7(162 分)写,systemd 一直就能运行外部的 Rust 程序。这个 PR 加的是 systemd 自己的组件可以用 Rust 写,包括构建系统接入、FFI 绑定,以及给内部 C 库做的封装。

原文链接:https://github.com/systemd/systemd/pull/44324

Rust 官方说明怎么资助贡献者

《How to fund Rust contributors》是 Rust 官方博客 2026 年 10 月 26 日的文章,说明个人和公司可以怎么把钱给到写 Rust 的人。Kobzol 同一天发到 r/rust,采集时 121 分、8 条评论。

文章列了三条路。一般维护:捐给 Rust Foundation Maintainers Fund,或赞助 RustNL Maintainers Team。具体功能和改进:看 2026 年需要资助的 Rust Project Goals,联系对应的 funding contact。个人贡献者:捐到他们的 GitHub Sponsors。项目成员里开了 GitHub Sponsors 的名单在 rust-lang.org/funding。不确定走哪条,或公司要谈资助,写信给 funding@rust-lang.org。

文章写,今年几项资助已经开始起作用,关键项目的维护状态有改善,allocator、never type、下一代 trait solver、Polonius borrow checker 有进展。目前只有一部分写 Rust 的人拿到资助。

公司可以加入 Rust Commercial Network。加入免费,不要求先成为 Rust Foundation 会员。网络用来找特定方向的资助机会,比如用户界面、语言互操作、供应链安全,也可以和其他公司一起出钱。文章还指向 Niko Matsakis 在 RustConf 2026 的演讲,讲 Project Goals 和资助怎么配合。网站 Funding 页有缩短版说明。

评论里 Kobzol(12 分)写,Funding team 整理了这份给个人和公司的简短指南。schneems(26 分)写,还可以让员工把开源工作放进看板:工作中碰到 bug,用工作时间写带复现的 issue,并记入工作记录。Kobzol(4 分)回复,文章最后一段写了公司可以给员工带薪时间做上游,或雇 Rust 贡献者做这件事。Rust 基金会最近有 Engineer in Residence 这种角色。afdbcreid(9 分)写,不要只让 AI agent 跑完全流程,报告用自己的话写。

原文链接:https://blog.rust-lang.org/2026/10/26/how-to-fund-rust-contributors/

Catsor:用路径画出来的桌面猫

Catsor 是一只画在桌面上、跟着鼠标走的猫。作者 PilotZealousideal470 2026 年 10 月 26 日发到 r/rust,采集时 88 分、12 条评论。它在 Linux/X11 和 Windows 上各跑一个二进制。协议是 Apache-2.0。

猫没有精灵图。骨架是世界坐标里的 12 个节点,加上 4 只着地的爪子,节点覆盖头、脊柱和尾巴。每帧先解脊柱和尾巴,再用 tiny-skia 用路径把身体画到骨架上。爪子按四拍走、小跑和旋转奔跑步态。晃光标,它会跟踪并扑;甩鼠标,它会跑过来;放着不管,它会趴下,然后睡着。

身体跟着一条平滑的 carrier 路径。步态晃动、点头和扭屁股是加在上面的偏移,不写回 carrier。作者写,拆开之前猫会慢慢偏航,脊柱还会拧过去。

振荡器存的是累计相位。作者写,用 time * freq 跑几个小时后,f32 精度会让它发抖,改频率还会让相位跳变。测试会模拟长时间运行来抓这个。

CatSim 不碰操作系统,自带带种子的 RNG。测试喂固定 dt 的合成光标路径,检查活动、位置和平滑度。README 的演示 GIF 用同一条路生成:脚本光标驱动模拟,再渲染。

依赖是 tiny-skia、glam、clap,再加上 x11rb 或 windows-sys。x11rb 是纯 Rust,不需要额外的 -dev 包。托盘菜单用手画的 5x7 点阵字体。Linux 发行包是静态 musl 二进制。

点击穿透:X11 上是 override-redirect 的 ARGB 窗口,XFixes 输入区域为空。Windows 上是 layered window,用 UpdateLayeredWindow。Win32 代码用 cfg(any(target_os = "windows", windows_check)) 包起来。RUSTFLAGS="--cfg windows_check" cargo check 可以在 Linux 上做类型检查,不需要 Windows 工具链。

限制:还没有原生 Wayland。X11 要有合成器才透明。作者在评论里写,Wayland 不让应用随便画置顶层,也不让随便读全局光标位置。Sway、Hyprland 一类合成器可以通过 wlr-layer-shell 做,作者把它放在前面。毛色现在有 5 种:calico、brown、charcoal、tuxedo、silver,托盘菜单可以换。还没有橙色。

原文链接:https://github.com/ozanenginoglu/catsor

Ochre:64km 见方、视距到 32km

Ochre 是用 Rust 写的体素世界项目。作者 WhatHasKHANGotToSay 从 2021 年开始做,2026 年 10 月 26 日发到 r/rust,采集时 45 分、14 条评论。

最早是用 Amethyst 的 ECS 和 glium 的 OpenGL 绑定做的 Minecraft 式克隆。后来迁到 Bevy。

地形绕着玩家流式加载,远处换成更粗的 LOD 网格,中间做交叉淡入。默认视距下弯曲地平线到 16km,高度升高后到 32km。世界是 64km × 64km,生成是确定的。水滴侵蚀刻出山谷,水文把河引到湖和海,气候通道给出温度和湿度。有昼夜、太阳、月亮、星星、大气散射、体积云,以及包括雨在内的天气。

作者写,测试机是一台较老的 RTX 2060,分辨率 1440p,视距 32km。地形块生成和网格化在 Ryzen 7 9800X3D 上很快。

评论里作者写,渲染用的是 Bevy 自带管线。世界、光线步进的云、水和植被摆动用了自定义着色器。大气和方向光是 Bevy 0.20 自带的。视频做过降分辨率,本地跑更清晰。作者计划以后在上面做硬核写实生存游戏,目前还在推这台机器的上限。

原文链接:https://github.com/rornic/ochre


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页