Similares a los virus biológicos, los virus informáticos tienen una típica característica de los seres vivos: reproducirse.
En Definición hay una comparativa entre los virus informáticos y los virus biológicos, al final deduzco como programador que estos virus informáticos no son vida, porque les falta algo.
Han pasado unos cuatro años desde que comencé esta investigación y ese "algo" ha sido muy esquivo. La diferencia entre lo vivo y lo no vivo no es clara. La única pista es que los seres vivos evolucionan algo que no sucede con un virus informático por si solo.
Pero asalta la pregunta: ¿y que es evolucionar?, ¿la adaptación del ser vivo a un nuevo ambiente cambiando su cuerpo y comportamiento?, ¿una compleja simbiosis entre diversos organismos simples dando como origen a un organismo mas grande y complejo con el único fin de sobrevivir en ambientes cambiantes y hostiles?, ¿una meta de la vida para lograr además de la perfecta adaptación, poder dominar las leyes del Universo y así modificar a su antojo los distintos ambientes para un mejor vivir?. Son preguntas que por ahora tan solo plantean hipótesis y pruebas (simulaciones).
A pesar de que los virus informáticos no los considero formas de vida, son un comienzo. Desafortunadamente, se enfrentan a limitantes técnicas que impiden que estos puedan "evolucionar". Un virus que llegara a mutar alguna instrucción, lo mas probable es que deje de funcionar. Un virus puede estropear el funcionamiento del sistema operativo.
La idea es "emular" un sistema operativo para poder desarrollar organismos mejores que un virus. La funcionalidad que tengo en mente es la siguiente:
- Emulación de un sistema operativo con un sencillo árbol de directorios.
- Usar un motor de bases de datos para almacenar el estado de la simulación y los mejores organismos.
- Ejecución continuada de los organismos.
- APIs que pueden ser usados por los organismos (estos generados al azar).
- Posibilidad de agregar mas APIs para que puedan ser usadas por los organismos.
- Los organismos pueden mutar sin estropear el funcionamiento del "sistema operativo".
Este es el diseño en "bruto":
Directorio (ambiente)
1. ID (único para todo el sistema)
2. Total Fuerza Vital
3. Comentario
Archivo (Organismo)
1. ID (único para todo el sistema)
2. Directorio donde reside
3. Fuerza Vital (0 Muere)
4. Algoritmo Genético
Instrucciones del Algoritmo Genético (entre paréntesis los parámetros)
1. Cambiar Directorio (Directorio)
2. Copiarse()
3. Copiarse en un archivo al inicio (archivo)
4. Copiarse en un archivo al final (archivo)
5. Eliminar instrucciones propias (inicio, fin)
6. Autodestruirse()
7. Borrar archivo (archivo) (fuerza vital vuelve al directorio)
8. Pedir fuerza vital (cantidad)
9. Ceder fuerza vital a otro archivo (cantidad, archivo)
10. Ceder fuerza vital al directorio (cantidad)
11. Mutar una instrucción a si mismo (instrucción)
12. Mutar una instrucción a otro archivo (instrucción, archivo)
Tecnología a utilizar
Según pruebas de desempeño, Visual C++ es la opción indicada, el problema radica en que se requiere buen manejo gráfico (GUI) y por ahora no soy experto en este tópico de este lenguaje en particular. Además falta el motor de la base de datos.
Otra opción es Borland Delphi 6, que es un poco mas lento, pero en el cual soy experto en GUI y tengo varios motores de bases de datos gratuitos: uno nuevo que puede ir junto al ejecutable llamado FlashFiler.
Otra opción es trabajar con Borland C++, aún no he probado el desempeño de este programa, ni el manejo GUI, ni el manejo de bases de datos pero primeras impresiones son muy positivas en este aspecto.