¿Existe alguna versión de OS X / macOS vulnerable al problema del año 2038?

Alnetworkingedor del año 2000, Apple escribió un comunicado de prensa que decía que todas las Mac desde 1984 evitarían el problema del año 2000 y podrían procesar las dates de los próximos miles de años.

La buena noticia es que desde su introducción en 1984, las computadoras Macintosh tuvieron la capacidad de realizar la transición al año 2000. De hecho, el Mac OS y la mayoría de las aplicaciones Mac pueden manejar las dates generadas internamente correctamente hasta el año 29.940.

  • Acceso a la camera de logging en OS X Yosemite y hasta
  • El buscador de OS X por date muestra algunos files en order incorrecto
  • ¿Dónde se metió la carpeta "fusionar" o "mantener ambas" en OS X 10.9 Mavericks?
  • Apple dijo que podemos usar iMovie para hacer vistas previas de aplicaciones, pero no puedo exportar el tamaño correcto usando iMovie
  • Unidad HDD externa vieja no reconocida correctamente en el nuevo gabinete
  • ¿Puede OS X volcar núcleos en el directory de trabajo en lugar de / núcleos?
  • Esta statement se hizo cuando Mac OS 9 era el sistema operativo más reciente.

    Desde entonces, OS X (ahora llamado macOS) es el sistema operativo dominante, que se deriva de Unix. ¿Esto significa que cualquier versión es vulnerable al problema del año 2038 , un problema comparable al problema del año 2000 que afecta a los sistemas de tipo Unix? ¿O la afirmación de Apple acerca de ser compatible con el año 29.940 sigue siendo cierta?

  • ¿Qué distribución de Linux es mejor instalar en un server Mac mini 2011?
  • Mac se bloquea después de instalar XCode
  • Los códigos de caracteres especiales se muestran en la Terminal para signos diacríticos cuando se conecta a un server Ubuntu
  • undelete (-W) con rm (Comandos generales BSD) - Operación no soportada
  • Desconnection de discos de Airport Extreme
  • Poniendo keys SSH que he tomado de Ubuntu
  • 3 Solutions collect form web for “¿Existe alguna versión de OS X / macOS vulnerable al problema del año 2038?”

    Todas las versiones anteriores a OS X 10.6 "Snow Leopard" tienen el problema del año 2038. La mayoría de las instalaciones de 10.6 y todas las instalaciones de 10.7 "León" corrigieron la causa principal del problema. Ya casi se ha ido, pero el error del año 2038 podría sobrevivir en algunas aplicaciones.

    Mi viejo PowerPC Mac ejecuta OS X 10.4.11 "Tiger". Fui a Fecha y hora en Preferences del sistema e intenté ingresar una date posterior a 2038, pero restableció la date al 31 de diciembre de 2037. Sabe que algo anda mal en 2038.

    captura de pantalla de Fecha y hora en OS X 10.4.11

    OS X se deriva de Unix por medio de BSD. Las aplicaciones para OS X usan llamadas al sistema BSD para cosas como abrir files y conectarse a internet. BSD tiene una larga historia y algunas de sus llamadas al sistema provienen de la década de 1980. Una de sus llamadas al sistema es gettimeofday() , que apareció por primera vez en 4.1cBSD. UC Berkeley lanzó 4.1cBSD en 1982 , más de medio siglo antes de 2038. El time de gettimeofday() es un número integer de tipo time_t . Cuenta segundos, donde cero es la época de Unix de 1970-01-01 00:00:00 UTC.

    En mi viejo PowerPC Mac, time_t es un integer de 32 bits con signo. Esto causa el problema del año 2038. Un time_t 32 bits firmado tiene un range de -2147483648 a 2147483647. Esto solo puede contener times de 1901-12-13 20:45:52 UTC a 2038-01-19 03:14:07 UTC. Cuando esto se desborde, gettimeofday() cambiará la date del lunes 19 de enero de 2038 al viernes 13 de diciembre de 1901.

    La solución es la transición de 32 bit time_t a 64 bit time_t . Para OS X, esta transición ocurrió junto con otra transición de pointers de 32 bits a pointers de 64 bits, pero los pointers de 64 bits requieren un procesador de 64 bits. Apple solo ha proporcionado time_t de 64 bits para procesadores de 64 bits. Es posible que los procesadores de 32 bits manejen time_t 64 bits, pero Apple nunca proporcionó esa característica.

    Los comstackdores de Apple han admitido integers de 64 bits en procesadores de 32 bits desde OS X 10.0 "Cheetah", cuando time_t tenía 32 bits y off_t tenía 64 bits. En Unix y BSD, off_t es el tamaño de un file o un disco completo. Un off_t 32 bits limitaría OS X a los discos por debajo de 2 GiB. Apple definió off_t como 64 bits, por lo que OS X trabajó con discos más grandes. Apple definió time_t como 32 bits en 10.0, por lo que una transición a time_t 64 bits tenía que ocurrir más tarde.

    Para mi PowerPC Mac anterior, el file de encabezado <ppc/_types.h> define __darwin_time_t long . Para Intel Mac, el encabezado <i386/_types.h> hace lo mismo. En OS X, long tiene el mismo tamaño que un puntero. Entonces, cuando los pointers se convirtieron en 64 bits, también se convirtió en 64 bits, y time_t también se convirtió en 64 bits, lo que solucionó la causa principal del problema del año 2038.

    La guía de transición de Apple de 64 bits dice: "Antes de OS X v10.6, todas las aplicaciones que se enviaban con el sistema operativo eran aplicaciones de 32 bits. A partir de la versión 10.6, las aplicaciones que se entregan con el sistema operativo generalmente son aplicaciones de 64 bits. " Sé por Wikipedia que 10.6 requiere un procesador Intel y 10.7 requiere un procesador Intel de 64 bits. Una Mac que ejecuta 10.6 en un procesador Intel de 32 bits debe tener aplicaciones de 32 bits. Concluyo que la mayoría de los Mac con 10.6 y todos los Mac con 10.7 tienen aplicaciones de 64 bits con pointers de 64 bits y time_t 64 bits. Apple lanzó 10.7 en 2011, mucho antes de enero de 2038.

    Con 64-bit time_t , el error del año 2038 casi se ha ido, pero podría sobrevivir en algunas aplicaciones. Es posible que las aplicaciones antiguas de 32 bits aún se ejecuten en sistemas más nuevos. Además, las aplicaciones de 64 bits pueden contener errores de encoding o layouts desactualizados, lo que hace que conviertan un time_t 64 bits en 32 bits. Este es un problema para todos los sistemas, no solo para macOS.


    También hay time Mach. El kernel de OS X mezcla BSD con Mach. La mayoría de las aplicaciones obtienen el time de BSD usando gettimeofday() , pero hay una forma de ir por BSD y get el time de Mach. Esto es más difícil: el progtwig llamaría a mach_host_self() para get el puerto de host, luego host_get_clock_service() para get CALENDAR_CLOCK , y finalmente clock_get_time() .

    En mi vieja Mac con 10.4 "Tiger", <mach/clock_types.h> declara la hora como unsigned int (dentro de struct mach_timespec ). Este es un integer de 32 bits sin signo, con un range de 0 a 4294967295, que es de 1970-01-01 00:00:00 UTC a 2106-02-07 06:28:15 UTC. Esto cambiaría el problema del año 2038 por el problema del año 2106. No puede alcanzar el año 29.940.

    Sospecho que host_get_clock_service() era obsoleto desde 10.0 "Cheetah", porque Apple proporcionó forms más rápidas de get el time. Estos fueron los gettimeofday() BSD para el time calendar, y el mach_absolute_time() Apple para el time monotónico. La preference de gettimeofday() coloca el problema en 2038, no en 2106.

    El Capitán no es susceptible:

     #!/usr/bin/perl use POSIX; $ENV{'TZ'} = "GMT"; for ($clock = 2147483641; $clock < 2147483651; $clock++) { print ctime($clock); } 

    Este script perl proporciona el resultado a continuación:

     Family-iMac:~ dude$ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G1004 Family-iMac:~ dude$ /Users/dude/Desktop/2038.pl Tue Jan 19 03:14:01 2038 Tue Jan 19 03:14:02 2038 Tue Jan 19 03:14:03 2038 Tue Jan 19 03:14:04 2038 Tue Jan 19 03:14:05 2038 Tue Jan 19 03:14:06 2038 Tue Jan 19 03:14:07 2038 Tue Jan 19 03:14:08 2038 Tue Jan 19 03:14:09 2038 Tue Jan 19 03:14:10 2038 

    Información recostackda y secuencia de commands compactada a los huesos de este sitio muy interesante .

    Bueno, en lo que se refiere a El Capitan 10.11.6, la respuesta no es tan fácil como usar el script de Perl.

    Si intentamos esto

     macmladen@buk $ touch -t 205012121212 my macmladen@buk $ ls -al total 104 drwx------ 7 root root 4096 Dec 25 13:42 . drwxr-xr-x 23 root root 4096 Dec 4 17:06 .. -rw-r--r-- 1 root root 0 Dec 12 2050 my 

    Así que eso demuestra macOS en la capa más baja del sistema, está a salvo del error Y2038. Eso significa que el sistema como tal no fallará y funcionará correctamente.

    Sin embargo, en el nivel de la aplicación, ese no es siempre el caso.

    Al intentar presionar la date hasta 2040, las preferences del sistema Fecha y hora respondieron configurándolo en 01.01.2038 (deberá desmarcar la configuration automática)

    enter image description here

    Eso significa que depende de la aplicación cómo reactjsrán ante el error Y2038.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).