# Piattaforma (informatica)

Una piattaforma informatica, si riferisce a una base oggetto di standard del settore su cui è possibile eseguire e sviluppare programmi informatici.

## Descrizione

É un componente di un sistema informatico ed è collegata ad altri componenti. Può trattarsi dell'hardware o di software, in quest'ultimo caso ad esempio di un sistema operativo, o di un browser web e della relativa interfaccia di programmazione o di altro software sottostante, purché il programma informatico venga eseguito con esso.
Gli altri componenti del sistema informatico in cui opera non sono visibili alla piattaforma stessa. Grazie a questa astrazione, una piattaforma può essere trasferita a diversi sistemi informatici e funzionare correttamente. La complessità interna del sistema informatico viene aumentata con l'aiuto della tecnologia software, il che si traduce in un utilizzo semplificato da parte degli utenti umani.
I componenti o i livelli di astrazione di una tipica piattaforma sono: architettura del computer, stack software, ambiente di esecuzione, linguaggio di programmazione.

## Classificazione

Si possono distinguere piattaforme hardware, operativa e software che sono interconnesse fra loro: la piattaforma operativa è specifica di un certo tipo di architettura hardware venendo a dipendere dalle istruzioni fondamentali (instruction set) del processore formando un ambiente di esecuzione unico che contraddistingue il sistema (ad esempio il sistema operativo macOS gira solo su computer Apple Macintosh); ciò nonostante sono stati sviluppati anche sistemi operativi portabili su diverse architetture hardware come ad es. Windows e Linux.
* la piattaforma hardware è l'hardware sul quale vengono fatti eseguire un certo sistema operativo e un certo insieme di programmi applicativi (tipicamente si tratta dell'architettura del processore);
* la piattaforma software, che indica il tipo di framework o il sistema software di base sul quale i programmi e le applicazioni sono sviluppati e/o eseguiti (ambiente di esecuzione, ad es. piattaforma Java, piattaforma Wiki, piattaforme di forum come VBulletin, piattaforme di blog e siti web dinamici (CMS) come WordPress, Joomla!, Drupal e Sharepoint, piattaforme LAMP e WAMP per siti web, piattaforme di video sharing come YouTube, piattaforma di social network e microblogging come Facebook e Twitter, piattaforme di e-commerce come eBay, Amazon ecc..., N.B. in quest'ultime accezioni si parla di applicazioni web complesse).
* la piattaforma operativa è il tipo di piattaforma software che include il sistema operativo il quale è costruito a partire dalle istruzioni elementari del processore (instruction set).

## Obbiettivi e metodi

L'idea alla base di una piattaforma è l'astrazione e la semplificazione.
Questa semplificazione può essere ottenuta fornendo allo sviluppatore dell'applicazione un modello funzionale che sia un'astrazione selettiva di funzionalità più concrete, realizzato in genere sottoforma di un'interfaccia di programmazione dell'applicazione (API), in cui è annidata la funzionalità sottostante. Per l'applicazione risultante, questa assume tipicamente la forma di un ambiente di runtime interpretato dinamicamente (ad esempio: JRE, browser) o di un Interfaccia binaria per applicazioni (ABI) relativo a funzioni software note.
Una qualità che questi livelli di astrazione possono offrire è l'universalità, solitamente definita come compatibilità tecnica. Questa può riferirsi all'ampiezza, cioè alla quantità di dettagli diversi astratti, così come alla permanenza della piattaforma nel tempo. La compatibilità nel tempo può significare la garanzia di una compatibilità verso il basso quando una piattaforma viene ulteriormente sviluppata o la garanzia da parte del produttore che i nuovi “dettagli” astraibili (quali nuovi sistemi operativi, nuovo hardware) saranno integrati nella piattaforma non appena siano emersi (compatibilità verso l'alto).

## Tipi di piattaforma

Si possono distinguere tra piattaforme software e hardware.

### Piattaforme hardware

Una piattaforma hardware, nota anche come livello macchina, si riferisce a un tipo specifico di computer o a una famiglia di processori. Il livello macchina è definito principalmente da un computer specifico o dall'architettura del processore e si trova logicamente in basso, sotto il livello dell'applicazione.
Una piattaforma per l'architettura di un processore utilizza un linguaggio macchina standardizzato, parole di grandi dimensioni, un ordine dei byte. Un esempio di largo utilizzo è l'architettura dell'x86.
Tuttavia, il modo in cui i singoli comandi di questo linguaggio macchina vengono elaborati internamente al microprocessore (ad esempio con Micro-op) può variare notevolmente all'interno della stessa piattaforma. Solo i risultati finali che i comandi forniscono rimangono invariati.
Le piattaforme hardware possono essere grossolanamente classificate in architetture CISC e RISC. Tuttavia, i confini tra questi due tipi di architettura stanno diventando sempre più labili nelle attuali architetture dei processori.

### Piattaforme software

Le cosiddette piattaforme software, dette anche livello applicativo, si differenziano nel modo seguente.

### Piattaforma basata su interfaccia binaria

La retrocompatibilità nel tempo può essere ottenuta, ad esempio, attraverso interfacce binarie stabili delle librerie di funzioni utilizzate per accedere alla piattaforma. Se la piattaforma viene ulteriormente sviluppata, solo il suo fornitore ha il compito di garantire il mantenimento della compatibilità. Il fornitore della piattaforma deve quindi distribuire la nuova versione della sua libreria di accesso; non sono necessarie modifiche al programma applicativo (ricompilazione o adattamento) da parte degli sviluppatori di applicazioni, né modifiche alla configurazione da parte degli utenti.

### Piattaforma basata sul codice sorgente

Oltre al concetto di piattaforma basato sulla compatibilità binaria, che consente la continua eseguibilità del software una volta creato, esiste anche il concetto di compatibilità attraverso la portabilità del codice sorgente di un programma applicativo. Questo non garantisce l'eseguibilità a lungo termine né un'ampia eseguibilità delle compilazioni dei programmi applicativi,, quanto piuttosto il loro essere compilabili con un'ampia gamma di hardware, librerie di programmi e API software sottostanti, nota anche come indipendenza dalla piattaforma. Gli svantaggi sono che il processo di compilazione deve essere eseguito più frequentemente e soprattutto dall'utente o dallo sviluppatore dell'applicazione, un processo talvolta complesso e soggetto ad errori. Anche la creazione di software portabile per tale piattaforma rappresenta un problema. Inoltre, la necessità di rendere disponibile il codice sorgente all'utente può rappresentare un ostacolo, poiché è insolito che un software proprietario non sia anche chiuso. Per questo motivo, il concetto di compatibilità basata sul codice sorgente è particolarmente dominante nel settore open source e nei sistemi operativi di tipo Unix, mentre la compatibilità binaria è dominante nei sistemi operativi Windows o Mac OS, ad esempio.

### Sistema operativo come piattaforma

Ad esempio, una piattaforma software -come le API Win32 e altre interfacce simili integrate nei sistemi operativi- consente agli sviluppatori di software di scrivere applicazioni funzionanti su hardware variabile, come processori di produttori diversi, schede grafiche diverse, dispositivi periferici diversi, ecc. In genere, tuttavia, tali applicazioni sono compilate in programmi binari costituiti da istruzioni macchina e sono quindi funzionali solo su un hardware specifico, cioè sono basate su una data piattaforma hardware. Questo approccio può essere visto come un compromesso tra efficienza e livello di astrazione, in quanto consente di risparmiare una fase di conversione che richiede molto tempo in fase di esecuzione.

### Ambiente di runtime come piattaforma

Negli ambienti di runtime a interpretazione dinamica, l'applicazione è ulteriormente astratta dall'hardware. Ciò significa che i comandi e i dati vengono trasferiti a un ambiente di runtime o a un servizio e vengono interpretati solo in fase di esecuzione o tradotti nel linguaggio macchina corrispondente. Inoltre, anche i vari sistemi operativi sottostanti, cioè le altre piattaforme software, possono essere astratti da un ambiente di runtime (ad esempio JRE o browser web).

## Aspetti non tecnici delle piattaforme
### Marketing

A fini pubblicitari, i nomi dei marchi sono spesso riassunti in modo semplificato come piattaforme che in realtà sono tecnicamente differenziate. Un esempio ben noto è la “piattaforma Macintosh”, le cui piattaforme tecniche possono differire in modo sostanziale a seconda della generazione. Questa visione semplicistica è diventata in qualche modo parte del linguaggio e del senso comune.
Ad esempio, l'azienda Apple si pubblicizza con la piattaforma “Macintosh” o “Mac”, anche se praticamente tutte le piattaforme che compongono Macintosh sono state sostituite (talora ripetutamente) nel corso dell'intero periodo della sua esistenza. Da un punto di vista tecnico, Macintosh è costituito e consisteva in piattaforme hardware e software molto diverse e talvolta incompatibili tra loro.
Infatti, nel corso della sua storia, il “Macintosh” ha utilizzato o utilizza 680x0, PowerPC, IA-32 o x64 e ARM64 dal punto di vista dell'architettura del processore. Le interfacce software e gli standard utilizzati dai sistemi operativi Apple sono o sono stati Carbon, Cocoa, POSIX, SUS, ambiente software GNU, JRE, ecc.). Per garantire agli utenti una transizione agevole tra queste architetture, Apple ha utilizzato approcci transitori come i fat binaries o i universal binaries e gli emulatori (trasparenti). Di conseguenza, l'intera famiglia di prodotti ha continuato a essere percepita dal pubblico come una piattaforma standardizzata.
Lo stesso vale per il marchio Windows spinto dalla Microsoft. Sebbene i cambiamenti non siano mai stati così estesi come nel caso del Macintosh, nemmeno Windows è una piattaforma standardizzata. Infatti, utilizza le piattaforme x86 -IA-32 e x64- e ARM, in passato anche MIPS, POWER o PowerPC, Alpha e Itanium, e ha fornito o fornisce le applicazioni DOS, Win16, Win32, Win64, Native API, Windows CE, .NET, POSIX, OS/2 e altre). Ad esempio, le API di Win32 e Windows CE sono compatibili solo in misura molto limitata. Tutti i prodotti Windows basati sul kernel DOS o Windows NT contengono diverse piattaforme, il che ha portato alla retrocompatibilità delle applicazioni fino a 30 anni in alcuni casi (come nel caso di Win16).

### Apertura

I produttori di piattaforme hanno approcci diversi per quanto riguarda l'apertura o la chiusura delle loro piattaforme. Ciò riguarda, ad esempio, il modello di sviluppo, il modello di contabilità interna o il grado di apertura o libertà concesso all'uso ai diversi livelli.

### Aspetti industriali

Nell'industria, le piattaforme costituiscono l'infrastruttura per i modelli di business orientati alla digitalizzazione. In questo caso, la piattaforma digitale funge da architettura informatica per “la generazione di dati, la strutturazione dei dati e i formati di scambio dei dati basati su standard tecnici”. Viene creata una “spina dorsale digitale” che collega tutti gli attori e le azioni coinvolte nella creazione di valore nella catena del valore digitale.

## Esempi

Un'interfaccia applicativa può essere descritta essenzialmente come un'interfaccia di programmazione (Application Programming Interface, abbreviata come API) introdotta o inclusa dal sistema operativo. Tuttavia, esistono anche API multipiattaforma che sono disponibili su diversi sistemi operativi come ambiente di esecuzione e spesso devono essere installate successivamente.

### Software

* AmigaOS (AROS, MorphOS)
* Android Runtime
* Bada
* Blackberry
* Carbon (Mac OS (Classic), macOS)
* Cocoa (macOS, GNUstep, iOS, …)
* GNU-Software, e simili GNU (Unix/BSD, Linux, Fink, Cygwin…)
* Linux Standard Base, LSB
* Native API (Windows NT)
* OpenVMS
* OS/2
* OS/400
* Palm OS
* Portable Operating System Interface, POSIX (Unix/BSD, macOS, Linux, Windows NT, …)
* Single UNIX Specification, SUS (Unix, macOS)
* Symbian
* Windows Application Programming Interface: Win16, Win32, Win64 (Windows, Windows CE, WinOS/2, ReactOS, Wine, …)
* z/OS
* z/VM

### Hardware

* AMD Am29000
* ARM
* Atmel AVR
* DEC Alpha (64-Bit)
* IBM 801
* IBM System/360 e System/370 (indirizzamento a 24 bit, 1964 e 1970)
* IBM System/390 (indirizzamento a 31 bit, 1990)
* IBM System z (indirizzamento a 64 bit, retrocompatibile con System/390, /370 e /360, 2000)
* Intel 4004 (larghezza dei dati a 8 bit con bus dati a bit, spazio indirizzi a 12 bit con bus indirizzi a 4 bit, 1971)
* Intel 4040 (larghezza dei dati a 4 bit con bus dati a 4 bit, spazio indirizzi a 13 bit con bus indirizzi a 4 bit, 1974)
* Intel 8008 (larghezza dei dati a 8 bit con bus dati a 8 bit, spazio indirizzi a 14 bit con bus indirizzi a 8 bit, 1972)
* Intel 8080 (larghezza dei dati a 8 bit con bus dati a 8 bit, spazio indirizzi a 16 bit con bus indirizzi a 16 bit, 1974)
* Intel x86 (Intel 80x86 e processori compatibili)
** 8086/8088, 80186/80188, Z80 e V20 (parole a 16 bit con bus dati a 16 bit, spazio indirizzi a 20 bit con bus indirizzi a 20 bit, 1979)
** 80286 (parole a 16 bit con bus dati a 16 bit, spazio indirizzi a 24 bit con bus indirizzi a 24 bit, 1982)
** 80386 (parole a 32 bit con bus dati a 32 bit, spazio indirizzi a 32 bit con bus indirizzi a 24 bit, 1985)
** IA-32 o i386 (retronimo x86-32) si riferisce al set di istruzioni compatibile con l'80386 e i suoi numerosi successori, come l'Am386 o l'80486.
** x64 o x86-64 ovvero AMD64 riferito al set di comandi compatibili con Opteron (larghezza dei dati a 64 bit, spazio indirizzi a 64 bit; implementato da AMD64 per i processori di AMD e Intel 64 e per i processori di Intel)
** numerose estensioni del set di comandi per IA-32 e x64, si veda AVX, FMA, MMX, PAE, SSE, uvm.
* Intel i960
* Intel Itanium IA-64 (larghezza dati a 64 bit, spazio indirizzi a 64 bit, non compatibile con IA-32 e 16-Bit x86)
* MIPS
* Motorola 680x0 (dal 2004 Freescale, dal 2015 NXP)
** 6800 e 6809 (Motorola, bus dati a 8 bit, bus indirizzi a 8 bit, 1974)
** 68000 e 68010 (Motorola, bus dati a 16 bit, bus indirizzi a 24 bit, 1979)
** 68008 (Motorola, bus dati a 8 bit, bus indirizzi a 20 bit)
** 68012 (Motorola, bus dati a 16 bit, bus indirizzi a 32 bit)
** 68020 e 68330 (Motorola, bus dati a 32 bit, bus indirizzi a 32 bit, 1984)
** 68030, 68040 e 68060 (Motorola, bus dati a 32 bit, bus indirizzi a 32 bit, dal 1987)
** ColdFire (Freescale, 68060-Design, dal 2004)
** Dragonball (Freescale, vormals MC68328 della Motorola, dal 1995)
* Motorola 88000
* OpenRISC
* PDP-1, PDP-4, PDP-7, PDP-9 e PDP-15 (18 bit)
* PDP-5, PDP-8, PDP-12, PDP-14 e PDP-16 (12 bit)
* PDP-6 e PDP-10 (36 bit)
* PDP-11 (16 bit)
* PA-RISC
* Power
** IBM Power (originariamente scritto POWER)
** IBM e Motorola (dal 2004 Freescale, dal 2015 NXP) PowerPC
* SPARC
* SuperH
* VAX (32 bit)