Praga 1998: storia di una tecnologia innovatrice

Ecco come è nata una delle tecnologie chiave alla base del motore antivirus di Kaspersky Lab.

Qual è il segreto del successo della nostra azienda?

Di tanto in tanto mi pongo questa domanda, formulata da punti di vista diversi; ovviamente non c’è una risposta semplice perché non esiste una formula altrettanto semplice per “fare tutto ciò che ci si propone e che tutto vada per il verso giusto”. Un colpo di fortuna così avviene solo quando si vince la lotteria o si ottiene una eredità multimilionaria. Per quanto mi riguarda, il nostro successo è dovuto a vari fattori, che riguardano soprattutto la tecnologia. Oggi vi voglio parlare di uno dei più importanti tra questi fattori, una tecnologia fondamentale che per molti anni ci ha aiutato a sviluppare prodotti innovatori in diverse categorie, oltre a fornire sempre la massima protezione da tutte le possibili minacce informatiche.

Questa tecnologia si chiama Praga e il suo nome prende spunto dalla città dove è stata inventata.

Era la primavera del 1998, e in quel periodo avevamo creato un piccolo gruppo per bere birra e provare le prelibatezze gastronomiche della Repubblica Ceca creare un’architettura che ci sarebbe potuta servire per i nostri futuri prodotti. L’idea di riunirci ha dato davvero grandi frutti: abbiamo prodotto una nuova tecnologia (l’UCA – Unified Component Architecture) che si poteva applicare a un’ampia gamma di prodotti e su tutte le piattaforme disponibili (sistemi operativi). L’UCA è in continua evoluzione ma rimane comunque lo “scheletro” di quasi tutti i nostri prodotti. Inoltre, è stata adocchiata da altre aziende che si sono imbattute nel problema di dover gestire e sviluppare progetti “multilingue”, il che accade piuttosto spesso, soprattutto quando si tratta di progetti complessi in cui sono coinvolte diverse équipe o quando avviene una fusione tra compagnie.

La “riunione di Praga” ha compiuto vent’anni nel 2018; me ne sono reso conto quando ho dato un’occhiata agli archivi e mi sono imbattuto nella “documentazione sulla tecnologia di Praga”, che risale al 22 giugno del 1998. Ai tempi, la nostra preoccupazione era di contrastare qualche virus “innovativo” e di risolvere problematiche puramente tecniche che avevano a che fare con il nostro motore antivirus. E la soluzione che abbiamo trovato era molto più ad ampio spettro, più potente e di maggiore utilità. Per molti aspetti Praga è stata la tecnologia base dei nostri prodotti per i successivi 10 anni.

Come è iniziato tutto?

Ci troviamo nella tappa intermedia, tra gli albori della nostra azienda al secondo piano di una scuola materna nel quartiere moscovita di Strogino, e il nostro incredibile quartier generale tutto di vetro. Avevamo concesso la licenza del nostro motore a numerosi partner stranieri e avevamo già lanciato sul mercato una versione chiamata Antiviral Toolkit Pro 3.0 e con un certo successo. Comunque, il nostro futuro tecnologico non sarebbe stato tutto rose e fiori.

Avevamo due grandi sfide da affrontare, il che era assolutamente necessario, c’erano molte difficoltà da superare. La prima riguardava la capacità di processare oggetti sospetti indipendentemente da dove fossero immagazzinati (un tipico esempio sono gli oggetti embedded, una sorta di matrioska grazie al quale un file malware eseguibile si trova all’interno di un file, a sua volta in un altro file etc). La seconda sfida era creare un motore antivirus che potesse essere aggiornato il più velocemente possibile e che richiedesse delle modifiche minime (o nessuna, ancora meglio) tra le diverse piattaforme.

Nel caso qualcuno lo avesse dimenticato, i creatori di virus degli anni Novanta erano davvero fantasiosi: alcuni nuovi virus non solo richiedevano l’aggiornamento del database per intero, ma del motore stesso. Gli utenti ai tempi disponevano di una connessione a Internet molto lenta (nel caso ce l’avessero) e scaricare un aggiornamento di un paio di megabyte poteva costituire un serio problema. Windows 98 si stava facendo spazio ma non aveva ancora sostituito DOS completamente, e qualsiasi innovazione nel nostro campo doveva essere implementata in entrambi i sistemi operativi, il che richiedeva molto lavoro.

Insomma, avevamo molti argomenti da trattare durante la nostra settimana di brainstorming a Praga (oltre a me, vi partecipavano Alexey De-Monderik, Andrey Kryukov, Andrey Nikishin, Vadim Bogdanov e Larisa Gruzdeva). Abbiamo noleggiato una sala conferenza di un hotel e ogni giorno, dalle 9 alle 17, affrontavamo tutte queste tematiche. Dopo una giornata di intenso lavoro, andavamo al ristorante o al biliardo per bere una birra e per far riposare le nostre idee affinché potessero svilupparsi.

Sono state giornate di lavoro molto produttive e siamo tornati a Mosca con un progetto; De-Monderik ha scritto una bozza delle idee che ne sono venute fuori ed è stato proprio quel documento a ispirare questo articolo.

Kryukov e Nikishin hanno poi continuato a sviluppare Praga, che è stato creato ufficialmente nel 1999, quando Andrey Doukhvalov è entrato a far parte del team. La sua esperienza in sviluppo di sistemi ha aiutato a trasformare Praga in un progetto concreto e non solo in un sistema di plugin per un motore antivirus.

Praga è diventato un sistema modulare indipendente dove gli oggetti venivano creati e gestiti dopo il lancio dell’applicazione, dopo aver osservato la gerarchia degli oggetti e dopo l’abilitazione da parte del kernel di funzionalità come la gestione della memoria e dei messaggi. Tutta la comunicazione con il sistema operativo e l’interfaccia utente avviene mediante un sottile strato, ed è stato possibile scrivere quasi il kernel intero dell’antivirus seguendo i “plugin Praga”.

Doukhvalov ha sviluppato la prima versione pronta all’uso per AVP 4.0. Non era ancora stato riscritto “allo stile Praga” ma i punti di forze erano già evidenti:

  • Era stato risolto completamente il problema di processare gli oggetti annidati in maniera complessa. L’antivirus del motore Praga era il primo sul mercato a restaurare facilmente file infetti che si trovavano all’interno di altri file o a individuare virus tra vari volumi di file. Ai moduli di trattamento e individuazione delle minacce non interessava dove si trovasse originariamente l’oggetto infetto (in quale file o file di sistema etc);
  • La logica del motore antivirus veniva facilmente aggiornata con i database e non c’era bisogno di riavviare per accettare la nuova logica;
  • I moduli erano snelli e in grado di adattarsi facilmente alle diverse piattaforme. In questo modo, ad esempio, la versione 6 di KAV poteva essere usata facilmente su Mac;
  • Tutto funzionava più velocemente ed era necessaria poca memoria: Praga consumava un volume molto inferiore di risorse rispetto a qualsiasi altro framework di allora.

Grazie all’uso di Praga, eravamo all’avanguardia nel settore IT: l’approccio modulare allo sviluppo del software ai tempi non era così avanzato. Successivamente, negli Stati Uniti abbiamo registrato ben 4 brevetti di Praga: 7386885, 7730535, 7418710 e 8234656.

Inoltre, Praga si integrava facilmente a codici scritti seguendo diversi principi, per questo è stato costruito inizialmente per la versione 4.0 ma solo per risolvere una piccola serie di problemi. Aveva superato la prova così bene che, quando sono sorti problemi più importanti durante lo sviluppo della versione 5.0, a Doukhvalov gli è venuta in mente l’idea di creare una versione completamente nuova di Praga, che ha portato alla rivoluzionaria versione 6 di Kaspersky Anti-Virus, di cui abbiamo già parlato in dettaglio in passato.

Per passare da un “plugin antivirus” a un framework di un intero prodotto, bisogna riorganizzare e reinventare alcuni processi. A questo ci hanno pensato Andrey Doukhvalov and Pavel Mezhuev, senza di loro Praga non si sarebbe potuto adattare a certe task così complesse.

Ovviamente la perfezione non esiste, soprattutto nel nostro mondo, e Praga ha due inconvenienti principali.

Innanzitutto, il debugging era difficoltoso e gli sviluppatori avevano difficoltà ad adottare Praga. Indipendentemente da come lo si guardasse, si trattava di un sistema completamente nuovo che imponeva dei requisiti piuttosto rigidi per il design del codice. Inoltre, all’inizio i moduli dovevano essere scritti in puro C, portare avanti la formazione su questo nuovo metodo richiedeva tempo, avevamo bisogno di un numero sempre maggiore di sviluppatori perché l’azienda stava crescendo velocemente e i nostri prodotti diventavano sempre più complessi.

Così come avviene nel settore IT in generale, la velocità era diventata una priorità e, poco a poco, siamo dovuti passare a framework di oggetti più conosciuti e convenzionali. Tuttavia, alcuni frammenti basati su Praga continuano a funzionare correttamente all’interno dei nostri prodotti.

Naturalmente, ai tempi questi inconvenienti riguardavano i processi e le risorse. Si potevano e si dovevano risolvere poiché i vantaggi derivanti dall’implementazione di Praga erano considerevoli e giustificavano appieno tutte le risorse impiegate. Praga aveva risolto uno dei problemi più difficili, costosi e importanti da 10 anni a questa parte, ovvero la portabilità di una tecnologia (portabilità binaria compresa) su diverse piattaforme.

Invece di creare un prodotto da zero per ogni sistema operativo e processore, usavamo un motore in debug e pronto all’uso. Questo grande investimento in ricerca e sviluppo non è stato completamente ripagato ma ci rende ancora oggi leader in tecnologia: l’UCA (il successore di Praga) è ancora largamente utilizzato e per il momento non abbiamo trovato problemi che non possano essere risolti grazie a essa. Un’ulteriore prova che una buona architettura può reggere a decenni di test.

Come dice spesso Alexey De-Monderik, Praga ha avuto un ruolo importante nella nostra azienda, e non solo dal punto di vista tecnologico. Alcune persone hanno formato un gruppo in modo naturale avendo questo progetto in comune, gruppo che successivamente è diventato il famoso “team dei Sei“. Congratulazioni!

E oggi festeggiamo questo piccolo ma inaspettato anniversario di una tecnologia che ha rivoluzionato un intero settore!

Consigli