# Multipiattaforma

Il termine multipiattaforma in informatica può essere riferito ad un linguaggio di programmazione, ad un'applicazione software o ad un dispositivo hardware che funziona su più di un sistema o appunto, piattaforma (es. Unix/Linux, Windows e Macintosh). Esempi di linguaggi multipiattaforma sono: C, C++, Java, JavaScript, Perl, PHP, Python, Tcl, Erlang e REALbasic.

## Linguaggi di programmazione e applicazioni

Molti linguaggi informatici ad alto livello sono per loro stessa natura multipiattaforma, poiché sono definiti per una macchina astratta (cfr. la macchina astratta C, la macchina virtuale del Java e di altri linguaggi).
Tuttavia, per numerosi compiti, è necessario che il programma faccia riferimento a delle API che sono diverse sui diversi sistemi operativi (gestione delle finestre, accesso all'hardware, funzioni per il multithreading ecc...). Ad esempio, sebbene il C++ di per sé sia multipiattaforma, un programma scritto per Windows che usa le API di Win32, solitamente non riuscirà ad essere compilato anche su un sistema Unix, in quanto le API che rendono disponibili quelle stesse funzionalità su Unix sono scritte diversamente.
Una soluzione comune è quella di realizzare una API intermedia, implementata in una libreria che sia a sua volta portabile, e quindi implementata in modo diverso per le diverse piattaforme (mantenendo invariata l'interfaccia). Il codice del programma viene linkato a questa libreria. Un esempio tipico è quello delle interfacce grafiche (GUI).
Molti linguaggi offrono una piattaforma costituita da librerie comuni (librerie standard), che permettono una copertura maggiore o minore delle esigenze tipiche di un programma.
Un altro problema è dato dal fatto che un linguaggio può non specificare il comportamento di una certa sintassi; in questo caso, il comportamento effettivo dipende dalla implementazione specifica in uso a tempo di esecuzione, e ciò rende possibile scrivere un programma il cui corretto funzionamento si fondi su uno di questi comportamenti specifici (con la conseguenza che il programma non risulta portabile).
Inoltre, per alcuni linguaggi, compilatori diversi rispettano in modo diverso o incompleto le specifiche del linguaggio stesso; in questi casi potrebbe essere necessario fare maggiore attenzione nella scrittura del codice sorgente di un programma, prima di compilarlo su più sistemi.

## Limiti e soluzioni

Poiché fornire e collaudare versioni compilate di un programma per ogni OS ed ogni CPU è praticamente impossibile, i progetti di software libero (open source), o che altrimenti permettono all'utente di compilare il proprio codice sorgente, possono essere considerati più multipiattaforma. Allo stesso modo, i linguaggi interpretati o che richiedono una virtual machine sono più multipiattaforma quando ognuno può compilarsela. Hotspot, la virtual machine di Java della Oracle Corporation, è fornita solo sotto forma di binari precompilati, con supporto per parecchie piattaforme (ma non tutte, nemmeno potenzialmente). Per esempio, Sun supporta GNU/Linux solo sull'architettura i386 (e parzialmente AMD64) così che chiunque ha Linux su un PowerPC o su computer SPARC non può utilizzare Java, se non compilando nel linguaggio macchina nativo oppure utilizzando strumenti di terzi.
Molte API sono specifiche per una singola piattaforma. Si può dire che le OpenGL siano invece multipiattaforma perché non sono legate a un particolare sistema operativo, architettura CPU o marca di hardware grafico. API legate a una sola piattaforma possono essere ricreate sugli altri sistemi creando un livello di compatibilità, come ad esempio le librerie WINE, che consentono ai programmi che richiedono le librerie di Windows di poter funzionare su UNIX.
Ci sono anche estensioni multipiattaforma e middleware per molti linguaggi di programmazione che permettono ai programmatori di compilare e far girare lo stesso codice sorgente con minimi ritocchi su piattaforme differenti. Alcuni esempi sono le Qt e le wxWidgets.

## Multipiattaforma e Web

Le applicazioni Web sono normalmente utilizzabili da ogni piattaforma con qualsiasi web browser, senza preoccuparsi del linguaggio col quale sono state scritte. Ciò è vero perché il codice gira su un server (applicazione lato server) e la comunicazione con l'utente avviene soltanto attraverso l'HTTP e l'(X)HTML.
Le pagine web si dicono talvolta multipiattaforma o cross-browser se possono essere utilizzate da qualunque browser, o da tutti i browser recenti. Per produrre codice valido all'autore spesso occorre un'esperienza tale da "domare" le bizzarrie di alcuni browser poco conformi agli standard, come Internet Explorer.
Una pagina web contenente qualcosa non interpretabile da tutti i browser come i filmati Macromedia Flash è ancora multipiattaforma se è navigabile anche da chi non possiede lo speciale plugin. Per esempio, con l'aggiunta di immagini a sostituire un contenuto multimediale.
L'accessibilità web multipiattaforma richiede la conoscenza di standard tecnici, se una pagina è accessibile da vari sistemi come screen reader, browser basati sul Braille e piccoli dispositivi come telefoni cellulari e PDA.

## Multipiattaforma e Videogiochi

In questo caso il sistema multipiattaforma si basa sul creare un codice sorgente unico che viene poi integrato con sezioni di codice specifico quando deve essere compilato per una determinata piattaforma, in alcuni casi possono verificarsi esigenze che richiedano un interfacciamento differente con i comandi in quanto non interscambiabili oppure integrare funzioni specifiche di una determinata piattaforma.