一个给 X11 桌面“下雪”的小程序,最近把 Debian 社区拉进了一场不小的争论。
这个程序叫 xsnow。它本来做的是桌面装饰:飘雪、树木、圣诞老人。但代码里有一个彩蛋:当语言设置为俄语,也就是 ru 时,它会以约 30% 的概率显示乌克兰旗帜;其他语言环境下也可能出现,概率约 2%。
投诉者 Alexander Ivanov 认为,这种按俄语界面提高触发概率的隐藏视觉元素带有政治指向,像一种“protestware”。他还认为这违反 Debian Free Software Guidelines(DFSG)第 5、6 条。
我更在意的不是旗帜本身,而是触发方式。一个软件可以有立场,也可以有彩蛋。但如果它隐藏地读取本地语言设置,并对某一类用户提高触发概率,这就不只是作者表达了。
它开始碰到发行版仓库的信任边界。
争议源头:一个按 ru 提高概率的彩蛋
目前能确认的事实并不复杂。
相关代码在 xsnow 的 src/scenery.c。在启用 USE_EXTRATREE 时,如果 global.Language 是 ru,并且随机数小于 0.3,程序会把树木类型切到 MAXTREETYPE。对应图像文件是乌克兰旗帜。
非俄语环境下,也有一次约 0.02 的随机触发。
这不是 Debian 专门加入的补丁。相关代码来自上游 xsnow。更微妙的是,Debian 包维护者 Willem Vermin 同时也是 xsnow 的上游维护者。
这让投诉者没有直接走 bug 系统,而是写信到 Debian 开发邮件列表,希望社区介入。但到原文发布时,投诉者还没有提交正式 bug。
| 问题 | 已知事实 | 我会怎么判断 |
|---|---|---|
| 软件是什么 | xsnow 是 X11 桌面降雪/装饰程序 | 不是核心组件,但进入官方仓库仍带有信任背书 |
| 触发差异 | 俄语约 30%,其他语言约 2% | 争议点在“隐藏且按本地信息区别对待” |
| 代码来源 | 来自上游,不是 Debian 单独补丁 | 不能写成 Debian 主动植入政治内容 |
| 当前流程 | 原文发布时尚未提交 bug | 邮件抱怨很难直接推动包变更 |
这里有一个容易被忽略的差别:如果程序开关里明写“显示乌克兰旗帜”,用户知道自己启用了什么,那是另一回事。现在的问题是,它藏在 locale 后面。
这对俄语用户尤其敏感。不是所有使用俄语界面的人都住在俄罗斯,也不是所有人都有安全表达政治态度的环境。工作屏幕、公共场合、学校或单位设备上突然出现旗帜,风险可能落到用户身上,而不是落到写代码的人身上。
DFSG 管许可证,不是用来审查所有软件内容
Ivanov 把问题落到 DFSG #5、#6 上。大意是 Debian 的自由软件准则不允许许可证歧视个人、群体,也不允许歧视使用领域。
但 Debian 讨论中,多名参与者指出:DFSG 约束的是许可证条款,不是要求软件行为完全不带政治表达。xsnow 主要采用 GPLv3。就目前线索看,许可证本身没有因为这个彩蛋变得不自由。
这点很重要。
如果把 DFSG 解读成“Debian 仓库里的程序不能出现政治内容”,那会滑向内容审查。开源软件里一直有玩笑、彩蛋、观点表达。Debian 自家的 apt moo 就是老例子。fortune 包也曾因为冒犯性内容,在 2025 年 trixie 发布前被移除。
但 xsnow 这次不只是“有没有表达”。Russ Allbery 的判断更贴近要害:隐藏地根据 locale、用户名或其他用户未预期会影响行为的本地信息改变表现,未必违反 DFSG,但可能不是 Debian 想收录的东西。
我认同这个区分。
DFSG 是门槛,解决“许可证是不是自由”。仓库治理还要解决另一件事:用户安装一个官方包时,能不能合理预期它不会暗中按身份线索改变行为。
对开源维护者来说,这意味着一件很具体的事:如果软件里有按 locale、地区、用户名、主机名触发的隐藏逻辑,最好主动说明、加开关,或者移除差异触发。不要等用户在邮件列表里把它定义成 protestware。
对关注供应链治理的团队来说,动作也很具体:这类包不一定要立刻拉黑,更不该被夸大成恶意软件;但如果它会进入默认镜像、桌面基线或教学/办公环境,至少应延后纳入,等 bug 结论或维护者回应。风险不在破坏系统,而在把未告知的政治表达推给终端用户。
真正会改变结果的是 bug 和项目流程
Debian 给维护者很大裁量权,但不是维护者一个人说了算。
项目有自己的纠偏机制。原文提到,Debian Technical Committee 曾在 2025 年要求回退 systemd 对 /run/lock 的改动;项目也曾在讨论后移除不适合发布的包。也就是说,只要问题被正式提出,Debian 可以把它当作包质量、用户风险或发布适配问题来处理。
但邮件列表上的抱怨,通常不是最有效的入口。
接下来最该看的不是谁在政治上赢了,而是三件事:
- Ivanov 是否提交正式 bug,并把争议从邮件讨论变成可跟踪事项;
- Vermin 是否作为上游和 Debian 包维护者回应,选择保留、加开关、降概率或移除;
- Debian 是否把“按 locale 隐藏触发政治内容”归入应修复的包行为问题。
据原文,截至发布,投诉者尚未提交 bug。原文作者联系 Vermin,询问是否愿意回退乌克兰旗帜显示,也没有得到回复。
这就是这件事目前的边界:Debian 没有认定 xsnow 违规,也没有决定移除或修改它。现有事实只能说明,一个上游彩蛋进入了 Debian 包,并引出了仓库治理问题。
小程序不等于小问题。官方仓库里的软件,靠的不只是许可证合格,也靠用户相信它不会暗中拿本地信息做差异化触发。彩蛋可以有,立场也可以有;但藏起来、按语言群体挑人出现,就失了分寸。
