Hacker News 中文摘要

RSS订阅

djb关于使用Fil-C的笔记(2025) -- Notes by djb on using Fil-C (2025)

文章摘要

作者对新型内存安全的C/C++编译器Fil-C的兼容性印象深刻,许多库和应用无需修改即可运行。他分享了使用Fil-C的笔记,旨在将管理的机器切换到Fil-C编译的代码以增强安全性。测试环境是一台配备AMD Ryzen 5 7640HS的迷你PC,运行Debian 13系统。此外,作者还提供了帮助审计Fil-C与上游源码差异的脚本和安装脚本。

文章总结

以下是文章主要内容的精简中文陈述,保留核心细节并删除无关内容:


djb关于Fil-C编译器的使用笔记(2025)

Fil-C编译器初印象
Fil-C是一款内存安全的C/C++编译器(filcc/fil++),作者测试发现其兼容性出色——多数库和应用无需修改即可编译运行,少数需要调整的案例也容易解决。本文记录了作者将托管服务器迁移至Fil-C编译代码的过程,旨在提升系统安全性。

测试环境
- 硬件:Phoenix迷你PC(AMD Ryzen 5 7640HS/6核12线程,12GB内存+36GB交换空间)
- 系统:Debian 13(作者通常使用LTS版本,但Fil-C部分组件依赖新版工具链)

关键资源
1. 差异对比脚本:帮助审计者分析Fil-C与上游源码(如clang/glibc)的差异
2. 自动化安装脚本
- filian-install-compiler:在Debian 13上编译安装Fil-C及配套工具链(耗时约86分钟)
- filian-install-packages:用Fil-C编译Debian源码包(目前支持bzip2等部分软件包)
3. 性能对比:加密软件微基准测试显示,Fil-C编译代码的周期数为clang的1-4倍

第三方方案
- Filnix:用户可通过非特权账户在Debian 12上安装Fil-C并运行Fil-C编译的Nethack游戏


编译器与C库配置

初始准备
bash mkdir -p /var/empty apt install autoconf-dickey build-essential bison clang cmake flex gawk gettext ninja-build patchelf quilt ruby texinfo time

编译流程
1. 创建非特权用户filc,克隆Fil-C源码(含glibc及高阶库/应用)
2. 执行编译脚本:./build_all_fast_glibc.sh
- 注意:原12GB交换空间不足,扩容至36GB后编译成功(峰值占用19GB交换空间+12GB内存)
- musl库因兼容性问题(如attr/elfutils等组件依赖glibc特性)未被采用

大规模构建
作者用Python脚本build-parallel.py替代原生build_all_slow.sh,实现:
- 错误继续执行(非首次错误即终止)
- 多核并行编译(61个目标中60个成功,耗时101分钟)
- 唯一失败案例:libcap因插件加载路径问题编译失败


Debian与Fil-C整合

架构设计
仿效Debian多ABI支持机制(如i386/amd64),新增amd64fil0架构:
- 目标:通过apt install bash:amd64fil0安装Fil-C编译版本
- 库文件路径:/usr/lib/x86_64+fil0-linux-gnu

挑战与解决方案
1. 头文件冲突:Debian要求多ABI共享/usr/include,而Fil-C使用独立目录
- 临时方案:手动调整安装路径(未来计划修改Fil-C驱动直接使用系统路径)
2. 打包工具链
- 基础工具:安装dpkg-devdevscripts等包
- 架构注册:更新cputableconfig.sub文件以识别amd64fil0
3. 示例构建
bash apt source tinycdb ./fillet # 应用符号重命名等补丁 dpkg-buildpackage -a amd64fil0 # 成功生成.deb包

实际案例
- ncurses:需手动处理头文件链接
- readline:安装后需创建符号链接至多架构目录
- 版本控制:部分包(如libmd)需保持跨架构版本一致


延伸应用

第三方库适配
- Boost 1.89.0:修改execunix.cpp绕过vfork限制
- Libgc替代方案:使用轻量级gcshim包调用标准内存管理
- 加密库:如libntruprime需禁用AVX2汇编并调整CPUID检测

开发工具链
- Lua生态:成功编译lpeg/luv等扩展(Neovim依赖项)
- 终端应用:mutt/tig/w3m等均可在Fil-C环境下运行


总结

作者通过系统化的工具链改造和补丁管理,逐步实现Debian生态向Fil-C编译器的迁移。当前方案虽存在路径管理和版本协调等挑战,但已证明其在提升内存安全性的同时保持良好兼容性。未来计划进一步优化编译器与Debian标准的整合度。

评论总结

这篇评论主要围绕三个核心观点展开:

  1. 对新兴技术潜力的期待
  • 支持者认为这类创新可能像Rust/Go一样从小众走向主流(评论1:"a decade later is taking over the world")
  • 指出传统Linux基础设施需要新鲜血液注入(评论1:"middle-aged linux infrastructure...Not many young people are coming in")
  1. 对Fil-C技术的讨论
  • 有用户希望将Fil-C而非Rust纳入APT系统(评论3:"Wish we were talking about making Fil-C required for apt")
  • 科普Fil-C是"通过垃圾回收和隐形能力实现内存安全的C/C++实现"(评论4引述官网定义)
  1. 对技术可行性的质疑
  • 质疑复杂系统(如数据库)的构建难度(评论5:"building a system like Postgres...is going to be another thing")
  • 但承认djb正在尝试"用Fil-C重建整个Debian系统"(评论6:"rebuild an entire Debian system with it")

整体呈现技术乐观派与务实派的平衡讨论,既肯定创新价值,也关注实际应用挑战。