2025年10月13日,加州州长纽森签署了《数字年龄保障法》(AB 1043),要求所有操作系统从 2027 年 1 月 1 日起收集用户年龄信息。法案一出,开源社区炸了锅——Linux 发行版没有中央化的用户账户体系,也没有商业公司替你做合规,强制收集年龄信息等于直接掐断在加州的分发渠道。几周后,立法者提出修正案 AB 1856,把开源操作系统排除在适用范围之外。一场差点发生的"合规灾难",暂时收场。
原法案为什么让开源社区如此紧张
AB 1043 的核心要求很直接:操作系统必须验证用户年龄,确保未成年人访问数字内容时受到适当限制。对 macOS、Windows、iOS、Android 来说,这不算大事——它们已经有登录体系、家长控制、App Store 审核等基础设施,加一层年龄验证只是产品迭代。
但 Linux 发行版的情况完全不同:
- 没有强制登录体系:Linux 安装过程不要求创建账户或提交个人信息,这是很多用户选择 Linux 的原因之一。
- 分发渠道分散:ISO 镜像通过 mirrors、BitTorrent、FTP 等方式全球分发,没有统一的"上架审核"入口。
- 社区驱动,无商业主体担责:Debian、Arch、Fedora 等发行版由社区维护,没有公司法务团队去对接加州监管要求。
如果原法案不加区分地适用,Linux 发行版要么在安装流程中硬塞一个年龄收集步骤(违背开源哲学),要么干脆停止在加州提供下载。后者不是夸张——社区反馈中直接用了"扼杀"这个词。
AB 1856 修正案的具体内容
修正案 AB 1856 将"开源操作系统"从 AB 1043 的适用范围中明确剔除。关键定义包括:
- 软件源代码公开可获取;
- 由社区或非营利组织维护,不以商业盈利为主要目的;
- 用户可以自由修改和再分发。
这基本覆盖了主流 Linux 发行版以及 FreeBSD、OpenBSD 等系统。修正案的逻辑是:开源系统的用户本身就有更高的技术能力和自主意识,强制年龄收集的收益极低,而合规成本足以摧毁整个分发生态。
不过要注意:豁免只覆盖操作系统本身,不覆盖运行在 Linux 上的浏览器、应用商店或游戏平台。Chrome、Steam 等仍然需要遵守年龄验证要求。
开源项目如何主动声明合规身份
虽然 AB 1856 提供了法律豁免,但开源项目在实际分发中仍然可能遇到平台审核、镜像站点政策等间接压力。主动在项目中声明合规身份,可以减少误解和摩擦。
下面是一个实用的示例:为你的开源项目添加合规元数据文件,并用脚本自动检查分发配置。
1. 创建合规声明文件
在项目根目录放置 compliance-manifest.yml:
# compliance-manifest.yml
# 开源操作系统合规声明 - 加州 AB 1043 / AB 1856 豁免
project:
name: "MyDist Linux"
version: "2025.1"
license: "GPL-2.0"
source_url: "https://github.com/mydist/linux"
exemption:
jurisdiction: "California, USA"
statute: "AB 1856"
parent_statute: "AB 1043 (Digital Age Assurance Act)"
basis: "open_source_operating_system"
criteria_met:
- source_code_publicly_available: true
- community_or_nonprofit_maintained: true
- freely_modifiable_and_redistributable: true
effective_date: "2027-01-01"
age_verification:
implemented: false
reason: "Exempt under AB 1856; no centralized user account system"
contact:
compliance_email: "compliance@mydist-project.org"
community_forum: "https://forum.mydist-project.org"
这个文件的作用是让镜像站点、CDN 提供商、法务审查人员一眼看到项目属于豁免范围,避免误判。
2. 分发配置检查脚本
下面的 Shell 脚本检查项目是否满足豁免条件,并验证合规声明文件是否存在且完整:
#!/usr/bin/env bash
# check-compliance.sh — 检查开源项目是否满足加州 AB 1856 豁免条件
set -euo pipefail
PROJECT_DIR="${1:-.}"
MANIFEST="$PROJECT_DIR/compliance-manifest.yml"
echo "=== 加州 AB 1856 豁免合规检查 ==="
echo "项目目录: $PROJECT_DIR"
echo ""
# 检查合规声明文件是否存在
if [[ ! -f "$MANIFEST" ]]; then
echo "❌ 缺少 compliance-manifest.yml"
echo " 建议: 参照模板创建该文件,声明项目豁免身份"
exit 1
fi
echo "✅ compliance-manifest.yml 存在"
# 检查源代码是否公开可获取
if git -C "$PROJECT_DIR" remote get-url origin &>/dev/null; then
REPO_URL=$(git -C "$PROJECT_DIR" remote get-url origin)
echo "✅ 源代码仓库: $REPO_URL"
else
echo "⚠️ 未检测到 Git 远程仓库,请确认源代码公开可获取"
fi
# 检查许可证文件
for lic in LICENSE LICENCE COPYING COPYING.LESSER; do
if [[ -f "$PROJECT_DIR/$lic" ]]; then
echo "✅ 许可证文件: $lic"
break
fi
done
# 检查合规声明中的关键字段
REQUIRED_FIELDS=("project.name" "exemption.statute" "exemption.basis" "age_verification.implemented")
MISSING=0
for field in "${REQUIRED_FIELDS[@]}"; do
# 简单的 YAML 字段检查(不依赖 Python/YAML 解析器)
key=$(echo "$field" | sed 's/\./: /; s/\./: /')
if grep -qi "$key" "$MANIFEST"; then
echo "✅ 字段 $field 已声明"
else
echo "❌ 字段 $field 缺失"
MISSING=$((MISSING + 1))
fi
done
echo ""
if [[ $MISSING -eq 0 ]]; then
echo "🎉 合规检查通过 — 项目满足 AB 1856 豁免条件"
else
echo "⚠️ 有 $MISSING 个必要字段缺失,请补充 compliance-manifest.yml"
exit 1
fi
运行方式:
# 在项目根目录执行
chmod +x check-compliance.sh
./check-compliance.sh /path/to/your/project
这个脚本不依赖复杂工具链,任何 Linux 发行版的构建环境都能跑。把它加入 CI 流程,每次发布前自动检查合规状态。
豁免之外的隐患
AB 1856 解决了操作系统层面的直接威胁,但开源生态面临的合规压力不会消失:
- 浏览器和应用层仍需合规:Firefox、Chromium 虽然也是开源项目,但它们不是操作系统,不在豁免范围内。Mozilla 已经在研究年龄验证的技术方案。
- 镜像站点的间接影响:加州的大学和机构镜像站可能因为政策不确定性而暂停服务,即使法律上开源系统被豁免。
- 其他州的连锁反应:德州、佛州等已有类似年龄验证立法,但未必都包含开源豁免条款。开源项目需要逐州关注。
- 国际分发的影响:欧盟的数字服务法案也有年龄相关要求,合规策略需要全球视角。
开源项目应对监管的实用清单
基于这次事件,开源项目维护者可以做以下准备:
- 在项目文档中明确声明项目性质——开源、社区维护、非商业目的,这些是豁免的法律基础。
- 维护一个合规元数据文件——如上面的
compliance-manifest.yml,让分发渠道和审查方快速理解项目身份。 - 关注目标市场的立法动态——加州只是起点,美国其他州和欧盟都在推进类似法案。订阅 EFF、FSF 的立法追踪邮件列表是低成本方式。
- 不要在安装流程中添加不必要的个人信息收集——一旦加了,就很难去掉,而且会改变项目的根本属性。
- 与镜像站点和 CDN 提供商保持沟通——提前告知合规状态,避免他们因误解而中断服务。
这次加州的修正是一个好消息,但更重要的信号是:立法者开始意识到,一刀口的监管设计会伤害开源生态。开源社区需要持续参与政策讨论,不能只在法案签署后才反弹。