Uno dei più grandi problemi nella storia dell’informatica è stato la migrazione di un programma da un computer ad un altro: ogni processore ha infatti un suo “linguaggio”, spesso non compatibile con gli altri, formato da “uni” e “zeri” disposti in sequenze ben precise. Inizialmente i programmatori utilizzavano questo linguaggio, scrivendo i programmi in quello che è chiamato linguaggio macchina o codice binario, con tutte le ovvie limitazioni che questo comportava: la scrittura di un programma era valida solo ed esclusivamente per quei modelli di processore che condividevano quel linguaggio macchina e non era possibile utilizzare il programma su altri computer. Con l’avvento dei cosiddetti “linguaggi di alto livello”, ovvero linguaggi di programmazione che utilizzano strutture e parole semplici da comprendere per gli esseri umani, il problema si è parzialmente ridotto perchè era sufficiente affidarsi al compilatore ed eventualmente modificare alcune porzioni di codice per poter “portare” un programma da un computer ad un altro. Negli anni ’90 Sun, azienda californiana acquistata da Oracle nel Gennaio 2010, ha sviluppato il linguaggio Java: la particolarità di questo linguaggio è la sua estrema portabilità, data dal fatto che il codice scritto dal programmatore viene compilato in bytecode – ovvero il linguaggio macchina utilizzato dalla Java Virtual Machine, una sorta di “processore virtuale” che interpreta il bytecode – e successivamente interpretato nel linguaggio macchina del processore su cui viene eseguito il codice. Cosa significa questo? Il codice Java che io scrivo sul mio notebook con processore Intel ad architettura x86_64 è eseguibile anche sul mio telefono con processore ad architettura ARM Cortex A8, a patto che sia stata scritta la Java Virtual Machine che interpreta il bytecode.

Per fare un esempio pratico, questa è un’operazione di somma tra registri (piccole “celle” di memoria all’interno del processore che contengono dati) nel linguaggio macchina del MIPS R3000, processore prodotto intorno alla metà degli anni ’80 dalla MIPS Technologies:

00000001010111110000000000100000 (equivalente a "add $s0, $a1, $t7": somma i valori contenuti nei registri di memoria a1 e t7 e ponili nel registro s0)

Un’operazione molto simile in linguaggio Java potrebbe essere la seguente:

int s0 = 0; # s0 ha valore 0.
int a1 = 2; # a1 ha valore 2
int t7 = 4; # t7 ha valore 4
s0 = a1 + t7; # s0 assume il valore della somma di a1 e t7.

Anche se Java può sembrare incomprensibile a chi non ha familiarità con il mondo della programmazione, in realtà appare da subito come più comprensibile di una serie di 0 ed 1 solo apparentemente senza significato.

Uno dei punti forti di Android, motivo di una delle numerose dispute legali in corso con protagonista il robottino verde, è il forte utilizzo di Java: tutte le applicazioni sono scritte in tale linguaggio, potendo così essere eseguite da tutti i cellulari con sistema operativo Android. Vien da sè che sia relativamente più semplice scrivere una nuova Virtual Machine piuttosto che simulare un intero dispositivo – inclusi processore, fotocamera, schermo touch, connessione USB, connessione dati ecc – su cui dev’essere eseguito codice scritto esplicitamente per quell’hardware. Eppure un progetto, chiamato iEMU, sta puntando a creare un emulatore di iPhone con cui utilizzare le applicazioni per iOS su Android. L’emulatore, basato sull’emulatore open source QEMU, ha per ora il solo supporto della CPU Samsung S5L8930 (più comunemente conosciuta come Apple A4), anche se conta di poter trovare fondi con cui finanziare lo sviluppo tramite Kickstarter. Anche se è ancora solo all’inizio, il progetto appare promettente ed interessante soprattutto perchè porterebbe Android ad avere il più grande parco applicazioni mobile esistente. Se dovesse – e ce lo auguriamo – riuscire nel suo intento, il progetto porterebbe Android in una posizione di vantaggio assoluto rispetto ad iOS, potendo eseguire applicazioni provenienti da entrambi i mondi e (forse) rivoluzionando il mondo mobile. Chi volesse seguire lo sviluppo del progetto può farlo guardando questa pagina.


[Via androidandme.com]