Praga, 1998: La historia de una tecnología revolucionaria

Cómo se desarrolló una de las tecnologías principales que está detrás del motor de antivirus de Kaspersky Lab.

¿Cuál es el secreto del éxito de la empresa?

Me suelo hacer esta pregunta de vez en cuando. Lógicamente, la respuesta no es fácil, ni lo será. La fórmula para hacer todo lo posible y que te salga todo bien no es sencilla. Bueno, a menos que te toque la lotería o heredes un millón de repente. Pero ese no es mi caso. Nuestro éxito se atribuye a muchos factores, principalmente tecnológicos. Hoy voy a hablar de una de las claves: una tecnología fundamental que ha ayudado durante muchos años a desarrollar productos avanzados en todas las categorías que garantizan la máxima protección contra todas las ciberamenazas de malware posibles.

Esta tecnología se llama “Praga” (Prague, en inglés).

¿Y por qué? Pues es muy simple, se inventó en Praga.

De vuelta a la primavera de 1998, juntamos a un pequeño grupo para beber cerveza y comer unos dulces checos elaborar una arquitectura para nuestros futuros productos. La reunión de Praga fue todo un éxito: producimos una nueva tecnología, Unified Component Architecture (UCA), que recoge una amplia variedad de productos de todas las plataformas posibles (sistemas operativos). UCA sigue evolucionando y es la base de casi todos nuestros productos.

Además, UCA también se ha utilizado en otras empresas que han sufrido problemas en desarrollos y proyectos “multilingüe”, lo cual sucede muy a menudo, sobre todo en proyectos complejos con muchos equipos involucrados o en empresas emergentes.

Nuestra “reunión en Praga” cumple 20 años, me di cuenta cuando indagué en los archivos y me encontré con “Documentación Tecnología Praga”, un documento con fecha del 22 de junio de 1998. Por aquel entonces nos preocupábamos por luchar contra unos virus “innovadores” y resolver problemas puramente técnicos con el motor antivirus. Pero la solución que encontramos fue mucho más amplia, más potente y más útil. Así que Praga acabó por determinar en muchos sentidos la base de la tecnología de nuestros productos de los siguientes 10 años.

¿Cómo empezó todo?

Entre la etapa en la que la compañía se encontraba en el segundo piso de una guardería en el distrito Strogino de Moscú y la etapa en el edificio acristalado de oficinas, concedimos la licencia de nuestro motor a un número de socios extranjeros. Ya teníamos una versión exitosa en el mercado llamada Antiviral Toolkit Pro 3.0. Sin embargo, el futuro tecnológico no pintaba tan bien.

Nos quedaban dos grandes desafíos que eran claramente necesarios y prometieron ser muy difíciles de implementar. El primero fue la habilidad de procesar objetos sospechosos independientemente de cómo estuvieran almacenados (un ejemplo típico es una “muñeca rusa” de objetos incrustados, es decir, un archivo de malware ejecutable dentro de un archivo que, a su vez, está dentro de otro). El segundo desafío fue crear un motor antivirus que pudiera actualizarse lo más rápido posible y que requiriera los mínimos cambios (a poder ser, cero) entre las diferentes plataformas.

Cabe recordar que los desarrolladores de virus a finales de los 90 eran muy ingeniosos y algunos virus totalmente nuevos requerían actualizar no solo las bases de datos, sino también el motor. Los usuarios no tenían conexión a Internet o era muy lenta, así que emitir una actualización de un par de megabytes era un serio problema. Dado que Windows 98 acababa de comenzar su andadura, pero no había remplazado todavía a DOS, cualquier innovación en detección debería funcionar en ambos sistemas operativos.

En general, teníamos mucho en lo que pensar cuando Alexey De-Monderik, Andrey Kryukov, Andrey Nikishin, Vadim Bogdanov, Larisa Gruzdeva y yo llegamos a Praga para buscar inspiración y poner en común todas nuestras ideas. Alquilamos una sala de conferencias en un hotel y cada día de 9 a 5 debatíamos y después, nos íbamos al restaurante y al salón de billar a probar la cerveza checa y a dejar que las ideas brotaran.

Trabajamos de forma productiva y volvimos a Moscú con un concepto. De-Monderik anotó todas nuestras ideas y este fue el documento que inspiró esta publicación:

Kryukov y Nikishin siguieron analizando Praga, pero en realidad no se creé hasta que en 1999 Andrey Doukhvalov se unió al equipo. Su experiencia en desarrollo de sistemas ayudó a convertir el concepto Praga en algo más que un sistema de plugins para un motor antivirus.

De hecho, Praga se convirtió en un sistema modular independiente en el que los objetos se creaban y administraban después de que se lanzara la aplicación, tras observar la jerarquía de objetos y habilitar el kernel o núcleo para funciones tales como memoria y gestión de mensajes. Toda la comunicación con el sistema operativo y la interfaz de usuario se lleva a cabo mediante una capa fina y se ha podido escribir casi la totalidad del núcleo del antivirus siguiendo los “plugins de Praga”.

Doukhvalov desarrolló la primera versión lista para usar para AVP 4.0. No estaba totalmente escrito al estilo de Praga, pero la fortaleza de su arquitectura ya se hacía evidente:

  • Solucionó por completo el problema de procesar objetos anidados complejos. El antivirus del motor Praga era el primero en el mercado que recuperaba fácilmente archivos infectados dentro de archivos, por ejemplo, o detectar virus entre varios volúmenes de archivos. Los módulos de detección de amenazas y tratamiento no se preocuparon por buscar dónde estaba el objeto infectado originalmente (en qué archivo o sistema de archivos, etc.).
  • La lógica del motor antivirus se actualizaba fácilmente con las bases de datos y no había necesidad de reiniciar para aceptar la nueva lógica.
  • Los módulos eran pequeños y se adaptaban fácilmente a varias plataformas. Como resultado, KAV version 6, por ejemplo, se adaptó fácilmente a Mac.
  • Todo funcionaba muy rápido y requería una cantidad mínima de memoria. Praga consumía mucho menos recursos que cualquier otra estrategia de objeto de momento.

El uso de Praga nos situó a la vanguardia de la industria informática, el enfoque modular para el desarrollo de software no estaba tan avanzado por aquel entonces. Después, registramos 4 patentes por Praga en Estados Unidos: 7386885, 7730535, 7418710, 8234656.

Praga también se podía integrar fácilmente con un código escrito sobre diferentes principios. Por ello se integró inicialmente en la versión 4.0, pero solo para solucionar unos problemas. Fue tan eficiente, que cuando surgieron problemas importantes en el desarrollo de la versión 5.0, Doukhvalov tuvo la idea de generar una nueva versión basada en Praga y ello produjo el revolucionario Kaspersky Anti-Virus version 6, del que ya hemos hablado con detalle.

Para desarrollar un “plugin de antivirus” en una estructura para crear todo un producto, algunas estrategias deben generalizarse y reinventarse. Las principales fuerzas impulsoras aquí fueron Andrey Doukhvalov y Pavel Mezhuev, de no ser por ellos, Praga no hubiese sido apropiada para estas tareas tan complejas.

Lógicamente, nada es perfecto en el mundo de desarrollo y Praga cuenta con dos desventajas importantes.

En primer lugar, la depuración no fue fácil. Y, segundo, los desarrolladores tuvieron dificultar para adaptarla. Independientemente de cómo se mire, era un sistema completamente nuevo, que imponía requisitos bastante estrictos sobre el diseño del código. Además, los módulos inicialmente tenían que escribirse puramente en C. Este nuevo método llevó su tiempo, pues necesitábamos cada vez más desarrolladores porque la compañía estaba creciendo rápidamente y nuestros productos se volvían cada vez más complejos.

De este modo, como sucede en toda la industria informática, la velocidad se convierte en una prioridad y tenemos que cambiar de forma periódica a una estrategia de objeto más conocida y convencional. Sin embargo, los fragmentos basados en Praga siguen funcionando de forma satisfactoria en nuestros productos.

Por supuesto, en aquel entonces estos inconvenientes en realidad se basaban puramente en los procesos. Podrían y deberían resolverse porque los beneficios de implementar Praga fueron considerables y justificaron por completo todos los recursos empleados. Praga resolvió uno de los problemas más difíciles, costosos e importantes en los últimos 10 años, como la portabilidad de una tecnología (incluida la portabilidad binaria) a diferentes plataformas.

En vez de crear un nuevo producto desde cero para cada sistema operativo y procesador, utilizamos un motor depurado predefinido. Esta inversión en I + D a largo plazo no solo ha dado sus frutos, sino que mantiene nuestro liderazgo tecnológico hasta día de hoy. Unified Component Architecture, sucesor de Praga, se está exprimiendo al máximo y todavía no hemos encontrado ningún problema que no pueda resolver. Esta es una prueba más de que una buena arquitectura puede superar décadas de pruebas.

Como le gusta decir a Alexey De-Monderik, Praga ha desempeñado un papel muy importante en nuestra empresa y no solo en el sentido tecnológico. Un grupo de personas comprometidas se formó a su alrededor y más tarde se convirtieron en el famoso equipo de los “Seis”. Así que, ¡enhorabuena equipo!

¡Y felicidades por este pequeño aniversario inesperado de una tecnología que cambió por completo nuestra estrategia!

Consejos