Programmi Windows su Linux e viceversa

Praticamente da quando c’è Linux si è lavorato, nel mondo del software libero, per creare la possibilità di eseguire su Linux programmi scritti per il sistema operativo Windows. La prima versione sperimentale di un software che lo consente risale al 4 luglio 1993 ed è stata seguita da una serie di altre versioni per sviluppatori e smanettoni, non alla portata dei comuni mortali. Il primo serio e concreto risultato destinato al grande pubblico risale al 17 giugno 2008, data del rilascio della versione 1.0 di WINE. Il 20 aprile 2017 è stata rilasciata l’ultima versione, la 2.0.1. Grazie a WINE possiamo utilizzare su Linux moltissimi programmi scritti per Windows. Moltissimi e non tutti: in genere girano bene i programmi per architettura a 32 bit e quelli che possono funzionare senza interfacciarsi con altri.
Con il rilascio dell’Anniversary Update di Windows 10, che risale al 2 agosto 2016, Microsoft ha fatto qualche cosa di simile rendendo possibile, per computer equipaggiati Windows 10 upgradato alla versione Anniversary su architettura a 64 bit, utilizzare la shell del sistema operativo Linux su Windows. Il tutto ad uso di di gente che usa la shell, cioè di gente che lavora a riga di comando (sviluppatori, smanettoni, hacker, ecc.).
Da qualche giorno fa bella mostra di sé su Windows Store una App, che si chiama Ubuntu e che rende più agevole di prima attivare questa potenzialità. La comparsa nello Store, cui accedono anche principianti e dilettanti, ha fatto credere a qualcuno che siamo arrivati ad un WINE rovesciato, cioè a qualche cosa che consenta di far girare su Windows qualsiasi programma scritto per Linux.
Purtroppo non è così e, per fare chiarezza, oltre che per diffondere la conoscenza dei meriti di WINE, ho ritenuto di proporre l’allegato vademecum, liberamente scaricabile, stampabile e distribuibile.

wine_wsl

Addio 32 bit

Ubuntu 16.04, che sarà rilasciato il prossimo aprile, sarà l’ultimo che affiancherà alla versione a 64 bit la versione a 32 bit.
Nel mondo Linux si è avuto da tempo il precedente Chakra Arch Linux, che ha preso la decisione di abbandonare l’architettura a 32 bit già nel 2012 suscitando un vespaio di critiche: tale decisione fu infatti ritenuta di totale incoerenza con il concetto “linux per tutti” che caratterizza questo mondo. E, nel 2012, mi pare non si trattasse di critiche infondate.
Quattro anni dopo, peraltro di fronte ad una versione, la 16.04 di Ubuntu, che sarà una LTS e sarà cioè supportata e aggiornata per altri quattro anni, direi che non c’è proprio nulla da dire.
Del resto, se guardiamo al mondo Windows o Mac, le attenzioni verso l’architettura a 32 bit riguardano ormai il minimo di correttezza nei confronti di chi aveva acquistato sistemi operativi basati su quell’architettura.
Infine occorre considerare che software a 64 bit se ne trova parecchio e che anche software originariamente ed ancora basato sull’architettura a 32 bit gira molto bene anche su sistemi a 64 bit.
Forse troviamo qualche problemino nel mondo Linux, dove, per far girare su un 64 bit software a 32 bit, qualche volta dobbiamo smanettare un po’ per aggiustare le dipendenze: speriamo che il 64 bit di Ubuntu 16.04, in questo senso, sia migliore di Ubuntu 14.04 e precedenti.
Così ci dobbiamo preparare a dare l’addio al 32 bit e viene voglia di farlo subito.
Ma vediamo innanzi tutto cosa vuol dire.
Lavorare a 64 bit piuttosto che a 32 bit significa semplicemente poter accedere a una memoria RAM enormemente superiore, con il risultato di poter eseguire programmi sempre più impegnativi dal punto di vista dell’occupazione di memoria o di poter eseguire programmi meno impegnativi con velocità e scioltezza più elevate.
Perché i vantaggi del lavorare a 64 bit siano avvertibili dobbiamo però averla, la memoria RAM.
Se il nostro computer è non troppo giovane e di fascia media probabilmente avrà attorno a 2 GB di RAM: con questa dimensione non noteremo alcuna differenza tra il lavorare con un sistema operativo a 64 bit e il lavorare con un sistema operativo a 32 bit.
Per entrare in una zona grigia, dove forse si comincia a notare la differenza, dobbiamo avere a disposizione almeno 4 GB di RAM.
Se abbiamo a disposizione oltre 4 GB, con il sistema a 64 bit è un’altra vita.
Comunque, dal punto di vista della RAM che abbiamo a disposizione, se muore il 32 bit non abbiamo problemi a passare al 64 bit.
Il problema vero è il processore: se, anche indipendentemente dalla sua architettura, può lavorare solo a 32 bit, esso non potrà funzionare con un sistema operativo a 64 bit.
Prima di avventurarci a caricare un sistema a 64 bit dobbiamo pertanto sapere se il nostro processore lo può reggere.
Un computer di fascia media acquistato di recente dovrebbe essere senz’altro già pronto per il 64 bit; anzi, con ogni probabilità, ha già montato un Windows a 64 bit ed allora la risposta ce l’abbiamo già.
Di fronte ad un computer non giovane, con un sistema operativo Windows imballato che si inceppa ogni due per tre, ci potrebbe venire voglia di installare un bel sistema Linux a 64 bit ed allora la curiosità si giustificherebbe.
Se usiamo un sistema operativo Linux – che, come sempre ricordo, è il migliore di tutti – basta che apriamo il terminale e scriviamo il comando lscpu; nella seconda riga della risposta, intitolata CPU op-mode, troviamo ciò che cercavamo: se c’è scritto solo 32-bit vuol dire che il nostro processore può lavorare solo a 32 bit, se c’è scritto 32-bit, 64-bit vuol dire che il nostro processore può lavorare anche a 64 bit, ecc.
Se usiamo un sistema operativo Mac dobbiamo andare nel menu Apple -> Informazioni su questo Mac -> Più informazioni -> Hardware -> Nome del processore; ottenuto il nome del processore andiamo su Internet e vediamo di capirci qualche cosa.
Se usiamo un sistema operativo Windows evitiamo di perdere tempo con i vari suggerimenti che troviamo in rete o sul sito della stessa Microsoft, tra cui addirittura quello di andare a sfrugugliare nel registro di sistema: in questo modo sono arrivato a scoprire che un processore Intel Core2 Duo, notoriamente adatto anche per sistemi a 64 bit, può supportare solo il 32 bit. Più semplicemente, seguendo i vari percorsi inventati nelle varie edizioni di Windows, accertiamo tra le risorse di sistema il nome del processore e poi andiamo su Internet.
Se poi, rimanendo in campo Windows, l’informazione ci interessa solo per sapere se possiamo upgradare il sistema operativo Windows a 32 bit che già abbiamo, mamma Microsoft ci mette a disposizione il programma Windows 7 Upgrade Advisor che rimedia al casino citato prima.
Altra opportuna verifica, ad evitare di crearci problemi inutili, quella sul sistema operativo in uso: potremmo infatti avere già un sistema a 64 bit senza saperlo.
Questa verifica è semplicissima. In Windows basta aprire il Pannello di Controllo e andare su Sistema e troviamo la descrizione del sistema operativo: se è presente in qualche modo la sigla x64 significa che abbiamo già un sistema a 64 bit. In Linux e Mac OS X basta digitare nel terminale il comando uname -a: se nella risposta compaiono sigle come i386, i486, i586, i686 vuol dire che abbiamo installato un sistema a 32 bit; se nella risposta compare la sigla x86_64 vuol dire che abbiamo installato un sistema a 64 bit.
Una volta dotati di un sistema a 64 bit potremo farvi girare anche vecchi programmi a 32 bit.
Se ci dilettiamo a fare noi stessi programmi, ricordiamo tuttavia che un eseguibile da noi compilato su un sistema a 64 bit non gira su un sistema a 32 bit.
Ovviamente, invece, script o bytecode tipo Python, Java e quant’altro viene interpretato, ovunque sia stato scritto, gira dove trova l’interprete.
Buon 64 bit.

Allarmismi senza costrutto

Il Corriere della Sera del 15 gennaio 2016 apre la pagina 41 annunciando che “Il personal computer è morto (ed è colpa dell’iPhone)”.
Come abbia fatto un telefonino, sia pure smart (l’iPhone è uno smartphone), che, peraltro, ha una quota di mercato solo del 16%, ad uccidere il personal computer lo sa solo m.penn che firma il trafiletto a commento di questo annuncio funebre.
Forse voleva dare la colpa all’iPad, che, quanto meno, assomiglia di più a un PC e c’è stato un lapsus: anche qui, tuttavia, saremmo di fronte ad un dispositivo che ha una quota di mercato solo del 25% e, pertanto, non è così potente da ammazzare alcunché.
A meno che giochi la volontà di attribuire per forza qualche merito ulteriore al compianto Steve Jobs, che di meriti ne ha già tanti e non ha certo bisogno anche di questo.
La verità è che, nel 2011 per la prima volta, avvenne il sorpasso sulle vendite di personal computer da parte delle vendite di così detti dispositivi mobile (non solo quelli della Apple con la i iniziale ma tutti): infatti, contro 415 milioni di personal computer, vennero venduti 550 milioni tra smartphone (488 milioni) e tablet (62 milioni).
Nel 2015 pare che, più o meno, siano stati venduti 335 milioni di personal computer (115 milioni desktop, 165 milioni portatili e 55 milioni ultrabook) contro 2.270 milioni di dispositivi mobile (1.950 milioni smartphone e 320 milioni tablet).
Se, allora, analizziamo un po’ meglio la realtà delle cose vediamo che il personal computer tradizionale, in quattro anni, non è affatto morto ma se ne sono semplicemente contratte le vendite di circa il 23%: fenomeno ampiamente giustificato dal fatto che la vera e propria esplosione delle vendite di dispositivi mobile, ottimi per comunicare ed anche dotati di capacità elaborativa e ludica, doveva giocoforza allontanare dall’uso del personal computer tutta una categoria di persone che se ne servivano solo per andare su Internet, per chattare, per scambiare messaggi, per tenere i conti della spesa e per giocare, cose che si fanno egregiamente con smartphone e tablet, con minore ingombro e con maggiore comodità.
Ci sono tuttavia molte altre cose che ancora si fanno meglio con il personal computer, comprese quelle che la citata pagina del Corriere della Sera reclamizza come appannaggio del mondo degli smartphone ma che altro non sono che versioni per lo più ludiche di più completi software per personal computer: basta leggere la serie degli articoli sul software libero pubblicati in questo mio blog.
Si tranquillizzi, pertanto m.penn: il personal computer non è morto e vivrà ancora a lungo. Quanto meno, al momento attuale, non esiste ancora il killer adatto per farlo morire e questo, anche in futuro, non sarà certo l’iPhone, anche per un fatto fisico che la stessa tecnologia non può superare: quello della dimensione della tastiera e dello schermo.
La vera rivoluzione tecnologica che ha fittiziamente separato i due mondi è quella della sostituzione del processore e dei suoi accessori tipici nel personal computer con il chip (detto SoC, System on a Chip) tipico del tablet e dello smartphone, chip nel quale è racchiuso allo stato solido tutto ciò che nel personal computer è raggruppato nella scheda madre (processore, scheda video, memoria).
Se poi attorno a questo chip aggreghiamo uno schermo che si presti anche al CAD e non ci faccia cavare gli occhi e una tastiera sulla quale si possa scrivere comodamente con quante dita vogliamo avremo magari inventato un’altra macchina, ma sarà pur sempre un personal computer: a meno che lo vogliamo chiamare tablet rinforzato.
Perciò, tutto sommato, cosa c’è che muore ed a cosa servono questi allarmismi?

Vari tipi di programmi

I primi tre programmi che ho proposto sono ognuno di un tipo diverso.

Il programma calendario è un programma compilato, cioè è codificato, come si suol dire, in linguaggio macchina in modo da poter essere letto ed eseguito direttamente dalla CPU (Central Processing Unit) del computer attraverso il sistema operativo di cui il computer è dotato.
Questi programmi si scrivono in un linguaggio di programmazione che usa parole del linguaggio umano seguendo una determinata sintassi. Una volta scritti si traducono in linguaggio macchina attraverso programmi compilatori e si producono i così detti eseguibili (file che nel mondo Windows hanno l’estensione .exe).
I più famosi linguaggi che si prestano per produrre questo tipo di programmi sono, in ordine di anzianità, Pascal, C, C++, ADA.
Una volta che abbiamo l’eseguibile non ci interessa avere il programma compilatore e non ci interessa nemmeno sapere con quale linguaggio è stato prodotto l’eseguibile. A meno che vogliamo modificare l’eseguibile stesso: ma allora dobbiamo avere anche il codice sorgente, cioè quello scritto prima di essere codificato in linguaggio macchina.
La stragrande maggioranza del software commerciale è costituita da eseguibili di questo tipo e le aziende che producono questo software ben si guardano dal distribuire il codice sorgente, che mantengono protetto da brevetti. Nel mondo del software libero, invece, è normale distribuire anche il sorgente affinché ognuno possa contribuire al miglioramento del software stesso.
Il vantaggio di questo tipo di software è quello della velocità di esecuzione: vantaggio che, con la potenza dei processori che abbiamo oggi, è sempre meno percepibile in quanto vengono ormai eseguiti velocemente anche programmi di altro tipo.
Lo svantaggio sta nel fatto che un programma destinato ad essere eseguito su un certo sistema operativo deve essere compilato su e per quel sistema operativo. Un programma compilato per Windows non gira su Linux e su OS X e viceversa. Cioè, come si dice, gli eseguibili compilati non hanno portabilità.

Il programma calcoliGeometrici, prodotto utilizzando il linguaggio di programmazione Java, è anch’esso un programma compilato: la codifica, tuttavia, non lo traduce in linguaggio macchina ma in qualche cosa di intermedio, chiamato bytecode.
Questo bytecode non è direttamente proponibile per l’esecuzione dal sistema operativo del computer alla CPU ma viene passato alla CPU da una piattaforma intermedia installata sul sistema operativo, la così detta macchina virtuale Java, JRE (Java Runtime Environment).
Se il computer non ne fosse dotato, basta scrivere la parola java in una barra di ricerca sul web e verremo immediatamente indirizzati al sito da cui possiamo scaricare la versione adatta al nostro sistema operativo.
Molto software commerciale è prodotto con Java con distribuzione dell’eseguibile codificato in bytecode, che non è umanamente leggibile e si presta alla tutela dei segreti di fabbricazione. Nel mondo del software libero viene ovviamente diffuso anche il sorgente scritto nel linguaggio Java, derivato dal linguaggio C.
Il vantaggio di questo tipo di software sta nel fatto che lo stesso eseguibile gira su tutti i sistemi operativi che siano dotati della macchina virtuale Java, cioè è dotato della massima portabilità.
Lo svantaggio sta nella relativa lentezza di esecuzione dovuta al doppio passaggio tra sistema operativo e macchina virtuale e tra macchina virtuale e CPU; lentezza che praticamente non si avverte con i più moderni processori ma che si può avvertire su computer anzianotti.

Il programma MasterMind non è un programma compilato ma è, praticamente, un sorgente scritto nel linguaggio Python: in termine tecnico si chiama uno script.
Gli script, per essere eseguiti, hanno bisogno di essere tradotti in linguaggio macchina attraverso un interprete che li legge, li traduce e li trasmette alla CPU.
Sul computer dove vogliamo utilizzarli deve essere installato questo interprete.
I principali linguaggi di scripting, in ordine di anzianità, sono Perl, Python e Ruby.
Come per Java il vantaggio è la portabilità, a condizione che sul computer sia installato l’interprete.
Lo svantaggio è la relativa lentezza di esecuzione.