El final boss del legacy code: La Voyager 1.

Cna

En 1977 la NASA envió al espacio una sonda para recoger datos interestelares. Con la idea de que la misión durara unos 5 años, lo cierto es que a día hoy sigue enviando señales.

Funcionamiento de la Voyager 1
Una sonda de mas de media tonelada fue lanzada al espacio con un impulso inicial, calculando en su salida que pasaría cerca de la orbita gravitacional de otros planetas del sistema solar, y se desplazaría en línea recta a velocidad constante ya que sin fricción, apenas algo contra lo que chocar y que la gravedad de otros cuerpos celestes queda lejos, iría palante como una campeona. La Voyager 1 es imparable ya que teniendo en cuenta sus medidas en comparación con el tamaño del universo, lo mismo pasan miles de años antes de que se tope con algo de material espacial. Aunque deje de enviar señales seguirá viajando en la misma dirección mucho más tiempo del que nos imaginamos.
Como curiosidad decir que la sonda incorpora un disco de oro (realmente es de cobre recubierto de oro) donde un equipo presidido por Carl Sagan grabó imágenes, saludos, sonidos, la estructura del ADN y unas instrucciones sobre como reproducir el cacharro por si algún alien lo encuentra algún día. Ya sabéis, si de repente viene a exterminarnos una colonia alienígena será porque en los 70 mandamos al espacio un trozo de hierro con información precisa sobre lo que somos, dónde estamos y unas cuantas canciones de El Fary.

Comunicación
Es importante remarcar cómo carajo llega información desde ese aparato a miles de millones de kilómetros de distancia.
Operando en frecuencias muy altas, envía y recibe señales de la tierra gracias a un sistema llamado DSN (deep space network) que consiste en varias antenas gigantes colocadas estratégicamente en la tierra para garantizar que alguna recibirá la información que envíe la sonda. En Madrid tenemos una de ellas.
Aprovechando las cualidad especiales que ofrece el vacío espacial como medio de transmisión, se pueden recibir y enviar señales de radio que viajan a la velocidad de la luz en frecuencias muy elevadas y muy direccionales. A la distancia que está la sonda actualmente, cuando enviamos algo allí tarda en llegar poco menos de un día. El problema viene cuando la sonda dice de enviarnos algo ya que necesita energía para hacerlo y cada vez tiene menos.

El problema de la energía
La sonda se lanzó con la esperanza de que durara unos 5 años en órbita. Se ve que fueron muy pesimistas porque ya lleva unos cuantos más y los que le esperan.
La forma que tiene el aparato de obtener la energía necesaria para operar todos los aparatos de a bordo que captura, procesan, envían y reciben datos y señales es mediante un complejo generador termoeléctrico de radioisótopos que sencillamente potencia la sonda conforme se desintegra el plutonio que contiene. Conforme ha ido pasando el tiempo este proceso ha suministrado cada vez menos energía ya que es finito y lo que se ha hecho es mandar señales a la sonda para que vaya desconectando aparatos que consumen energía y no son imprescindibles para la misión.
A día de hoy la voyager1 está operando con lo básico y no se espera que dure mucho más de 10 años. Algunos científicos dicen que para el año que viene ya no será posible recibir señales o enviar comandos a la sonda.

El problema con el código

Bueno pero ¿Para qué carajo cuento todo esto si estamos en el foro DEV y aquí somos todos unos picateclas empedernidos que odiamos a los QA y compramos teclados nuevos por no limpiar el anterior que se ha llenado de gusanitos naranjas? Pues porque dentro de esta amalgama de las telecomunicaciones, hay código.
Concretamente la Voyager1 cuenta con herramientas programas en ensamblador y Fortran.

Parece ser que hace 1 mes se jodió uno de las memorias de 8K de uno de los procesadores de la sonda y por esto está enviando errores a cascoporro. La forma de repararlo es "sencillamente" enviar de vuelta a la sonda las instrucciones necesarias para modificar el código del software que trabaja con los datos y decirle que ignore esa porción dañada de la memoria pero eso a su vez implica reescribir parte del código para que pueda trabajar adecuadamente.

Fortran es un lenguaje que a día de hoy se sigue utilizando en ámbitos científicos y de ingeniería (sobre todo supercomputación) pero estamos hablando de que el software de la Voyager 1, aparte de en ensamblador de bajo nivel, está embebido en Fortran77, un lenguaje de programación de los 50 con todas las limitaciones que ello implica.

La mayoría de la gente que trabajó en el código de aquél proyecto ya se jubiló, murió o está muy mayor y no parece haber mucha gente dispuesta a continuar su legado. Los que trabajaron en la arquitectura del hardware más de lo mismo. La documentación es casi inexistente con respecto a las peculiaridad de una sonda interestelar que viaja a 17km/s y ahora mismo la NASA se encuentra buscando documentación física de todo aquello pidiendo a las familias de los antiguos ingenieros que busquen por sus garajes para ver si son capaces de arrojar algo de luz al proceso mientras recopilan, limpian y digitalizan todo lo que encuentran por los sótanos de sus instalaciones.

Imagínate programar en un sheet donde utilizar 2 variables distintas es abusar de los 16KB de memoria CMOS disponibles, sin apenas documentación al respecto, sin posibilidades de reproducir un entorno de pruebas en la tierra y teniendo que afinar el tiro muchísimo ya que Fortran 77 podría producir un error catastrófico de ejecución por colocar mal un solo carácter y esto podría dar lugar a perder por completo la comunicación. Y súmale que todo eso hay que enviarlo a través de una señal que viajará por el espacio durante horas y será recibida, modulada e integrada por un sistema en horas bajas de hace casi media década.
Desde luego es un entorno hostil en el que trabajar.

Y luego muchos se quejan si se encuentran un programa basado en COBOL

8
Runig666

La forma de repararlo es "sencillamente" enviar de vuelta a la sonda las instrucciones necesarias para modificar el código del software que trabaja con los datos y decirle que ignore esa porción dañada de la memoria pero eso a su vez implica reescribir parte del código para que pueda trabajar adecuadamente.

Da igual cuantas veces lo lea, y de cuantas veces me den la explicación tecnica. Para mi estan haciendo ace a una sonda a miles de KM y punto.

Dr_Manhattan

Ahí es donde te das cuenta de lo que ha empeorado ahora la calidad del software y de los programadores, cierto es que el programador medio no hace un software tan crítico en su día a día.

Aún así, yo he visto el código de algunos juegos de megadrive y entiendes por qué la industria del videojuego actual da bastante pena. Ahora se hacen cosas por fórmula y antes por hobby prácticamente.

Muy interesante el hilo

1 respuesta
hda

¡Qué interesante! ¿Podrías marcarte algunas referencias/enlaces? Sobre todo respecto al problema que nos acusa.

1 respuesta
kalvinone

#4 El blog de Microsiervos ha estado cubriendo todo el proceso y mola mucho ir viendo cómo se las apañan

La Voyager 1 vuelve a enviar telemetría correctamente
La NASA retoma el contacto con la sonda Voyager 1
La Voyager 1 ha vuelto a dar señales más o menos coherentes de vida
La Voyager 1 ha vuelto a dar señales más o menos coherentes de vida

1 1 respuesta
Kaledros

#3 El navegador de mi coche (coche que tiene menos de tres años) tarda veinte segundos en calcular una ruta desde que le das a enter en la consola del navegador. En cuanto a calidad de software comercial estar en la mierda sería una mejora respecto al estado actual.

1
hda

#5 agradecido.

1 1 respuesta
7 días después
kalvinone

#7 Al final la han conseguido arreglar

2

Usuarios habituales

  • kalvinone
  • hda
  • Kaledros
  • Dr_Manhattan
  • Runig666
  • Cna