Show HN 上这个 132K 的 POSIX-UEFI,把「在固件层面写 C」这件事又拉回民间
今天在 HN 上刷到一个低调的 Show 帖,作者管它叫 POSIX-UEFI——一个只有约 132K 源码、无依赖的 UEFI POSIX 兼容层和构建环境。标题看着不起眼,但点进去想了几分钟,这东西其实挺戳开发者的。
简单说,它给 EFI 应用提供常规的 libc API,同时在 POSIX 系统上给你一套 SDK,用 Clang 或 gcc 都能构建。API 远不如 GNU-EFI 或 EDKII 完整,所以作者干脆做了个「无缝对接」:你可以直接在它上面挂那些头文件,把 API 扩展开。它也不是一个完全符合 POSIX 标准的完整 libc,更多是包了一层固件自带的功能加少量补充,但日常用例够用了。因为足够精简又无依赖,塞进任何项目都不费劲。
那句「extremely small (~132K of source only)」和「easy to integrate into any project」值得画个重点。我理解它的位置:不想为了写个固件层的小工具就把整个 EDKII 那套庞然大物拖进来的时候,这个轻量层能把你的日常 C 编程习惯直接搬到 EFI 里,还能无缝补 GNU-EFI 或 EDKII 的头文件。
仓库里带了一堆例子,从最基础的「Hello World」,到显示 PNG 开机画面,再到以 ELF 格式加载「kernel」这种更复杂的活儿。后两个其实是不少搞 bootloader、裸机或嵌入式的人真正在找的东西——不是玩具,是有真实硬件触感的分层演示。
最有意思的一点:作者明确说这是 100% AI-free 的,而且多年里在几乎所有 VM 和大量真机上被志愿者实测过,现在自认为 feature complete、稳定、基本无 bug,未来可能只会为有问题的固件补一些 workaround。像「bug-free by now」这种话,敢在小圈子项目里这么说,一般是真把它用透了。
我不会把它吹成能替代 GNU-EFI 或 EDKII——作者自己都反复强调 API 不全,定位就是「日常够用的轻量层」。它的价值恰恰在取舍:只想在 EFI 里快速跑点东西、又不想被重型构建系统劝退的人,这是个能少踩很多坑的入口。当然,它绕不开一个现实问题:真机上的固件千奇百怪,作者也承认未来可能还得为 buggy 固件打补丁,所以「真机部署前先在 VM 里跑一遍」这条老经验依旧成立。
仓库在 GitLab,地址 gitlab.com/bztsrc/posix-uefi。要是你平时写 bootloader、搞 UEFI 应用,或者被 EDKII 的构建搞到头大,可以翻翻那批 example,比盯文档直观得多。