El efecto 2038 (2K38), por Francisco Cañizares

El otro día, salía en barrapunto, un artículo en que se comentaba que previsiblemente habría un “Efecto 2038”.

Como a mucha gente no le ha quedado claro, vamos a explicar en qué consiste eso.

Veamos, primeramente, los sistemas UNIX, entre otras aplicaciones que luego comentaré, usan un sistema de fechas llamado “Unix timestamp” (aunque yo prefiero llamarle Fecha Unix ;)).

Éste sistema, cuenta los segundos transcurridos desde el día 1 de Enero de 1970 a las 00:00:00 (cero horas, cero minutos, cero segundos). Para que lo entendáis: los cristianos (aunque no todos, pero eso es otro tema) tomamos como fecha de inicio de nuestra era el 1 de Enero del año 1, a las 00:00:00, al igual que otras religiones toman como fecha de inicio otra, que represente algun hecho importante para ellos.

Bueno, pues los sistemas Unix, toman como fecha de inicio la mencionada del 1 de enero 1970. A lo que iba, la mayoría de los ordenadores son de 32 bits, y por tanto podríamos representar hasta 2 elevado a la 31.

¿Por qué a la 31 en vez de a la 32 como debería ser? Pues, porque un bit, se usa para representar el signo, es decir, si es positivo o negativo.

Es decir, podemos representar desde -2 elevado a la 31 (-2^31) hasta 2 elevado a la 31 (2^31).

O sea, que el “Efecto 2038” sólo sería posible en los ordenadores de 32 bits, y no en los de 64, porque sería 2 elevado a la 63 (2^63).

Podéis comprobar el efecto con el siguiente script.

Para ejecutarlo hacéis un “whereis perl”, y si os sale un “/usr/bin/perl”, no tendréis que modificar nada (ni en OSX, ni en linux hay que modificarlo, en principio), pero si no es así (o estáis usando un sistema operativo como Windows) tenéis que especificarlo (o bien, hacer un “perl 2038.pl”).

Si tenéis un error de permiso denegado tenéis que darle permiso de ejecución. En los sistemas “tipo-Unix” como Linux y OSX, se hace con un chmod +x 2038.pl.

Si lo deseas, pon un comentario, con lo que te sale al ejecutar ese comando en una terminal.

Aquí van algunas salidas (hechas por mí, o por personas que conozco):

Nota: i686, se usa para hablar de Pentium 3, y superiores, o compatibles:

En un PC Pentium 4 con Debian GNU/Linux Experimental y un kernel 2.4.26, optimizado para i686:

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

Fri Dec 13 20:45:52 1901

Fri Dec 13 20:45:52 1901

Fri Dec 13 20:45:52 1901

Como se puede obervar, no sólo cambia de año, sino también de día, fecha y hora.

En un PC AMD 64 con Debian GNU/Linux Unstable y un kernel 2.6.7, optimizado para i686 (cortesía de linuxmaniac de torreviejawireless.org):

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

Fri Dec 13 20:45:52 1901

Fri Dec 13 20:45:52 1901

Fri Dec 13 20:45:52 1901

Como se puede apreciar, tiene la misma salida que un Pentium 4. Os preguntaréis, ¿por qué, si tendría 2^63 en vez de 2^31? Pues, porque al ser un kernel optimizado para i686, el AMD64, es de 32 bits, en vez de 64 a todos los efectos.

Por tanto, podríamos afirmar (aunque no lo aseguramos) que en un AMD64, con un S.O. optimizado para él, no tendríamos éste problema.

En un G4 con MacOS X:

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:07 2038

Tue Jan 19 03:14:07 2038

Tue Jan 19 03:14:07 2038

Aunque, a primera vista pueda parecer que funciona, si nos fijamos, podemos observar que se queda en el segundo 7.

En un G5 con MacOS X (Panther):

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:07 2038

Tue Jan 19 03:14:07 2038

Caso similar al del AMD64, el procesador, debería soportarlo, pero en este caso el sistema operativo, no lo soporta.

Ésto, *en teoría* pasaría, como dije antes en los sistemas Unix, en el lenguaje de programación C, en el lenguaje web PHP, en los servidores de chat (IRC) y en las bases de datos que usen SQL, salvo en PostgreSQL, no porque sea una base de datos “especial” y no tuviera nunca este fallo, sino porque se ha solucionado, como podemos ver aquí.

Pero, en un caso práctico, en un PC con debian se cambió la fecha, a las 03:13:00, y se dejó pasar el tiempo.

Transcurrido ese tiempo, dejaron de ejecutarse aplicaciones, bien porque no podía cargar la libc (una librería esencial para el sistema), bien porque decía que había muchas aplicaciones funcionando (y en efecto, al hace un ps ax, había dos aplicaciones, que se estaban ejecutando infinitas veces y no se podía reiniciar el sistema, así que hubo que apagarlo “por la fuerza”, y cambiar la fecha en la BIOS.

Quizás ha sido un error aleatorio, o quizás ha sido debido al “Efecto 2038”.

De cualquier modo, un servidor (no, no me refiero a un servidor de Internet, me refiero a mi ;)) opina que en el año 2038, los ordenadores de 32 bits, se habrán quedado obsoletos, e, incluso puede que ni siquiera sean tal y como los conocemos ahora.

Algunos enlaces más:

http://www.2038bug.com/

http://www.2038.com

http://www.unixtimestamp.com/index.php (Ésta URL es curiosa, porque toma como fecha el 8 de Julio. De cualquier

modo, en ésta web se puede convertir una fecha Unix, a una “normal”).

Francisco Cañizares

0 0 votos
Article Rating
Subscribe
Notify of
12 Comments
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
Anónimo
Anónimo
20 years ago

weno, para entonces seguro q ya se ha inventado algo jajajaja

Anónimo
Anónimo
20 years ago

tomamos como fecha de inicio de nuestra era el 1 de Enero del año 0…

Nunca ha existido el año 0. El primer año de nuestra era fue el año 1. De ahí la discusión de cuendo cambió el siglo y el milenio, si en 2000 o en 2001.

Anónimo
Anónimo
20 years ago

Si, perdon fue un error. Quise decir el año 1.
Ruego a algun administrador que lo corrija 😉

Anónimo
Anónimo
20 years ago

Uy no lo entiendo 😮
¿Si los sistemas unix toman como fecha de inicio el 1970, porque al ejecutar el script vuelve a 1901?

Anónimo
Anónimo
20 years ago

Hola a todos, lo e probado con Mac OS X Server 10.3.5 en mi PowerBook G4 12′ 867, la fecha se cambia para el año 1901 y empieza desde 0 el reloj….

Que raro…….. Alguna explicacion…? porque no se queda en el Tue Jan 19 03:14:07 2038…….

Saludos.

Anónimo
Anónimo
20 years ago

Sobre la primera pregunta, no lo he comprobado, pero seguramente es 1970 – 2^32.

Sobre lo de OS X Server, el caso es que no funciona. Habría que ver que es lo que pasa en igualdad de condiciones, porque como ya he dicho, depende del hardware y del software.

Anónimo
Anónimo
20 years ago

Perdon, quise decir 1970 – 2 ^31

Anónimo
Anónimo
19 years ago

Igualmente yo creo que de aqui al 2038 todos tendremos ordenadores nuevos, posiblemente muy distintos a los que conocemos hoy en día.

Anónimo
Anónimo
19 years ago

todo esta muy bien,
¿pero esto no es sistema informatico?
¿”yo digo para que esta la informatica”?
pienso que para el año 2038 tendremos algo que ahora no podemos explicar,

Anónimo
Anónimo
19 years ago

todo esta muy bien,
¿pero esto no es sistema informatico?
¿”yo digo para que esta la informatica”?
pienso que para el año 2038 tendremos algo que ahora no podemos explicar,

Anónimo
Anónimo
19 years ago

Piensen un poco… para que existen los patch para la bios ????

Anónimo
Anónimo
19 years ago

i want to see the wedding pictures of gomeslaines

12
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x