lunes, 14 de abril de 2008

USS Yorktown, a la deriva con Windows NT

El 1998 un fallo informático en el sistema de control del crucero USS Yorktown de la armada norte-americana dejó al barco inmóvil en medio del mar durante unas dos horas y media, lo que en términos técnicos se llama "muerto en el agua" teniendo que ser remolcado a puerto. Todo el sistema informático del barco que corría sobre Windows NT se paralizó por uno de los errores más típicos y antiguos de la informática una división por cero.

La armada norte-americana utilizaba el USS Yorktown como banco de pruebas para un nuevo sistema de control de barcos llamado "SmartShip" (barco inteligente). El sistema pretendía automatizar muchas de las tareas que los marineros tenían que hacer manualmente y así poder reducir el número de tripulantes y los costes de operación de los barcos. El sistema corría sobre PCs standard bajo el sistema operativo Windows NT, lo que sin duda era una buena opción para reducir costes, pero tal vez no lo fuera tanto para un entorno tan crítico.

El programa SmartShip estaba siendo un éxito permitiendo reducir la tripulación en un 10%, en el caso del Yorktown la tripulación había pasado de 350 a 307 marineros, y un ahorro de 2.8 millones de dólares. El barco estaba equipado con 16 ordenadores con PentiumPro dual. Las aplicaciones que lo componían, se ocupaban del control y monitorización de daños, del control central desde el puente de mando, así como de monitorizar los motores y mantener el rumbo.

La elección de Windows NT como sistema operativo fue una decisión tomada por políticos, los ingenieros tuvieron poco que decir y fueron presionados para aceptar la elección. Son también muchos los que sospechan que no se realizó una evalución seria de Unix o incluso de NT, simplemente alguien con escasos conocimientos decidió que NT era bueno sin más. Por otro lado el proyecto se llevó a cabo con poca preparación, no se llegó a hacer ningún prototipo sino que el primer sistema fue el que se instaló en el barco y simplemente se fue depurando y adaptando a bordo.

La causa del incidente del Yorktown fue que una de las aplicaciones que corría en uno de los 16 ordenadores de la red del barco, realizó una división pero el divisor era 0 lo cuál provocó una excepción que inicialmente sólo afectó al ordenador que estaba ejecutando dicha aplicación pero que finalmente provocó que toda la red que interconectaba los demás ordenadores del sistema de control dejara de funcionar. Lo cuál a su vez hizo que el barco perdiera el control del sistema de propulsión.

Parece ser que todo fue debido a un error humano, cuando uno de los oficiales que estaba calibrando una válvula de combustible introdujo un 0, en un campo que no tocaba de la base de datos del sistema. De todas maneras cualquier aplicación informática que maneje datos y divisiones tiene que estar preparada ante una división por 0 y más en un entorno tan crítico como este, por lo cuál se puede decir que fue un error de programación o diseño, en cualquier caso un error en una aplicación no debería afectar a todo el sistema, aunque es difícil acotar responsabilidades ante el típico obscurantismo de los militares y las diferentes informaciones contradictorias, queda la duda de si fue Windows o el sistema de control el responsable del incidente.

Pese a que no se descartaba del todo la utilización de Unix, uno de los factores que se consideraron decisivos en la elección era la usabilidad de Windows NT, en parte debido a que se trataba de un entorno gráfico mucho más amigable y fácil de usar que los de Unix. Los detractores de Windows no están ni mucho menos de acuerdo con esta razón, pues si bien Windows es el entorno gráfico más conocido, también es cierto que Unix contaba, y en la actualidad aún más, con un gran variedad de entornos gráficos a elegir. Y era y sigue siendo la opción más segura en entornos críticos pues su estabilidad es bastante superior a los sistemas de Microsoft.
Que hubiera pasado si el barco hubiera estado en una situación de combate? Pues, puede que esta situación no se hubiera presentado, pues el barco hubiera estado dotado de un segundo sistema redundante. Por lo que aunque el sistema primario fallara el segundo habría sido capaz de recuperar el control. El barco no dejaba de ser un prototipo por lo que gran parte del software del sistema no había pasado las rondas de test necesarias para asegurar su calidad y estaba aún depurándose.

El incidente generó una cierta controversia, se inició con unas declaraciones de un ingeniero civil, DiGiorgio, a "Goverment Computer News" en Agosto del 1998, tras un serie de rectificaciones del propio DiGiorgo y nuevas declaraciones del Vice Almirante Henry Giffin, parece del todo cierto que el barco estuvo más de 2 horas muerto en medio del mar hasta que se consiguió rebotar el sistema con la ayuda de los ingenieros informáticos desde tierra. Aunque quizás no fuera necesario remolcarlo a puerto y llegó a tierra por sus propios medios.

*foto 1: el USS Yorktown en aguas del Caribe en 1985
*foto 2: "pantalla azul de la muerte"


+info:
- Sunk by Windows NT in wired.com
- Software glitches leave Navy Smart Ship dead in water in Government Computer News
- Navy: Calibration flaw crashed Yorktown LAN in Government Computer News
- USS Yorktown in en.wikipedia.org

10 comentarios:

Anónimo dijo...

Esto, Windows NT se liberó en 1993 http://es.wikipedia.org/wiki/Windows_NT

Anika dijo...

Muy buen post. Pero una pequeña pregunta: ¿No será 1998 en lugar de 1988?

Bovolo dijo...

Gracias a los dos... En efecto era un typo ;-)

Saludos!

Anónimo dijo...

Entonces, ¿el Linux es inmune a una excepción por división entre cero?

Si no, no lo entiendo

Bovolo dijo...

Hola anómino,

Una aplicación que falla por una división por 0, fallará en todos los sistemas operativos del mundo.

Generará una excepción y si no es manejada por la aplicación normalmente acabará terminando su ejecución.

Aquí lo que parece un poco raro, es porque tardó tanto tiempo en rebotar el sistema, lamentablemente, desconocemos muchos detalles, como digo en el post.

Así que a lo mejor con Linux hubiera ido mejor... o a lo mejor no, quien sabe.

Anónimo dijo...

Precisamente hace poco me ha dicho un militar que el ejército español también usa Windows. En particular, nuestros carros de combate lo llevan. En caso de guerra (toco madera) podría ser como lo de Gila: "¿Es el enemigo? Oiga, que no ataquen ahora que se nos ha colgado el Windows" :)

Es la primera vez que paso por aquí. Es un excelente blog.

Saludos

Anónimo dijo...

Hola amic,

Llevo 13 años profesionalmente hablando programando en entornos Unix,Linux,windows (tb NT)... Una aplicación en NT que causa una división por 0 no revienta el sistema a menos que ocurra en algun Driver que controle algun hardware en concreto (por ejemplo la tarjeta gráfica, un HDD, etc), ya que entonces tienen privilegios y mano libre. La única razon viable por la que se les colgó la màquina és por mala programación de este driver que controlaba ves a saber que cosa. En el mundo Linux o Unix si programas mal segun que cosas tb puedes causar la muerte inmediata del sistema, meted lineas erroneas en el Kernel que ejecutais y ya vereis que divertido resulta.

Anónimo dijo...

Efectivamente, convertir ese suceso en una critica a Windows NT y/o Microsoft convierte al articulo en un panfleto propagandistico.

Que una aplicacion pete a un sistema operativo (cualquiera) si divide por 0 es sencillamente imposible.

Obviamente no tienes mucha idea de diseño de sistemas operativos, no pasa nada por eso, pero como consejo te diria que no te dejes arrastrar a las guerras de otros.

Bovolo dijo...

Hola chicos,

Reconozco que el artículo que me base era bastante amarillento, de manera un poco sorprendente para una web tan prestigiosa como las wired news, como es habitual intente ampliar la info en otras webs, para saber más detalles, tal como dije:

en cualquier caso un error en una aplicación no debería afectar a todo el sistema, aunque es difícil acotar responsabilidades ante el típico obscurantismo de los militares y las diferentes informaciones contradictorias, queda la duda de si fue Windows o el sistema de control el responsable del incidente.

Yo tb he trabajado en Windows 3.1,95, NT y XP. Tb en unix: IRIX, OSF/1, linux varias versiones redhat, montavista y otros no linux como VxWorks.

No le tengo una animadversión a Windows ni mucho menos!

Si supiéramos más detalles del incidente pues podríamos ver quien ha sido el culpable.

Saludos y gracias por leerme y por vuestros comentarios!!!

Nenillo dijo...

Por lo que se cuenta es totalmente irrelevante el SO que se haya utilizado, si la aplicación está mal hecha lo estará se ejecute en un SO u otro.