Bcachefs被移出内核主线:转向DKMS及其影响
引言
经过多年争论和开发,bcachefs——一个曾并入Linux内核的现代写时复制文件系统——正从主线中移除。从内核6.17开始,内核内实现已被删除,未来使用预计将通过树外DKMS模块。这标志着bcachefs项目的转折点,引发对其稳定性、采用率以及与内核开发社区关系的质疑。
什么是Bcachefs?
在深入探讨移除过程前,我们先回顾bcachefs及其受关注的原因。
- 起源与目标:由Kent Overstreet开发,bcachefs源自早期bcache项目(块设备缓存层)的思想。它旨在构建一个功能齐全的通用文件系统,在一致的设计中结合性能、可靠性和现代特性(快照、压缩、加密)。
- 主线包含:经过漫长审查和孵化期后,bcachefs于2024年1月发布的6.7版本并入主线内核。
- “实验性”分类:即使成为内核一部分,bcachefs始终带有关于其成熟度和稳定性的免责声明——并非所有用户都建议在生产中使用。
移除原因
bcachefs从内核中移除并非突然,而是开发实践、补丁接受时机和上游政策规范之间紧张关系的最终结果。
6.17中的“外部维护”状态
在内核6.17准备期间,维护者将bcachefs标记为“外部维护”。尽管代码仍然存在,但这一变化意味着上游将不再接受内核树内的新补丁或更新。
分歧与最后一根稻草:“journal_rewind”补丁
决定性破裂发生在6.16/6.17开发周期期间。bcachefs负责人在合并窗口后期提交了一个主要补丁(称为journal_rewind)——这是一个新增功能而不仅仅是错误修复。此举违背了内核社区规范,社区期望新功能在合并窗口之前或更早周期提交。
Linus Torvalds公开表达了沮丧,称bcachefs树越来越像开发沙箱,而非与上游政策保持一致。他抱怨开发工作在发布候选期间进行,而非之前,这使维护稳定性变得困难。
最终,Torvalds宣布不再希望参与这种动态,并将在6.17合并窗口中移除bcachefs。
最终移除
随着Linux内核6.18版本发布,核心bcachefs代码被正式剥离。给出的理由是内核内副本已过时,继续存在只会造成版本混淆。此次移除从内核源代码树中删除了约117,000行代码。
现状:DKMS与树外方法
移除后,bcachefs项目转向作为DKMS模块(动态内核模块支持)发布,意味着它存在于内核树外,可按需为各种内核编译和安装。
关于此过渡的一些关键点:
- 该模块设计与内核6.16及更新版本兼容,计划跟踪内核预发布版本以提供模块支持。
- 用户仍可将bcachefs作为根文件系统运行,前提是initramfs包含DKMS模块以便在启动过程早期加载。
- 出于政策或安全原因禁止分发树外模块的发行版可能限制bcachefs可用性;一些通过社区仓库(如Debian/Ubuntu APT仓库)或Fedora的COPR提供。
- 性能比较表明DKMS版本在某些基准测试中可能优于树内版本(Phoronix报告改进)。
影响与风险
bcachefs从主线移除影响多个利益相关者:用户、发行版维护者和bcachefs项目本身。
对用户和部署的影响
- 依赖bcachefs的用户必须适应:需要在内核升级时安装和维护DKMS模块。
- 在某些发行版中,这意味着更多手动步骤或依赖社区打包。
- 如果模块构建失败或与未来内核更改不兼容,则存在风险。
- 某些内核级优化或钩子可能更难通过树外模块维护(因为树内代码可以更轻松地适应最深集成)。
对发行版的影响
- 一些发行版(尤其是那些具有限制性模块政策的)可能放弃上游支持或默认排除bcachefs。
- 发行版必须决定是否打包DKMS、提供用户说明,或在稳定内核中黑名单其使用。
对bcachefs维护和开发的影响
- 与内核解耦提供更多自由:项目可以按自己的时间表发布更新,而不受内核合并周期束缚。
- 但也失去了树内文件系统所具有的可见性和集成优势。
- 有推测称,缺乏内核内用户引用可能导致相关内部API或辅助函数随时间推移被移除(即仅由bcachefs使用的代码可能被考虑移除)。
- 项目必须保持强健的测试、跨内核版本的兼容性和响应能力以避免回归。
移除反应
社区反应不一。一些人同情bcachefs的开发方法与内核更高级别政策不太一致。其他人则担心失去一个有前途的文件系统,它旨在推进其他文件系统缺乏的功能。
批评者警告,未来内核可能移除bcachefs依赖的内部API——因为没有树内用户保留——以进一步削弱树外模块。
一些人持乐观态度:DKMS路径赋予项目自主权,并可能允许更快迭代和修复,而无需等待内核合并。
用户当前应采取的措施
如果您正在使用或计划使用bcachefs:
- 检查当前内核是否仍包含bcachefs或已超过6.17/6.18。
- 准备在发行版仓库或通过社区包安装DKMS版本(查找“bcachefs-tools”包或模块源)。
- 确保initramfs包含模块以便系统可以从bcachefs启动。
- 在每个内核升级周期中监控兼容性——特别是对于您依赖的构建或API。
- 关注发行版的支持决策——一些可能移除或限制树外模块。
- 对于关键任务设置,如果bcachefs在您的环境中变得不可行,考虑备用文件系统或迁移路径。
结论
bcachefs从Linux内核主线移除标志着一个转折点。虽然对于那些希望完全集成高级文件系统的人来说,这可能感觉像是倒退,但此举也解放了项目,使其能够按照自己的条件发展。DKMS模型引入了灵活性,但也带来了关于兼容性、发行版支持和长期集成的风险。
尚待观察的是bcachefs能否在内核核心外保持势头——提供稳定、高性能和经过充分测试的功能。对于用户和Linux发行版来说,适应新现实至关重要。