Dia do Programador: Porquê o Dia 256 e o Limite de 2038
Hoje, 13 de Setembro, é o Dia do Programador. A data não é arbitrária: é o dia 256 do ano (num ano bissexto cai a 12 de Setembro). Em binário, 256 escreve-se 1 0000 0000 — nove bits, mas o significado está no byte: 256 é o número de valores distintos que um byte de 8 bits representa (2^8), e é a maior potência de 2 que cabe num ano de 365 dias. Num campo que vive de potências de dois, o dia 256 é a escolha óbvia.
De Petição a Feriado Oficial
A ideia partiu de dois programadores russos, Valentin Balt e Michael Cherviakov, que em 2002 começaram a recolher assinaturas para oficializar a data. Em 11 de Setembro de 2009, o presidente Dmitry Medvedev assinou o decreto nº 1034, que instituiu o Dia do Programador na Rússia como feriado profissional na “256.ª do dia do ano”. A celebração espalhou-se depois pelo resto do mundo como International Programmers’ Day, sem estatuto oficial na maioria dos países.
O Que Isto Tem a Ver com Sistemas
A mesma contagem binária que dá nome ao feriado está por trás de um dos limites mais conhecidos da computação: o limite de 2038. O Unix time conta os segundos desde 1 de Janeiro de 1970 (a Unix epoch). Em sistemas de 32 bits, esse contador é um inteiro com sinal de 32 bits, com máximo em 2.147.483.647 segundos. Verificado na linha de comandos:
date -u -d @2147483647
# Tue Jan 19 03:14:07 UTC 2038
Um segundo depois, o contador transborda para -2.147.483.648, que as bibliotecas C interpretam como 13 de Dezembro de 1901. Certificados deixam de validar, agendamentos recusam executar, logs ficam com datas absurdas. Não é especulação: é aritmética de complemento para dois a rebentar.
Quem Está em Risco
O risco não está nos servidores de 64 bits actuais, está no equipamento legado de 32 bits que uma PME tem espalhado pela rede:
- Routers e switches antigos com firmware nunca actualizado.
- Câmaras IP, NVRs e impressoras de rede — muitos correm Linux de 32 bits. O artigo sobre proteger IoT na rede LAN já falava do risco destes equipamentos. 2038 dá-lhes um prazo natural de substituição.
- PLC e controladores industriais com ciclos de vida de 15-20 anos, exactamente a janela que cruza Janeiro de 2038.
- Firmware congelado de vendors que já não existem ou não publicam actualizações.
A falha manifesta-se de formas subtis: um certificado TLS com validade para 2039 é rejeitado como “ainda não válido” por uma biblioteca que compara datas em 32 bits, mesmo num sistema de 64 bits que use uma biblioteca de 32 bits no caminho de validação.
O Que Já Foi Feito e o Que Falta
O kernel Linux resolveu a parte do kernel na versão 5.6 (Março de 2020): o código interno passou a usar timestamps de 64 bits e as syscalls *_time64 permitem a sistemas de 32 bits usar time_t de 64 bits. No espaço de utilizador, a musl libc usa 64 bits por omissão desde a 1.2.0, e a glibc suporta compilação com -D_TIME_BITS=64 desde a 2.34. O problema remanescente é o mais difícil: firmware congelado em toolchains antigos, que nenhuma distribuição pode actualizar.
Em 2038 o limite passa a ser administrativo, não técnico: máquinas de 64 bits chegam até ao ano 292.473.206.593. Quem gere uma PME deve fazer o inventário em 2026, não em 2037 — como com o EOL do SharePoint 2016/2019 ou o SQL Server 2016, a substituição antecipada é sempre mais barata do que a gestão de crise.
Um Bolo em Binário
A tradição do dia, herdada da Rússia, é simples: programadores fazem um bolo com “256” escrito na cobertura, frequentemente em binário — 11111111 em cima de 00000000 (255) ou 1 0000 0000 (256). Se hoje encontrar alguém com um bolo desses, já sabe ler o motivo.