Ha suscitato molto interesse il recente articolo di Alessio Di Domizio, che ha rispolverato un’autentica chicca sconosciuta ai più (a me sicuramente, ma anche a molti altri, a giudicare dai commenti), l’interfaccia “amichevole” BOB di Microsoft.
Trattandosi di un’applicazione realizzata per Windows 3.1 e Windows ’95, non dovrebbe essere difficile farla girare nei nostri PC, pur trattandosi di “vecchiume”. Sappiamo, infatti, che la soluzione che Microsoft ha adottato quando si parla di far girare codice “datato” (o legacy, come si dice in gergo) sono i subsystem (sottosistemi), di cui abbiamo ampiamente parlato in quest’articolo .
Nessun problema, quindi, anche facendo girare l’applicazione in versione WIN16? Purtroppo i subsystem non sono perfetti e non risolvono al 100% i problemi di incompatibilità, per cui alcune vecchie applicazioni possono non girare, o comunque non girare correttamente.
Ad esempio un s.o. della famiglia NT (NT, 2000, XP, Vista) non permette in alcun modo a un’applicazione a 16 bit (che gira nel suo apposito subsystem) di accedere direttamente all’hardware o manipolare gli interrupt, per cui possiamo dire addio a vecchi giochi DOS non proprio “ortodossi” che sfruttavano questa (ai tempi legittima) possibilità.
Si tratta sicuramente di un grosso limite, ma permettere, come facevano le versioni di Windows fino alla ’98, l’interazione con l’hardware alle applicazioni DOS poteva facilmente portare a problemi di stabilità o addirittura al crash dell’intero sistema. Virtualizzare e bloccare le risorse hardware rappresenta, quindi, il miglior compromesso raggiungibile per garantire solidità al sistema e un buon livello di compatibilità.
Si potrebbe pensare che almeno le applicazioni WIN16 (che, quindi, giravano sotto Windows 3.x) possano girare tutte senza problemi. Anche questo purtroppo non è vero, perché esistono dei limiti precisi del WOW16 (è chiamato così il layer che si occupa di “traslare” le richieste dell’applicazione dal subsystem WIN16 a quello WIN32, che si occupa di effettuare poi il lavoro vero e proprio).
WOW16 permette di far funzionare esclusivamente applicazioni che girano nella modalità “standard” di Windows 3.x, e non “enhanced”. Quindi sono tagliate fuori tutte le applicazioni più recenti che sfruttavano gli 80386 (e successori) e il codice a 32 bit. Possibile, dunque, che il già citato BOB non sia in grado di girare nella versione per Windows 3.1.
Un altro limite poco noto è quello del numero massimo di handle che un’applicazione WIN16 poteva utilizzare. Un handle rappresenta una “risorsa” (blocco di memoria, file aperto, thread, processo, ecc.) che è stata allocata dal s.o. e che l’applicazione può utilizzare.
Un handle richiede 16 bit per essere memorizzato, per cui un’applicazione WIN16 è teoricamente in grado di poter allocare e gestire fino a 65536 “risorse”. Ebbene, non si sa per quale motivo sia stato fatto, ma WOW16 limita a 14 bit (16384) questo dato. Quindi applicazioni WIN16 particolarmente complesse e avide di risorse, a un certo punto potrebbero smettere di funzionare generando l’errore “The Win 16 Subsystem has insufficent resources to continue running“.
Sembra, comunque, che qualcuno abbia trovato una soluzione a questo problema, patchando in maniera opportuna la libreria di sistema WOW32.dll tramite un procedimento un po’ macchinoso, ma che sembra funzionare.
I problemi con le applicazioni DOS e WIN16 non sono finiti ma, al contrario, sono irrimediabilmente peggiorati se consideriamo che sulle versioni di Windows a 64 bit non è nemmeno possibile farli girare, in quanto i relativi subsystem sono stati rimossi.
In particolare per le WIN16 il problema era particolarmente rognoso da risolvere, in quanto tutti gli handle generati da questi s.o. sono a 32 bit, per cui non era possibile semplicemente “troncarli” restituendo soltanto 16 bit alle vecchie applicazioni.
Non tutte rose e fiori, dunque, con la retrocompatibilità garantita dai subsystem. Purtroppo ogni scelta è sempre frutto di compromessi, e la soluzione adottata da Microsoft non è esente da difetti, ma permette comunque un buon livello di compatibilità con le vecchie applicazioni che, tutto sommato, non dispiace.