- Debian oficializa la adopción de
time_t de 64 bits incluso en arquitecturas de 32 bits a partir de Debian 13, para bloquear por adelantado el problema Y2K38 (Unix Epochalypse)
- Debido a las limitaciones del
time_t de 32 bits existente, después del 19 de enero de 2038 podría ocurrir que la hora retroceda hasta 1900, por lo que decidieron no seguir dejando este problema sin atender
- El hardware de 64 bits ya es seguro, pero se enfatiza la necesidad de actuar con anticipación porque Debian sigue teniendo demanda en dispositivos de 32 bits sensibles al costo, como embebidos e IoT
- Se está llevando a cabo un trabajo a gran escala para migrar simultáneamente el tipo
time_t, distribuido en un total de 6,429 paquetes, asumiendo de una vez la ruptura de compatibilidad ABI
- Algunas arquitecturas heredadas con soporte legado, como i386 y hurd-i386, quedarán como excepción, aunque también se menciona la posible introducción de una nueva arquitectura x86 (i686) basada en
time_t de 64 bits
Respuesta de Debian al bug Y2K38: transición a tiempo de 64 bits
- Debian cambiará al tiempo de 64 bits en todos los entornos, excepto en parte del hardware más antiguo que todavía soporta, para evitar el próximo problema Y2K38 o Unix Epochalypse
- Con esto se previene el error en los valores de tiempo causado por exceder el rango de un
signed int de 32 bits, previsto para el 19 de enero de 2038
Contexto del problema Y2K38 y Unix Epochalypse
- El problema Y2K38 ocurre en sistemas Unix que representan los segundos transcurridos desde el 1 de enero de 1970 con un
signed int de 32 bits; después de 2038 se produce un desbordamiento y la hora puede regresar por error al pasado, como 1900
- Al igual que el antiguo Y2K (problema del año 2000), esto se origina en una decisión de arquitectura de elegir un formato de datos demasiado corto
- En el caso de Y2K, la respuesta anticipada de los desarrolladores ayudó a evitar un caos mayor
- El software para hardware de 64 bits ya está a salvo, pero Debian sigue usándose ampliamente en entornos embebidos, de bajos recursos y heredados
Principales medidas de Debian
- A partir del lanzamiento de Debian 13 "Trixie", se aplicará por defecto
time_t de 64 bits en todas las arquitecturas principales
- El hardware de 64 bits ya está protegido, pero los dispositivos embebidos y el hardware heredado basados en procesadores de 32 bits presentan más problemas
- Ese tipo de equipos sigue utilizándose en sectores sensibles al costo y de gran volumen de distribución, como control automotriz, IoT, televisores y routers
- Muchos equipos nuevos usan Linux compilado a medida, como OpenEmbedded, Alpine, Android o Gentoo, pero se espera que los dispositivos embebidos basados en Debian sigan vigentes durante varios años más
Implementación y cambios
- Las variables
time_t están distribuidas en 6,429 paquetes, por lo que se necesitó un trabajo de gran escala
- Como este cambio puede romper la compatibilidad de ABI (interfaz binaria de aplicación), se ajustaron al mismo tiempo todas las bibliotecas y paquetes relacionados
- Según el equipo de mantenimiento, este trabajo ya está completado y suficientemente probado
Excepciones y planes futuros
- El port de i386 (x86 tradicional) seguirá manteniendo
time_t de 32 bits para conservar la compatibilidad de ejecución con binarios existentes
- Podría discutirse por separado la aplicación de tiempo de 64 bits y una ISA (arquitectura de conjunto de instrucciones) moderna en la arquitectura i686
- El port hurd-i386 no hará la transición por falta de soporte del kernel; en su lugar, está en marcha una migración hacia hurd-amd64
Notas para desarrolladores
- Los desarrolladores pueden probar si su software se rompe o no con la adopción de variables de tiempo de 64 bits siguiendo la guía publicada en la wiki de Debian
- Más detalles y documentación técnica están disponibles en la wiki de Debian
1 comentarios
Comentarios en Hacker News
time_tde 64 bits me acordaré de élmm/yy) usa esa representación porque es cómoda y corta; alcanza de sobra para la vida útil de la tarjeta, pero en 2100 podría causar problemas de conversión; gran parte de Y2K venía de problemas de UI (campos de texto de dos caracteres,+1900hardcodeado, etc.); el bug de Y2K que vi directamente fue en un foro de internet que pasó de 1999 a 19100 (un simple error de salida); Y2K no era solo un problema de COBOLintsimple con 0 en 1900, se habrían ahorrado más bytes todavía; con 3 bytes se cubre desde 1900 hasta unos 44,000 días después, y con 2 bytes incluso alcanza hasta ~2070time_tde 64 bits resolverá el Epochalypse, pero no todos los sistemas simplemente pasarán a segundos de 64 bits; ext4 ya cambió a una resolución fraccional de 30 bits (a nivel de nanosegundos) y 34 bits para los segundos, pero aun así volverá a tener problemas dentro de varios siglos; supongo que en algún momento terminaremos estableciéndonos en timestamps de 128 bits con 64 bits de segundos + 64 bits fraccionales, y con eso se cubriría todo el futuro predecible de la historia humanatime64_ten todos los ports de 32 bits excepto i386; i386 es la única excepción por compatibilidad binaria existente, y todos los demás, incluido m68k, ya fueron cambiados; yo mismo hice la transición de m68k, powerpc, sh4 y hppatime_tno es una variable sino un tipo de datotime_trealmente aparece por todos lados. Aparece en el código fuente de 6,429 de 35,960 paquetes. Los paquetes que exponen en su ABI estructuras que incluyentime_tdeben migrar toda su ABI al mismo tiempo”; la wiki lo explicaba con más claridad que el artículoRLIMIT_STACK; por ejemplo,ulimit -s 4000da una pila de 4MB; para subirlo más hay que editar/etc/security/limits.confy volver a iniciar sesiónhttp post jsonMAX_ARG_STRLENy recompilar el kernel; otra opción es usar una máquina con mayor tamaño de página (por ejemplo, un kernel RHEL Arm con páginas de 64k); pero es mucho más fácil usar pipes en vez de un buffer de comandos para pasar datos entre procesostime_tde 64 bits para usarla