Linux内核中的专有代码现状
Linux内核虽然是开源的(GPLv2协议),但确实包含一些闭源组件,主要是硬件驱动。这些被称为"二进制blob"或"专有固件"的代码通常以两种形式存在:
// 示例:内核配置中常见的专有驱动选项
CONFIG_EXTRA_FIRMWARE="radeon/xxx.bin iwlwifi-xxx.ucode"
CONFIG_FIRMWARE_IN_KERNEL=y
主要闭源组件分布
根据Linux基金会2022年的报告,内核中非开源部分主要包括:
- GPU驱动(NVIDIA/AMD的专有部分)
- 无线网卡固件(如Intel WiFi)
- 某些ARM SoC的启动固件
量化分析
通过分析内核5.15版本:
# 统计固件文件大小
find /lib/firmware -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
# 典型输出:约120MB(占内核源码树的0.8%左右)
技术影响与合规方案
对于需要完全开源的项目,可采用:
// 内核编译时排除专有固件
make menuconfig
# 取消选中:
# Device Drivers -> Generic Driver Options -> Firmware loader -> Build named firmware blobs into the kernel binary
替代方案实现
使用开源替代驱动示例(Nouveau代替NVIDIA专有驱动):
# /etc/modprobe.d/nouveau.conf
options nouveau modeset=1
options nouveau tv_norm=NTSC
深入资源
推荐阅读材料:
- Linux内核文档Documentation/firmware_class/
- FSF的Linux-libre项目文档
- 开源推进联盟的《开源合规指南》