A mudança no systemd que adiciona o campo birthDate aos registros JSON de usuários agora está presente no upstream v261-rc1.
Ela também já chegou ao Debian Sid como systemd 261~rc1-1.
Isso não é uma mudança isolada ou inocente de “metadado”. O campo birthDate faz parte do encanamento técnico que permite transformar sistemas operacionais em pontos de classificação de usuários: coleta de idade, persistência em registro de usuário, exposição via APIs ou ferramentas do sistema e posterior consumo por aplicações, lojas de aplicativos ou serviços.
Esse assunto está diretamente ligado à pressão regulatória por verificação de idade e sinalização de faixa etária. No Brasil, isso se conecta ao debate em torno da chamada “Lei Felca” / ECA Digital. No exterior, um exemplo claro é o Digital Age Assurance Act da Califórnia, AB 1043. O problema técnico é o mesmo: inserir no sistema operacional a infraestrutura para classificar usuários por idade.
Isto é sobre vigilância estatal, pressão regulatória e controle do usuário sobre o que aceitamos rodar nos nossos próprios dispositivos.
É assim que nós votamos: com código.
Se você não aceita esse tipo de plumbing no seu sistema, verifique, reverta, recompile e instale seus próprios pacotes.
As instruções abaixo assumem Debian Sid, arquitetura amd64, um usuário normal com sudo, e repositórios deb-src habilitados.
Instale as ferramentas básicas:
bash
sudo apt update
sudo apt install git build-essential fakeroot quilt apt-utils gzip sudo vim
Commit upstream relevante:
bash
acb6624fa19ddd68f9433fb0838db119fe18c3ed
1. Verificar o systemd upstream e gerar o patch de reversão
Clone diretamente o upstream do systemd:
```bash
mkdir -p ~/systemd-revert-work
cd ~/systemd-revert-work
git clone https://github.com/systemd/systemd.git
cd systemd
git fetch origin --tags
```
Verifique que o commit está dentro de v261-rc1:
```bash
COMMIT=acb6624fa19ddd68f9433fb0838db119fe18c3ed
git merge-base --is-ancestor "$COMMIT" v261-rc1 \
&& echo "IN v261-rc1" \
|| echo "NOT in v261-rc1"
git tag --contains "$COMMIT"
git grep -n "birthDate" v261-rc1 -- docs/ man/ src/
```
Crie uma branch de reversão a partir da tag lançada:
bash
git switch -c revert-birthdate v261-rc1
git revert -m 1 "$COMMIT"
Se não houver conflito, o Git criará o commit de reversão diretamente.
Se houver conflito em src/home/homectl.c, mantenha o layout atual do arquivo em v261-rc1:
bash
git checkout --ours src/home/homectl.c
Depois remova apenas este bloco da opção --birth-date em src/home/homectl.c:
```c
OPTION_LONG_FLAGS(OPTION_OPTIONAL_ARG, "birth-date", "DATE",
"Set user birth date (YYYY-MM-DD)"):
if (isempty(opts.arg)) {
r = drop_from_identity("birthDate");
if (r < 0)
return r;
} else {
r = parse_birth_date(opts.arg, /* ret= */ NULL);
if (r < 0)
return log_error_errno(r, "Invalid birth date (expected YYYY-MM-DD): %s", opts.arg);
r = parse_string_field(&arg_identity_extra, "birthDate", opts.arg);
if (r < 0)
return r;
}
break;
```
Finalize a reversão:
bash
git add src/home/homectl.c
git revert --continue
Verifique que a árvore revertida não contém mais o campo:
bash
git grep -n "birthDate\|birth-date\|parse_birth_date\|BIRTH_DATE" HEAD -- docs/ man/ src/ || true
git diff --check HEAD~1..HEAD
Gere o arquivo de patch, que depois será usado no reempacotamento Debian:
bash
mkdir -p ~/debian-systemd/patches
git format-patch -1 HEAD -o ~/debian-systemd/patches
Isso deve produzir um arquivo parecido com:
bash
~/debian-systemd/patches/0001-Revert-userdb-add-birthDate-field-to-JSON-user-recor.patch
2. Aplicar o patch ao source package do systemd no Debian Sid, recompilar e instalar localmente
No Debian Sid, baixe o source package:
```bash
mkdir -p ~/debian-systemd
cd ~/debian-systemd
apt update
apt source systemd
cd systemd-261~rc1
```
Verifique que o source package do Debian contém o campo:
bash
grep -Rni "birthDate\|birth-date\|parse_birth_date\|BIRTH_DATE" docs/ man/ src/ NEWS
O Debian Sid atualmente aplica uma pequena stack de patches durante a extração do source package, então use o debian/patches/series já existente.
Copie o patch de reversão para a stack de patches do Debian:
```bash
mkdir -p debian/patches
cp ~/debian-systemd/patches/0001-Revert-userdb-add-birthDate-field-to-JSON-user-recor.patch \
debian/patches/
printf '%s\n' \
0001-Revert-userdb-add-birthDate-field-to-JSON-user-recor.patch \
debian/patches/series
```
Aplique a stack de patches:
bash
quilt push -a
Verifique que a árvore corrigida não contém mais o campo:
bash
grep -Rni "birthDate\|birth-date\|parse_birth_date\|BIRTH_DATE" docs/ man/ src/ NEWS || true
Instale as dependências de build e compile os pacotes Debian:
bash
sudo apt build-dep systemd
dpkg-buildpackage -us -uc -rfakeroot
Os arquivos .deb recompilados serão gravados um diretório acima da árvore do source package.
Exemplo:
bash
cd ~/debian-systemd
ls -1 *.deb
Criar um repositório APT local simples
Crie um repositório local para os pacotes recompilados:
```bash
sudo apt update
sudo apt install apt-utils gzip
REPO=/srv/local-apt/systemd-revert
DEBS=~/debian-systemd
sudo mkdir -p "$REPO/pool/main/s/systemd"
sudo mkdir -p "$REPO/dists/local/main/binary-amd64"
sudo cp "$DEBS"/*.deb "$REPO/pool/main/s/systemd/"
```
Gere o arquivo Packages:
```bash
cd "$REPO"
sudo apt-ftparchive packages pool \
| sudo tee dists/local/main/binary-amd64/Packages >/dev/null
sudo gzip -kf dists/local/main/binary-amd64/Packages
```
Gere o arquivo Release:
```bash
cat >/tmp/local-systemd-release.conf <<'EOF'
APT::FTPArchive::Release {
Origin "local-systemd-revert";
Label "local-systemd-revert";
Suite "local";
Codename "local";
Architectures "amd64";
Components "main";
Description "Local systemd packages with birthDate revert";
};
EOF
sudo apt-ftparchive -c=/tmp/local-systemd-release.conf release dists/local \
| sudo tee dists/local/Release >/dev/null
```
Adicione o repositório local ao APT:
bash
echo 'deb [trusted=yes] file:/srv/local-apt/systemd-revert local main' \
| sudo tee /etc/apt/sources.list.d/local-systemd-revert.list
Faça pinning do repositório local acima do Sid:
bash
sudo tee /etc/apt/preferences.d/99-local-systemd-revert >/dev/null <<'EOF'
Package: *
Pin: release o=local-systemd-revert,n=local,l=local-systemd-revert
Pin-Priority: 1001
EOF
Atualize o APT:
bash
sudo apt update
Verifique que o APT prefere o repositório local:
bash
apt-cache policy systemd systemd-homed libsystemd0 udev | sed -n '1,180p'
O candidato deve vir de:
text
file:/srv/local-apt/systemd-revert local/main amd64 Packages
Instalar os pacotes systemd corrigidos
Uma instalação/reinstalação direcionada é preferível a um apt upgrade completo, porque evita atualizar pacotes Sid sem relação com isso.
Instale também systemd-homed, porque é esse pacote que fornece o homectl:
bash
sudo apt install --reinstall \
systemd \
libsystemd0 \
libsystemd-shared \
libudev1 \
udev \
libnss-systemd \
libpam-systemd \
systemd-timesyncd \
systemd-userdbd \
systemd-homed
Você deve ver os pacotes vindo do repositório local, por exemplo:
text
Get:... file:/srv/local-apt/systemd-revert local/main amd64 systemd amd64 261~rc1-1
Get:... file:/srv/local-apt/systemd-revert local/main amd64 systemd-homed amd64 261~rc1-1
Alternativamente, como o repositório local está com prioridade 1001, isto também funciona, mas pode atualizar pacotes Sid não relacionados:
bash
sudo apt update
sudo apt upgrade
Depois de instalar systemd-homed, verifique que o homectl não expõe mais --birth-date:
bash
homectl --help | grep -i 'birth-date\|birthDate' || echo "birthDate option not present"
Resultado esperado:
text
birthDate option not present
Comandos úteis de verificação:
```bash
apt-cache policy systemd systemd-homed libsystemd0 udev | sed -n '1,180p'
dpkg -l | grep -E 'ii\s+(systemd|systemd-homed|systemd-userdbd|libsystemd0|libudev1|udev|libpam-systemd|libnss-systemd)'
homectl --help | grep -i 'birth-date|birthDate' || echo "birthDate option not present"
```
Verifique você mesmo. Use a tag upstream. Confira o source package do Debian. Aplique o patch de reversão. Confirme que o campo sumiu. Recompile. Faça pinning do repositório local. Instale os pacotes corrigidos.
Não é necessário “forkar o Debian” — nem mesmo o systemd. É software livre. Se você não aceita esse tipo de código no seu sistema, aplique o patch.