
2026 年 yoe 项目挑战传统:嵌入式 Linux 构建系统该换新了!
嵌入式 Linux 的世界里,Buildroot 于 2001 年诞生,OpenEmbedded/Yocto 则在 2003 年问世。二十多年来,它们几乎成了所有嵌入式 Linux 设备构建系统的标配,从路由器到汽车中控,从工业控制到 IoT 网关,几乎每个 SoC 和核心板厂商都会优先提供 Yocto 或 Buildroot 的 BSP。
然而在 2026 年,一个名为 yoe 的新项目站了出来,提出疑问:是时候换一套新的构建系统了。提出这个问题的是 yoe build 项目的作者,一位在嵌入式领域有超过 20 年经验的工程师。他在 6 月 11 日发表的文章中,系统性地拆解了 Yocto/Buildroot 模型在当前技术环境中的结构性困境,并公开了他默默搭建数月的新方案。这篇文章在嵌入式社区引发大量讨论,因为它触及的痛点几乎是所有嵌入式团队的共同体验。
问题核心在于:嵌入式产品已变,但构建系统没变。作者指出三个关键转变趋势:
1. 现代边缘设备行为变化:现代边缘设备越来越像云服务,不再是一次烧录后冻结五年的固件,而是需要持续接收更新的动态系统。
2. 现代编程语言生态挑战:Python 的 NumPy/PyTorch 关联着 C/C++/CUDA,JavaScript 项目链接着原生 C 库,vcpkg 管理着庞大的 C/C++ 依赖。这些生态大多在桌面和服务器环境下设计,对交叉编译的支持要么缺失,要么需大量人力适配。Yocto 在构建过程中封锁网络访问,导致 pip、npm、cargo 等语言原生包管理器无法直接使用,每个依赖都要通过复杂的 `do_fetch` 配方手动映射。维护数千个这样的配方耗尽了 Yocto 社区的精力和资源,作者直言这是整个生态中最不可持续的环节。
3. 旧取舍问题恶化:Yocto 的「一切从源码编译」哲学带来漫长的构建时间和巨大的内存需求,而供应商提供的 BSP 常冻结在三四年前的 Yocto 版本上,成为引入现代软件的障碍。
作者用精准类比描述当前状态:开源社区给了嵌入式团队一栋装满房间和功能的大房子,但没给他们维护房子的工具。交叉编译是房子里最老旧的管道系统,在 2000 年代是合理选择,那时目标设备计算能力不足以支撑本地编译。但在 AWS Graviton 和 Hetzner CAX 这类高性能 ARM 云主机普及的 2026 年,坚持交叉编译的理由越来越弱。
yoe 项目的设计方案基于此观察。其核心思路不是「做一个更好的 Yocto」,而是换一种构建范式:在 ARM 硬件上进行原生编译,消除交叉编译环节。这是因为近年来 ARM 服务器硬件性价比质变,AWS 的 Graviton 系列和 Hetzner 的 CAX 实例提供了足够性能,使在云端用 ARM 机器为 ARM 目标设备编译软件更简单、可靠。
在此基础上,yoe 直接使用 Alpine、Debian 和 Ubuntu 作为基础发行版,无需像 Yocto 那样从零构建整个根文件系统。这意味着嵌入式设备的根文件系统可继承主流发行版的包维护和安全更新体系,而非依赖嵌入式团队手工维护的并行包仓库。Python 的 pip 和 JavaScript 的 npm 可直接在目标设备上运行,Go 和 Zig 这类内置优秀交叉编译支持的语言也不受构建系统约束。构建缓存确保同一软件组件不会重复构建。
作者强调小团队困境,澄清「小」不等于「业余」。这些团队可能是只有几个工程师的创业公司,却要维护数百到数千台工业设备。他们没财力雇佣专职构建工程师,对他们来说,简单性和部署速度比二进制可重现性和全源码构建更重要。而 Yocto 设计默认假设用户有专门团队维护配方、处理交叉编译故障、给供应商 BSP 打补丁,现实中大量团队做不到。
AI 在 yoe 新方案中占重要位置。yoe 的终端用户界面(TUI)设计为快速响应,支持交互式监控和深入调试,更重要的是,其操作界面和错误信息设计为「人和 AI 都能理解」。构建错误不再以数千行原始日志形式呈现,而是转化为清晰、可操作的提示,AI 代理能直接理解和响应。作者明确表示,AI 代理应能理解 yoe 的工具链,处理大部分低级别的构建和集成工作,如为新的 Python 包添加构建配置、诊断编译错误、管理依赖版本冲突。这为「AI 辅助嵌入式开发」铺设了基础设施。
yoe 目前处于 pre - 1.0 的早期实验阶段,以 Apache 2.0 许可证开源。项目声称已做到「过去需花一天与交叉编译斗争的工作,现在从想法到在目标硬件上运行只需几分钟」。分布式缓存和远程构建执行器等高级功能还在规划中。作者表示,这并非要取代所有场景下的 Yocto,对于需要合规认证、比特级可重现性、完全从源码构建且刻意冻结多年的深度嵌入式受监管产品,Yocto 仍是正确工具。yoe 瞄准的是不同设计点:动态的、持续连接的、用现代语言构建的、由小团队维护的嵌入式设备,就像 Alpine Linux 之于 Debian,前者没取代后者,但回答了后者未解决的问题。
嵌入式构建系统创新在过去十年近乎停滞。Yocto 社区多年来与「配方维护」难题斗争,数千个软件包需手工编写配方适配交叉编译,Python、Rust、Node.js 等现代语言生态加入让工作难度指数级增长。作者提到的细节很有说服力:让一个 Python 包在 Yocto 中正确构建有时需一整天,而在 yoe 的原生编译模式下,从想法到在目标硬件上运行只需几分钟。这不是 Yocto 的错,它诞生于以 C 语言和 autotools 为主的年代,当时没人预见 pip、npm 和 cargo 会成软件分发主流方式。但问题是,行业前进了,工具却没跟上。
yoe 的价值或许不在于能否取代 Yocto,而在于它敢于重新审视行业默认的「既定前提」:交叉编译是否必要?一切从源码构建是否合理?构建系统是否应为 AI 时代做好准备?构建系统是否应默认用户有专职构建团队?这些问题在 Yocto 统治嵌入式 Linux 的二十年里几乎未被认真探讨,而 yoe 将它们摆上了桌面。无论 yoe 最终能否获社区和供应商广泛支持,仅让这些问题公开讨论,就是对嵌入式行业的有价值推动。

被折叠的 条评论
为什么被折叠?



