Ben pochi si sono resi conto che anche la tecnica informatica ha i suoi miti e le sue mode, solitamente ambedue spinti da politiche di marketing. Vale allora la pena di fare alcune considerazioni sull’evoluzione del software e sulle logiche di mercato.
Il Titanic l’hanno progettato gli ingegneri, l’Arca di Noè l’hanno fatta i dilettanti.
Ricordo ancora il corso Ada degli anni ’80: “Ada, l’ultimo linguaggio di programmazione. Verrà sostituito da generatori automatici di codice (nel 2000)”. Così nelle dispense veniva sintetizzato tale poderoso ed accuratamente progettato linguaggio di programmazione. Tutti i passi canonici di un progetto erano stati rispettati, con estrema attenzione anche alle fasi di prototipazione.
Più o meno negli stessi anni i progettisti spiegavano con dettaglio i motivi per cui le nuove architetture delle CPU dei computer, basate su un numero di istruzioni moderato (RISC – Reduced Instruction Set Computer) avrebbero raggiunto prestazioni inimmaginabili da parte degli obsoleti CISC (Complex Instruction Set Computer) che quindi sarebbero dovuti uscire dal mercato.
Di Ada non sento parlare da diverso tempo, quasi tutti programmano nelle varie versioni di C, senza pensare più ad Ada o senza averlo addirittura sentito nominare. Anche i generatori automatici di codice è da un po’ che non li sento nominare.
Nel frattempo sono dovuto andare ad un funerale. DEC (Digital Equipment Corporation, poi Compaq, poi HP) ha da qualche tempo ha sospeso la fornitura di Windows NT per architetture (Risc) di tipo Alpha. Nel passaggio a windows 2000 DEC/Compaq/HP ha deciso di supportare invece Linux. Chi aveva investito su tale piattaforma ha dovuto adeguarsi. Il RISC non era poi un progresso così travolgente.
Tra i fallimenti storici dell’informatica qualcuno ricorda anche un mastodontico sistema operativo di nome Multics, che alla fine partorì solo un topolino. Qualcuno chiamò Unix quel topolino.
Ma non sempre le cose vanno male, anche contro le previsioni degli esperti. Un esempio abbastanza noto è quando un professore di Linus Torvalds, sentendolo dire che voleva progettare un kernel monolitico, disse che gli sembrava un’idea insensata. Dal punto di vista progettuale non aveva tutti i torti, ma il successo di quel kernel fu notevole (per quanto linux oggi non mi appaia più tanto monolitico).
In definitiva molte scelte progettuali apparentemente “allo stato dell’arte” si sono dimostrate dei flop clamorosi, mentre scelte casuali o addirittura controcorrente hanno raggiunto un notevole successo.
Un approccio evolutivo al software ed ai sistemi operativi
Tempo fa, a me sembrava del tutto normale affermare, riguardo ai sistemi operativi Microsoft, che “sorprendentemente Win 98 a volte si è dimostrato più robusto di Win NT / XP”, mentre a qualcuno più abituato a pensare nei termini delle brochure commerciali ciò sembrò scandaloso.
Eppure anch’io credevo che NT fosse un SO decisamente robusto, finchè non ho avuto modo di metterlo alla prova. Il risultato sono state molte arrabbiature e molti BSOD (Blue Screen of death, la schermata blu con cui NT si inchioda).
Sicuramente mia inesperienza, dirà qualcuno, oppure sfortuna, perchè “NT è un sistema operativo a 32 bit moderno e stabile e ha una completa protezione delle memoria fra le applicazioni”. Ma la protezione degli spazi di memoria può solo evitare che un errore software provochi altri danni, non risolve l’errore originario.
Del resto, nella mia esperienza ho visto molti sistemi operativi, free, proprietari, con microkernel, con kernel monolitico, con architetture miste. Solitamente tutti avevano una loro validità e per ognuno c’era qualche ambiente più adatto. Qnx e Linxos adatti alle applicazioni real-time, eventualmente embedded, Mac Osx adatto alla produttività personale a casa ed in ufficio, BSD ottimo come web server, Solaris da usare per le applicazioni in cui robustezza e continuità fossero fondamentali, Linux per molti usi da server ed anche come workstation ormai; anche Windows è utile per chi vuole usare un PC senza faticare troppo, può essere utile per i manager di aziende.
Ma qualcosa ho visto verificarsi regolarmente nei Sistemi Operativi, come nel software in genere, ed è la differenza tra i vari stadi di sviluppo di un programma. Quando un programma appare per la prima volta, per quanto il produttore possa dire di averlo debugato e collaudato, esso tende a manifestare errori ed instabilità. Man mano che la base installata si amplia e gli errori vengono corretti il comportamento del software migliora di solito in modo considerevole. Se il lavoro di affinamento dura a lungo si possono avere ottimi risultati in termini di stabilità. Così, nonostante le promesse dei venditori, molto spesso il software migliore è quello vecchio, non quello nuovo.
Chiaramente i sistemi operativi sono programmi anche loro, quindi le protezioni, anche basate sull’hardware, non risolvono il problema, mentre l’affinamento progressivo ne risolve molti. In effetti questo i commerciali quando vogliono lo sanno bene, vista l’insistenza di MS sull’esperienza condensata in XP. Molto spesso l’evoluzione è più importante del progetto base.
Ma in generale i venditori non possono parlare bene di ciò che è vecchio, altrimenti cosa vendono? Perciò sono sempre lì a spingere sugli inediti progressi progettuali dell’ultima versione, che rendono obsoleto il prodotto precedente. Più o meno come nelle automobili, ma con la sostanziale differenza che il software non tende ad arrugginire con il tempo.
Non ascoltiamo troppo i venditori e cerchiamo di osservare la realtà con i nostri occhi. Potremmo scoprire che il miglior prodotto è già sulla nostra scrivania ed è il nostro vecchio PC.
Truman Burbank
Riferimenti bibliografici: Geoffrey James The Tao of programming
Chi lo trovasse un po’ strano, può leggere prima Software Engineering di Sommerville (Addison-Wesley, varie edizioni), che dice molte cose analoghe, ma in tono più prolisso.
Vedi anche: Sicurezza informatica e business