A Debian desktop toy shows a Ukrainian flag only when your locale is Russian

One line of C in xsnow: if the language is 'ru', raise a Ukrainian flag's odds to 30%. The maintainer is also the upstream author, so a complaint to Debian's list ran straight into the question of hidden, locale-based behaviour.

In brief

The xsnow screensaver's maintainer added code that shows a Ukrainian flag at 30% probability for Russian-locale users, versus 2% for others. A complaint calling it discrimination misfired: the DFSG governs licenses, not behaviour.

Russ Allbery flagged the real worry: software that secretly changes behaviour by locale. The thread's flip, from a Debian dev: the flag already appeared at random; the patch only changed the odds.

Thirty lines of C that show a Ukrainian flag only to Russian locales

xsnow desktop toy showing snow and trees
xsnow desktop toy showing snow and trees

xsnow is a decades-old desktop toy that drops snow and trees on your screen. LWN covered a change its maintainer Willem Vermin made to scenery.c. Vermin is both the Debian packager and the upstream author. When the user's language is set to Russian, a Ukrainian-flag graphic labelled EXTRATREE appears with 30% probability, versus 2% for everyone else.

if (global.Language && !strcmp(global.Language,"ru") && drand48() < 0.3)
   tt = MAXTREETYPE;

On 14 June 2026 a complainant named Alexander Ivanov took it to the Debian development list, arguing it violated the DFSG (Debian Free Software Guidelines) points 5 and 6, which bar discrimination against persons, groups, or fields of endeavour. That reading got corrected fast: the DFSG governs licenses, not runtime behaviour, and xsnow's license is fine. Russ Allbery agreed the DFSG was a dead end but raised the real question of whether Debian wants software whose behaviour changes secretly based on locale.

"software that behaves in deceptive ways, which includes hidden behavior changes based on usernames, locales, or other local settings... is probably not something that we want to have in Debian. It's a very slippery slope." — Russ Allbery, quoted in the article

As of the piece, no formal bug had been filed, so nothing had happened: mailing-list complaints don't move Debian, formal bugs do.

The thread: the flag was always there; only the odds changed

The fact that reframes every alarmed take came from a Debian developer: xsnow already showed these flags at random, and the patch only raised the probability.

"if you're in a location where displaying the Ukraine flag will get you shot, 1) it was already not safe to run xsnow, and 2) much more importantly, I genuinely hope you can successfully escape your situation." — Josh Triplett, Debian developer

The strongest counter wasn't about the flag's message but about consent and disguise. A reader zeroed in on the EXTRATREE label in the code.

"when you're disguising the flag in code as an 'EXTRATREE,' that signals to me that you're trying to slip through a surprise without my noticing." — a commenter objecting to speech put in his mouth

The most-quoted comment in the thread described the on-the-ground stakes: in Russia a Ukrainian flag on a work monitor "can result in severe problems for you (like losing you job, or worse)," reposted at the top level by a reader who found it damning. Others found the whole panic overblown, since xsnow is a novelty screensaver on Xorg that almost nobody has installed.

The recurring test the thread reached for was substitution: would a Palestinian flag for Hebrew locales, or an LGBT flag for Persian ones, be reverted instantly? The answer decides whether this is protest or precedent. One distro didn't wait for the argument to resolve: Slackware-current shipped the June update but applied an ALT Linux patch stripping the protestware out.

Get breakdowns like this every day

The top Hacker News stories, unpacked — by email, Telegram, or RSS.

Next story · 9 of 26 Read more
🌍Other

Europe's sovereign digital ID needs Google's blessing to trust your phone

The EU wallet asks Google Play Integrity whether your phone is genuine. A GrapheneOS or e/OS device fails not because it's insecure, but because it isn't Google's — and Switzerland already showed there's another way.

★ 679 · 💬 289 · waag.org · 4 min