Showing posts with label core war. Show all posts
Showing posts with label core war. Show all posts

Tuesday, March 15, 2022

El increíble mundo del Core War


La computadora ha logrado abrir nuevas puertas en la investigación de un sinfín de temas. Por ejemplo, hoy algunas demostraciones en matemáticas se hacen por exhaución, es decir, viendo todos los posibles casos. Si mal no recuerdo, el teorema de los cuatro colores está demostrado analizando todas las posibilidades de crear mapas para pintarse con no más de cuatro colores.

Sin embargo, en otros casos con la computadora podemos especular al respecto de la vida misma. Así nace la "vida artificial", la que propone en cierta medida tomar conceptos que existen en la vida biológica y ver qué pasa en un ambiente simulado dentro de la computadora. Por ejemplo, podemos simular nacimientos de células, reproducción y muerte de las mismas, basándonos en reglas ciegas, que se cumplen en cada generación de células que pintamos en la pantalla. Los resultados de estos experimentos muchas veces nos asombran, pues muestran comportamientos complejos inesperados, los cuales no son fáciles de explicar.

Pues bien, una idea que me parece muy interesante es el de Core War, que se trata de una especie de juego de computadora, en donde dos programas buscan establecerse, eliminando al programa rival. El nacimiento de esta idea la platica  A. K. Dewdney en un artículo publicado en Scientific American en 1984 y que puede leerse aquí

Dewdney indica que probablemente la historia es falsa, pero que fue el detonante de este juego al que eventualmente se denominaría Core War. Dice que se habla de un malévolo programador que escribió un programa en ensamblador llamado "Creeper", cuya única función era la de duplicarse en memoria cada cierto tiempo cuando éste se ejecutaba. El programa lo único qaue buscaba hacer era perpetuarse a sí mismo en la memoria de la computadora. Eventualmente con el tiempo habría más copias de Creeper que de cualquier otro programa en memoria, incluso inutilizando las posibilidades de usar la máquina para algo más. Entonces a alguien se le ocurrió escribir un programa, llamado "Reaper", cuya función era simplemente destruir las copias de Creeper que pudiese encontrar hasta que las eliminara completamente y entonces, eliminarse a sí mismo del sistema. Con esto se restauraría la posibilidad de seguir usando la computadora.


A.K.Dewdney (de su página personal; https://www.csd.uwo.ca/~akd/akd.html)


Entonces imagínese a programadores escribiendo código cuya intención es mantener en memoria su programa, eliminando el código del o los adversarios. El juego no sería como muchos, porque en este caso se escribirían los programas y entonces se pondrían en la memoria a competir, en donde un programa simulador de la computadora ejecutaría alternativamente una instrucción de cada programa ejecutándose. Si un programa encontrase una instrucción ilegal para ejecutarse, dicho código se consideraría el perdedor.

Dewdney junto con la ayuda de un estudiante de la Western University de Ontario, Canadá, trabajarían en este simulador del juego, que se llamó Core War, en referencia a las viejas memorias que se usaban para guardar información a través de núcleos que se polarizaban en una malla metálica (hoy se usan semiconductores para esta labor, pero se mantuvo el nombre casi por ser emblemático).

Core War es pues un simulador que tiene cuatro componentes: un arreglo de 8000 direcciones de memoria, un lenguaje de programación (a nivel ensamblador), llamado Redcode, un programa ejecutivo denominado MARS (Memory Array Redcode Simulator) y un conjunto de programas escritos por los usuarios para luchar en la memoria. Los programas se cargan en memoria que es al azar y que nadie sabe cuál es. La meta es, desde luego, destruir al otro programa en memoria destruyendo sus instrucciones. Cada programador decide lo que su código puede hacer. Por ejemplo, si nota que hubo un cambio en sus instrucciones, puede bien regenerarse o copiarse a otra parte de la memoria. Cuando el programa quiere ejecutar una instrucción inexistente, pierde.

El autor del juego hace una descripción del lenguaje ensamblador, que es un lenguaje de programación de bajo nivel, pero que cumple con las ideas establecidas por Core War. Es de hecho un subconjunto de lenguajes de programación ensamblador reales, en donde se tienen modos de direccionamiento, cuestión que está limitada en Redcode. El lenguaje contiene 9 instrucciones y por ende, aprender a programar en Redcode no es algo que lleve mucho tiempo.

Dewdney muestra -en su artículo original- una serie de programas, "creaturas informáticas", que buscan ganar el encuentro en la batalla de Core War. E increíblemente muestra algunas de ellas que son muy simples de programar, muy estúpidas en su comportamiento, pero que en el fondo nos muestran su peligrosidad para mantenerse en la memoria para así ganar el juego.

Y es aquí donde me quiero detener. Claramente hay una analogía entre un virus que por ejemplo, enferma a un ser humano, el cual es un "programa con un código que se ejecuta ciegamente", y que para combatirlo ponemos un nuevo código -digamos una medicina- que destruye el código virulento. La comparación hace pensar que finalmente la abstracción de la vida en Core War nos puede enseñar muchas más cosas de cómo se comportan los seres vivos. 

En un siguiente artículo hablaremos del código de algunas de las creaturas que luchan en MARS.