Las fechas de nacimiento de Torvalds y sus hijas en las cabeceras del kernel

1 de marzo de 2019 • fjbalon

Me han propuesto un reto: encontrar las fechas de nacimiento de Torvalds y de sus tres tres hijas en las cabeceras del kernel. Es un easter egg que dejó Linus para los más curiosos. Vamos allá.

Encontrar las fechas es relativamente sencillo para quien sabe dónde buscar. No es mi caso, que tras una breve búsqueda en Internet identifiqué la localización de dichas fechas en la ruta /usr/include/linux/, encontrándose con la extensión .h. Es fácilmente localizable utilizando la conocida herramienta grep y buscando las cadenas de texto 'LINUX REBOOT MAGIC'.

# grep LINUX_REBOOT_MAGIC /usr/include/linux/*.h
/usr/include/linux/reboot.h:#define     LINUX_REBOOT_MAGIC1     0xfee1dead
/usr/include/linux/reboot.h:#define     LINUX_REBOOT_MAGIC2     672274793
/usr/include/linux/reboot.h:#define     LINUX_REBOOT_MAGIC2A    85072278
/usr/include/linux/reboot.h:#define     LINUX_REBOOT_MAGIC2B    369367448
/usr/include/linux/reboot.h:#define     LINUX_REBOOT_MAGIC2C    537993216

Encontramos entonces que nos devuelve una información en un formato quizás extraño, que corresponde a los siguientes ¿enteros?: 672274793, 85072278, 369367448 y 537993216.

En un principio supuse que se trataba de timestamp, un formato de tiempo utilizado frecuentemente por los sistemas Unix y derivados; éste cuenta la cantidad de segundos transcurridos desde el EPOCH (fecha 1970-01-01 00:00:00 GMT). Por lo que, transformándolo con una simple línea Perl a formato localtime bastaría.

$ perl -e 'print localtime(672274793). "\n";'
Mon Apr 22 00:59:53 1991
$ perl -e 'print localtime(85072278). "\n";'
Mon Sep 11 16:11:18 1972
$ perl -e 'print localtime(369367448). "\n";'
Tue Sep 15 04:04:08 1981
$ perl -e 'print localtime(537993216). "\n";'
Sun Jan 18 19:33:36 1987

Obtenemos las fechas: 22/04/1991, 11/09/1972, 15/09/1981 y 18/01/1987.

¿He conseguido el reto? Nada más lejos... Al corroborar la fecha de nacimiento de Linus Torvalds hay algo que no me cuadra. Torvalds nació el 28 de diciembre de 1969. La primera fecha podría pasar; pero las 3 siguientes que correspondieran a las fechas de nacimiento de las 3 hijas me hacen pensar: ¿Tordvals tuvo su primera hija con 3 años?. Algo no cuadra.

Tras un tiempo de investigación he dado con la tecla: es necesario pasar a hexadecimal para poder leer la fecha. Siendo

0 x 672274793 = 28121969; 28 / 12 / 1969

el nacimiento de Linus Tordvals,

0 x 85072278 = 5121996; 5 / 12 / 1996

el nacimiento de Patricia Miranda,

0 x 367369448 = 16041998; 16 / 04 / 1998

el nacimiento de Daniela Yolanda y

0 x 537993216 = 20122000; 20 / 12 / 2000

el nacimiento de Celeste Amanda, las 3 hijas de Tordvals respectivamente.

Estos elementos se tratan de números mágicos; es decir cadenas de caracteres alfanuméricos que identifican un archivo (ID). El objetivo de estos números mágicos concretos, grosso modo, es el de proteger la llamada verdadera REBOOT del sistema, ya que es una llamada destructiva que puede arrojar graves errores de programa. Linux ofrece una protección extra de esta forma.