- O Debian oficializou a adoção de
time_t de 64 bits até mesmo para arquiteturas de 32 bits a partir da próxima versão, Debian 13, para bloquear preventivamente o problema Y2K38 (Unix Epochalypse)
- Devido à limitação do
time_t atual de 32 bits, pode ocorrer um fenômeno em que o tempo volte para 1900 após 19 de janeiro de 2038, e a decisão foi não deixar mais esse problema sem tratamento
- Embora o hardware de 64 bits já esteja seguro, foi enfatizada a necessidade de agir com antecedência porque ainda existe demanda por Debian em dispositivos de 32 bits sensíveis a custo, como embarcados e IoT
- Está em andamento um trabalho de grande escala para migrar simultaneamente o tipo
time_t, distribuído por 6.429 pacotes, aceitando de uma vez a quebra de compatibilidade ABI
- Algumas arquiteturas legadas com suporte, como i386 e hurd-i386, permanecem como exceção, mas também foi mencionada a possibilidade de introduzir uma nova arquitetura x86 (i686) baseada em
time_t de 64 bits
Resposta do Debian ao bug Y2K38: transição para tempo em 64 bits
- O Debian está mudando para tempo em 64 bits em todos os ambientes, exceto em parte do hardware mais antigo ainda suportado, para evitar o problema iminente Y2K38, ou Unix Epochalypse
- Com isso, previne o erro em valores de tempo causado pelo estouro do intervalo de
signed int de 32 bits, previsto para 19 de janeiro de 2038
Contexto do problema Y2K38 e Unix Epochalypse
- O problema Y2K38 ocorre em sistemas Unix que representam os segundos transcorridos desde 1º de janeiro de 1970 com um
signed int de 32 bits; após 2038, acontece um overflow e o relógio pode voltar incorretamente para datas passadas, como 1900
- Assim como o antigo Y2K (bug do ano 2000), isso decorre de uma decisão arquitetural de escolher um formato de dados curto
- Na época do Y2K, foi possível evitar um grande caos graças à ação preventiva dos desenvolvedores
- Softwares para hardware de 64 bits já estão seguros, mas o Debian ainda é amplamente usado em ambientes embarcados, de baixo desempenho e legados
Principais medidas do Debian
- A partir do lançamento do Debian 13 "Trixie", o
time_t de 64 bits passa a ser o padrão em todas as principais arquiteturas
- O hardware de 64 bits já está protegido, mas o problema é frequente em dispositivos embarcados baseados em processadores de 32 bits e hardware legado
- Esses equipamentos ainda são usados em áreas sensíveis a custo e de grande volume de envio, como controle automotivo, IoT, TVs e roteadores
- Muitos equipamentos novos usam Linux compilado sob medida, como OpenEmbedded, Alpine, Android e Gentoo, mas a presença de dispositivos embarcados baseados em Debian deve continuar por vários anos
Implementação e mudanças
- As variáveis
time_t estão distribuídas por 6.429 pacotes, o que exigiu um trabalho de grande escala
- Como essa mudança pode quebrar a compatibilidade ABI (Application Binary Interface), os ajustes foram feitos simultaneamente em todas as bibliotecas e pacotes relacionados
- Segundo a equipe de manutenção, esse trabalho foi concluído e testado de forma suficiente
Exceções e planos futuros
- A porta i386 (x86 legado) continuará usando
time_t de 32 bits e será mantida com o objetivo de compatibilidade de execução de binários existentes
- A aplicação de tempo em 64 bits e de uma ISA (arquitetura de conjunto de instruções) mais moderna na arquitetura i686 pode ser discutida separadamente
- A porta hurd-i386 não será migrada por falta de suporte no kernel; em vez disso, está em andamento um plano de migração para hurd-amd64
Observações para desenvolvedores
- Desenvolvedores podem testar, pelos métodos orientados na wiki do Debian, se seus softwares não quebram com a adoção de variáveis de tempo em 64 bits
- Mais detalhes e documentação técnica estão disponíveis na wiki do Debian
1 comentários
Comentários no Hacker News
time_tde 64 bits vou lembrar delemm/yy) usa essa representação porque é prático escrever curto, e isso basta para a vida útil do cartão, embora em 2100 possa causar problemas de conversão; a maior parte do Y2K veio de problemas de UI (campo de texto com dois caracteres,+1900hardcoded etc.); o bug de Y2K que vivi diretamente foi um fórum da internet que passou de 1999 para 19100 (erro simples de exibição); Y2K não era um problema só de COBOLintsimples com zero em 1900, teria economizado ainda mais bytes; com 3 bytes daria para cobrir de 1900 até cerca de 44.000, e com 2 bytes já seria possível cobrir até ~2070time_tde 64 bits vai resolver a Epochalypse, mas nem todo sistema está simplesmente indo para segundos de 64 bits; o ext4 já mudou para resolução fracionária de 30 bits (nível de nanossegundos) e resolução de segundos de 34 bits, mas mesmo assim o problema deve reaparecer daqui a algumas centenas de anos; imagino que um dia vamos acabar padronizando timestamps de 128 bits com 64 bits para segundos + 64 bits para fração, o que cobriria todo o futuro previsível da história humanatime64_tjá foi concluída em todas as portas de 32 bits, exceto i386; o i386 é a exceção por causa da compatibilidade binária legada, e todos os demais, incluindo m68k, já foram alterados; eu mesmo fiz a transição de m68k, powerpc, sh4 e hppatime_tnão é uma variável, e sim um tipo de dadotime_trealmente aparece em todo lugar. Entre 35.960 pacotes, ele aparece no código-fonte de 6.429. Pacotes que expõem em ABI estruturas contendotime_tprecisam fazer a migração de toda a ABI ao mesmo tempo”; a wiki explicava isso com mais clareza do que a matériaRLIMIT_STACK; por exemplo,ulimit -s 4000define uma pilha de 4 MB; para algo maior, é preciso editar/etc/security/limits.confe fazer login de novoMAX_ARG_STRLENe recompilar o kernel; outra opção é usar uma máquina com tamanho de página maior (por exemplo, kernel RHEL Arm com página de 64k), mas é muito mais fácil usar pipes em vez de buffer de comando para passar dados entre processostime_tde 64 bits