2038: el día que el tiempo peta

Introducción: otro fin del mundo informático

Si creías que el dra­ma del Efecto 2000 fue una pelí­cu­la exa­ge­ra­da, ten­go malas noti­cias: la secue­la ya tie­ne fecha de estreno, y se lla­ma Efecto 2038. El 19 de enero de 2038, a las 03:14:07 UTC, millo­nes de sis­te­mas basa­dos en 32 bits podrían per­der com­ple­ta­men­te la noción del tiem­po y retro­ce­der de gol­pe a 1901, como si el siglo XXI nun­ca hubie­ra ocu­rri­do. Suena a guion de cien­cia fic­ción bara­ta, pero es una con­se­cuen­cia muy seria de cómo hemos deci­di­do con­tar los segun­dos en los orde­na­do­res duran­te déca­das.

Lo inquie­tan­te no es solo el fallo en sí, sino dón­de viven toda­vía esos relo­jes defec­tuo­sos: ban­cos, infra­es­truc­tu­ras crí­ti­cas, redes de tele­co­mu­ni­ca­cio­nes, sis­te­mas indus­tria­les y apa­ra­tos que nadie recuer­da que exis­ten has­ta que fallan. Y, para rema­tar, muchos de esos equi­pos fun­cio­nan tan bien que nadie los ha apa­ga­do en años, ni mucho menos actua­li­za­do. Es el típi­co “si fun­cio­na, no lo toques” ele­va­do a ame­na­za glo­bal.

Mientras tan­to, segui­mos lle­nan­do el mun­do de gad­gets y ser­vi­cios conec­ta­dos que depen­den de un tiem­po correc­to como si fue­ra algo tri­vial. En reali­dad, el tiem­po en infor­má­ti­ca es una bom­ba de relo­je­ría numé­ri­ca, y el 2038 es sim­ple­men­te la pró­xi­ma explo­sión pro­gra­ma­da. La pre­gun­ta ya no es si el pro­ble­ma es real, sino si vamos a lle­gar a esa fecha con los debe­res hechos o con cara de “ups”.

Cómo empezó todo: 1970, C y un contador perezoso

La his­to­ria arran­ca con una deci­sión apa­ren­te­men­te ino­cen­te: ele­gir un pun­to de par­ti­da para con­tar el tiem­po en sis­te­mas Unix. Ese ori­gen, lla­ma­do “epoch”, se fijó en el 1 de enero de 1970 a las 00:00:00 UTC, y des­de enton­ces muchos sis­te­mas sim­ple­men­te van suman­do segun­dos a par­tir de ahí, sin dra­mas, sin poe­sía, solo arit­mé­ti­ca. El están­dar POSIX popu­la­ri­zó esta for­ma de medir el tiem­po, y el len­gua­je C la con­vir­tió en la nor­ma de fac­to con el famo­so tipo de dato time_t.

El tru­co tie­ne tram­pa: en muchí­si­mos sis­te­mas de 32 bits, time_t es un ente­ro con signo de 32 bits. Eso per­mi­te repre­sen­tar des­de −2.147.483.648 has­ta 2.147.483.647, lo jus­to para lle­gar al segun­do 2.147.483.647, que coin­ci­de exac­ta­men­te con las 03:14:07 UTC del 19 de enero de 2038. Un segun­do des­pués, el con­ta­dor hace “over­flow” y sal­ta al valor nega­ti­vo míni­mo, que muchos pro­gra­mas inter­pre­tan como una fecha en 1901. No es magia negra: es arit­mé­ti­ca bina­ria en modo “se nos que­dó cor­to el núme­ro”.

Esta for­ma de con­tar el tiem­po se incrus­tó en sis­te­mas tipo Unix, en mon­to­nes de libre­rías y en prác­ti­ca­men­te todo el soft­wa­re escri­to en C duran­te déca­das. El resul­ta­do es un cas­ti­llo enor­me cons­trui­do sobre un solo con­ta­dor de segun­dos que tar­de o tem­prano iba a reven­tar. No se tra­ta solo de mos­trar una fecha mal en pan­ta­lla, sino de que cual­quier cálcu­lo que depen­da de tiem­po futu­ro —intere­ses ban­ca­rios, cadu­ci­dad de cer­ti­fi­ca­dos, logs de segu­ri­dad— empie­ce a dar resul­ta­dos absur­dos.

Para ser jus­tos, el pro­ble­ma no pilla a nadie por sor­pre­sa: los pro­gra­ma­do­res cono­cen esta limi­ta­ción des­de que se defi­nió time_t, y lle­van años escri­bien­do artícu­los, RFCs y par­ches sobre el tema. Lo que cues­ta no es enten­der el bug, sino asu­mir la mag­ni­tud de toda la maqui­na­ria que lo here­da silen­cio­sa­men­te.

Y2K, Y2K38 y la falsa sensación de seguridad

El Efecto 2000 dejó una heren­cia rara: por un lado demos­tró que los bugs de fecha pue­den ser devas­ta­do­res; por otro, como “no pasó nada” visi­ble, mucha gen­te lo recuer­da como una exa­ge­ra­ción. La reali­dad es menos épi­ca y más abu­rri­da: no ocu­rrió el apo­ca­lip­sis por­que duran­te años miles de pro­gra­ma­do­res revi­sa­ron sis­te­mas, migra­ron datos, par­chea­ron códi­go y pro­ba­ron has­ta la exte­nua­ción. Fue un sus­to pre­ven­ti­vo muy caro: se esti­ma que se invir­tie­ron más de 200.000 millo­nes de euros a nivel glo­bal solo para que, pre­ci­sa­men­te, no hubie­ra caos.

La eti­que­ta Y2K38 (o Efecto 2038) explo­ta esa memo­ria colec­ti­va, pero el con­tex­to es dis­tin­to. En 1999 la infor­má­ti­ca cor­po­ra­ti­va era mucho más cen­tra­li­za­da: gran­des main­fra­mes, sis­te­mas bien cata­lo­ga­dos, menos dis­po­si­ti­vos embe­bi­dos des­per­di­ga­dos por el mun­do. Hoy todo está mucho más frag­men­ta­do: des­de micro­con­tro­la­do­res en fábri­cas has­ta rou­ters olvi­da­dos en un sótano, pasan­do por caje­ros, sen­so­res indus­tria­les y sis­te­mas lega­do que viven detrás de pare­des de “nadie sabe cómo fun­cio­na, pero mejor no lo toques”.

Además, el sal­to a 64 bits ha crea­do una espe­cie de ilu­sión de “esto ya está solu­cio­na­do”. Muchos ser­vi­do­res, móvi­les moder­nos y sis­te­mas ope­ra­ti­vos actua­les ya usan time_t de 64 bits, lo que empu­ja el siguien­te pro­ble­ma de des­bor­da­mien­to a unos 292.000 millo­nes de años en el futu­ro, cómo­da­men­te más allá de nues­tras preo­cu­pa­cio­nes huma­nas. Sin embar­go, gran par­te del ries­go está en los sitios menos visi­bles, don­de un par­che no es tan fácil como ins­ta­lar una actua­li­za­ción y reini­ciar.

El mie­do al dra­ma­tis­mo tam­bién com­pli­ca el men­sa­je: si se avi­sa con ener­gía, sue­na a alar­mis­mo; si se mini­mi­za, se pier­den años valio­sos de pre­pa­ra­ción. Y así, entre la nos­tal­gia del Efecto 2000 y el can­san­cio infor­ma­ti­vo, el Efecto 2038 corre el peli­gro de lle­gar sin el pro­ta­go­nis­mo que mere­ce, pero con todas sus con­se­cuen­cias intac­tas.

Qué puede romperse realmente en 2038

Aunque es ten­ta­dor ima­gi­nar todos los orde­na­do­res del pla­ne­ta apa­gán­do­se a la vez, el esce­na­rio real es más sutil y, en cier­to modo, más inquie­tan­te. Los sis­te­mas más vul­ne­ra­bles son aque­llos que usan time_t de 32 bits en cálcu­los crí­ti­cos y que rara vez se actua­li­zan: sis­te­mas embe­bi­dos, con­trol indus­trial, equi­pa­mien­to de red, dis­po­si­ti­vos anti­guos y apli­ca­cio­nes lega­do en ban­cos y admi­nis­tra­cio­nes públi­cas. No todos falla­rán a la vez, pero muchos pue­den empe­zar a com­por­tar­se de mane­ra errá­ti­ca con­for­me se acer­quen o cru­cen fechas pos­te­rio­res a 2038.

Los efec­tos típi­cos van des­de fechas absur­das (1901, 1903, 1970) has­ta caí­das de ser­vi­cios por­que los cer­ti­fi­ca­dos pare­cen “cadu­ca­dos” hace más de un siglo, o por­que los logs indi­can que algo ha ocu­rri­do “antes” de que el sis­te­ma arran­ca­se. En ban­ca y finan­zas esto pue­de sig­ni­fi­car cálcu­los inco­rrec­tos de intere­ses, erro­res en liqui­da­cio­nes y sis­te­mas de ries­go que pier­den su línea tem­po­ral. En tele­co­mu­ni­ca­cio­nes, dis­cre­pan­cias de tiem­po pue­den rom­per sin­cro­ni­za­ción, auten­ti­ca­ción o fac­tu­ra­ción, con impac­tos en cas­ca­da.

Los dis­po­si­ti­vos móvi­les han sido un peque­ño labo­ra­to­rio del pro­ble­ma. Versiones anti­guas de Android de 32 bits ya mos­tra­ban lími­tes cla­ros al inten­tar fijar manual­men­te fechas pos­te­rio­res a 2037, y algu­nos sis­te­mas res­pon­dían mos­tran­do fechas en 1901 o 1903 cuan­do se for­za­ba el des­bor­da­mien­to. iOS miti­gó bue­na par­te del ries­go al pasar a pro­ce­sa­do­res de 64 bits a par­tir del iPhone 5s, y Android hizo lo pro­pio con sus ver­sio­nes de 64 bits des­de la 5.0, pero aún sobre­vi­ven muchos dis­po­si­ti­vos de 32 bits, espe­cial­men­te en gamas bajas o reuti­li­za­dos.

Luego están los casos exó­ti­cos que ayu­dan a visua­li­zar el fenó­meno. YouTube tuvo que migrar a con­ta­do­res de 64 bits cuan­do el video­clip de «Gangnam Style» superó la cifra máxi­ma repre­sen­ta­ble en un ente­ro de 32 bits, y la son­da espa­cial Deep Impact per­dió la orien­ta­ción por un pro­ble­ma de con­ta­dor de tiem­po simi­lar. No eran el Efecto 2038 lite­ral, pero sí recor­da­to­rios demo­le­do­res de que los núme­ros tie­nen lími­tes muy con­cre­tos.

En el peor esce­na­rio, el 19 de enero de 2038 vería­mos una llu­via de inci­den­tes dis­per­sos: fallos en sis­te­mas de fac­tu­ra­ción, peque­ños apa­go­nes de ser­vi­cios, erro­res de regis­tro, fallos de equi­pos indus­tria­les y, sobre todo, una mon­ta­ña de tra­ba­jo para equi­pos de sopor­te inten­tan­do enten­der por qué “de repen­te todo cree que está en 1901”. No es el fin del mun­do, pero pue­de ser un buen desas­tre logís­ti­co.

¿Por qué no lo arreglamos y ya?

La solu­ción obvia pare­ce sim­ple: cam­biar time_t a 64 bits y a otra cosa. El pro­ble­ma es que en sis­te­mas ya des­ple­ga­dos esa varia­ble está incrus­ta­da en todas par­tes: estruc­tu­ras de datos, for­ma­tos de fiche­ro, pro­to­co­los de red, bases de datos y APIs. Si cam­bias el tama­ño sin cui­da­do, rom­pes la com­pa­ti­bi­li­dad bina­ria, y de paso te car­gas apli­ca­cio­nes com­pi­la­das hace vein­te años que nadie se atre­ve a recom­pi­lar.

Otra idea teó­ri­ca sería usar un ente­ro de 32 bits sin signo para exten­der el ran­go, pero eso tro­pe­za­ría con pro­gra­mas que depen­den de dife­ren­cias de tiem­po nega­ti­vas, como cálcu­los de dura­cio­nes o orde­na­ción de even­tos. Al final, casi todas las solu­cio­nes rea­lis­tas pasan por migrar, poco a poco, a sis­te­mas de 64 bits o a repre­sen­ta­cio­nes de tiem­po más robus­tas, y encap­su­lar bien las con­ver­sio­nes para no rom­per el eco­sis­te­ma. Es un tra­ba­jo ingra­to, lleno de deta­lles, y poco vis­to­so en pre­sen­ta­cio­nes de mar­ke­ting.

En el mun­do Linux, por ejem­plo, la correc­ción del pro­ble­ma ha impli­ca­do cam­bios pro­fun­dos en el ker­nel, en las libre­rías están­dar y en la for­ma en la que se mane­jan las mar­cas de tiem­po en los sis­te­mas de archi­vos. Estructuras como timespec64 sus­ti­tu­ye­ron al vie­jo esque­ma en muchos sub­sis­te­mas, y cos­tó años inte­grar y pulir todos los cam­bios. Eso da una idea de lo que supo­ne revi­sar un sis­te­ma vivo, con millo­nes de líneas de códi­go, solo para que el tiem­po no explo­te en 2038.

El pro­ble­ma gor­do, sin embar­go, está don­de no hay ni ker­nel moderno ni libre­ría de C actua­li­za­da. Hablamos de equi­pos indus­tria­les ais­la­dos de la red, caje­ros anti­guos, sis­te­mas pro­pie­ta­rios que ape­nas tie­nen sopor­te y ver­sio­nes de Unix como AIX, Solaris o HP-UX que siguen fun­cio­nan­do por­que son rocas, no por­que estén al día. Muchas de estas máqui­nas están escon­di­das en racks pol­vo­rien­tos, sin docu­men­ta­ción cla­ra y sin nadie que domi­ne ya la pla­ta­for­ma. Es la cara B de la “esta­bi­li­dad”: cuan­do algo dura dema­sia­do, olvi­da­mos cómo tocar­lo.

Unix, sistemas críticos y el fantasma del legado

Una de las gran­des iro­nías del Efecto 2038 es que afec­ta sobre todo a los sis­te­mas más fia­bles. Grandes ban­cos, ase­gu­ra­do­ras, ope­ra­do­res de tele­co­mu­ni­ca­cio­nes y empre­sas con enor­mes apli­ca­cio­nes cor­po­ra­ti­vas siguen apo­yán­do­se en varian­tes de Unix muy vete­ra­nas, pre­ci­sa­men­te por­que son esta­bles y pue­den fun­cio­nar años sin reini­ciar­se. Eso que sue­na tan bien en un folle­to comer­cial se con­vier­te en una pesa­di­lla cuan­do des­cu­bres que el reloj interno lle­va déca­das cami­nan­do hacia un bor­de numé­ri­co.

También hay super­or­de­na­do­res y sis­te­mas cien­tí­fi­cos que uti­li­zan deri­va­dos de Unix por su robus­tez y capa­ci­da­des mul­ti­usua­rio. En muchos casos, el soft­wa­re que corre sobre ellos tie­ne ciclos de vida lar­guí­si­mos, con poco mar­gen para gran­des migra­cio­nes. El mie­do a rom­per algo que “siem­pre ha fun­cio­na­do” fre­na deci­sio­nes que, para­dó­ji­ca­men­te, son las que evi­ta­rían que deje de fun­cio­nar en 2038.

A esto se suma el fac­tor humano: cada vez hay menos espe­cia­lis­tas en estos sis­te­mas y len­gua­jes clá­si­cos que se sien­tan cómo­dos par­chean­do ker­nels vie­jos, tocan­do códi­go en C crí­ti­co o revi­san­do pro­ce­sos de nego­cio ancla­dos a sis­te­mas de hace déca­das. La jubi­la­ción de muchas de estas per­so­nas deja hue­cos difí­ci­les de cubrir jus­to cuan­do más expe­rien­cia se nece­si­ta. Es un pro­ble­ma gene­ra­cio­nal, no solo téc­ni­co.

La foto se com­ple­ta con una capa de des­co­no­ci­mien­to bru­tal. Muchas empre­sas no saben cuán­tos sis­te­mas depen­dien­tes de 32 bits tie­nen, dón­de están ni qué papel jue­gan en sus pro­ce­sos dia­rios. Se ins­ta­la­ron hace mucho, se inte­gra­ron con cin­ta adhe­si­va digi­tal y, mien­tras han segui­do fun­cio­nan­do, nadie ha sen­ti­do urgen­cia por inven­ta­riar­los en serio. El Efecto 2038 está sir­vien­do, en par­te, como excu­sa para hacer esa arqueo­lo­gía dolo­ro­sa.

Matemáticas, overflow y otros demonios invisibles

Detrás de todo este dra­ma hay mate­má­ti­cas muy bási­cas que, para­dó­ji­ca­men­te, tam­bién son la lla­ve para evi­tar el desas­tre. El cora­zón del Efecto 2038 es un caso de arit­mé­ti­ca modu­lar: tra­ba­ja­mos con núme­ros que tie­nen un máxi­mo repre­sen­ta­ble, y cuan­do lo supe­ra­mos, el con­ta­dor “da la vuel­ta” y empie­za por el extre­mo con­tra­rio. Si esto se hace sin con­trol, los pro­gra­mas creen que el tiem­po ha sal­ta­do déca­das hacia atrás.

Conceptos como el com­ple­men­to a dos, la dife­ren­cia entre ente­ros con signo y sin signo, o el tama­ño de las varia­bles, sue­nan a teo­ría abu­rri­da de carre­ra, pero se con­vier­ten en pro­ble­mas gigan­tes cuan­do están ente­rra­dos en millo­nes de líneas de códi­go. El típi­co “a esto nun­ca lle­ga­re­mos” se lle­va escu­chan­do des­de hace déca­das, has­ta que lle­ga. Lo mis­mo ocu­rrió con los con­ta­do­res de sema­nas del GPS o con cier­tos SSD que deja­ban de fun­cio­nar al alcan­zar un núme­ro con­cre­to de horas de uso.

La lec­ción es incó­mo­da pero útil: cada vez que dise­ña­mos un sis­te­ma con un lími­te numé­ri­co, esta­mos metien­do una fecha de cadu­ci­dad mate­má­ti­ca, aun­que no la apun­te­mos en gran­de. En el caso de time_t de 64 bits, ese lími­te está tan lejos que nos da risa, pero no deja de exis­tir. Esta con­cien­cia obli­ga a tomar­se más en serio cómo repre­sen­ta­mos el tiem­po, las can­ti­da­des y los iden­ti­fi­ca­do­res en gene­ral.

Curiosamente, el pro­pio pro­ce­so de miti­gar el Efecto 2038 está empu­jan­do mejo­res prác­ti­cas. Se audi­ta más códi­go, se revi­san pro­to­co­los, se docu­men­tan lími­tes y se dise­ñan sis­te­mas pen­san­do en actua­li­za­cio­nes futu­ras en lugar de en blo­ques mono­lí­ti­cos ina­mo­vi­bles. Es un recor­da­to­rio de que la infor­má­ti­ca no es solo cacha­rros y apps, sino tam­bién teo­ría sóli­da apli­ca­da con algo de humil­dad.

¿Apocalipsis aplazado o crisis silenciosa?

A estas altu­ras, lo razo­na­ble es espe­rar que no lle­gue­mos a 2038 con el mun­do en lla­mas digi­ta­les. La migra­ción a 64 bits avan­za, los gran­des sis­te­mas ope­ra­ti­vos moder­nos ya han abor­da­do el pro­ble­ma y las orga­ni­za­cio­nes más crí­ti­cas sue­len tener equi­pos dedi­ca­dos a estos ries­gos. No es des­ca­be­lla­do ima­gi­nar un esce­na­rio simi­lar al del Efecto 2000: mucho tra­ba­jo pre­vio, mucho dine­ro inver­ti­do, y un puña­do de inci­den­tes lla­ma­ti­vos pero con­te­ni­dos.

La incóg­ni­ta está en los már­ge­nes: pymes, admi­nis­tra­cio­nes con pocos recur­sos, infra­es­truc­tu­ras anti­guas y maqui­na­ria indus­trial que “toda­vía tira” pero nadie sabe bien cómo. Ahí es don­de pue­de apa­re­cer la famo­sa cri­sis silen­cio­sa: erro­res raros, caí­das pun­tua­les, pro­ble­mas de fac­tu­ra­ción o de logís­ti­ca que se acha­can a “fallos de sis­te­ma” sin men­cio­nar nun­ca 2038. Menos espec­ta­cu­lar, pero igual de caro.

También es posi­ble que par­te de la solu­ción pase por par­chear sobre la mar­cha. Ya ocu­rrió con casos como el de YouTube y su con­ta­dor de repro­duc­cio­nes: se arre­gló cuan­do el pro­ble­ma se hizo evi­den­te, no antes. Con suer­te, la pre­sión mediá­ti­ca y aca­dé­mi­ca alre­de­dor del Efecto 2038 hará que esta vez haya más pre­ven­ción y menos heroís­mo de últi­ma hora.

Al final, el ver­da­de­ro deba­te no es si los orde­na­do­res sobre­vi­vi­rán a 2038, sino qué tipo de rela­ción que­re­mos tener con la tec­no­lo­gía que lo sos­tie­ne todo. Si pre­fe­ri­mos vivir con­fian­do en que “alguien lo habrá pen­sa­do” o asu­mi­mos, de una vez, que has­ta la for­ma de con­tar segun­dos nece­si­ta cui­da­do, man­te­ni­mien­to y, de vez en cuan­do, una peque­ña cura de humil­dad numé­ri­ca.

Deja una respuesta