[[File:Gnome-2.20-screenshot.png|thumb|[[Linux]], esempio di piattaforma operativa]]
[[File:LAMP_software_bundle.svg|thumb|[[LAMP]], esempio di piattaforma [[software]]]]
Una '''piattaforma'''<ref>[http://www.pc-facile.com/glossario/piattaforma/ Glossario informatico: definizione di piattaforma. pcfacile.com]</ref>, in [[informatica]], è una base [[hardware]] e/o [[software]] su cui sono sviluppati e/o [[esecuzione (informatica)|eseguiti]] [[programma (informatica)|programmi]] o [[applicazione (informatica)|applicazioni]]; può indicare anche un [[ambiente di esecuzione]] che comprende [[hardware]] e [[sistema operativo]] ed eventualmente elementi [[middleware]] specifici, [[application server]] ed altri strumenti di supporto all'esecuzione di programmi.
In informatica, una piattaforma informatica (abbreviata anche col termine di '''piattaforma''') si riferisce a una base standardizzata su cui è possibile eseguire e sviluppare programmi informatici.
Esempi di piattaforme sono [[IBM PC|IBM-PC]], che include le architetture [[I386]] (x86), [[IA64]] o [[AMD64]] (x86-64); [[Macintosh]], che include l'architettura [[Gecko]] e [[PowerPC]]; e [[SPARC]]. Esistono programmi [[multipiattaforma]] che ti consentono di funzionare su varie piattaforme. Ci sono anche [[Emulatore|emulatori]], che sono programmi che ti permettono di eseguire programmi da un'altra da una piattaforma, emulandone il funzionamento, come [[UAE (emulatore)|UAE]], che emula l'hardware del [[Amiga|Commodore Amiga]] o [[VICE (emulatore)|VICE]], un emulatore del leggendario [[Commodore 64]] della metà degli anni '80.
Una piattaforma è un componente di un sistema informatico ed è collegata ad altri componenti. Può trattarsi dell'[[hardware]] o del [[sistema operativo]], persino di un [[browser]] web e delle relative interfacce 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 [[sistema informatico|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 informatica|architettura del computer]], [[stack software]], [[ambiente di esecuzione]], [[linguaggio di programmazione]].
== Classificazione ==
* la ''piattaforma software'', che indica il tipo di [[framework]] o il sistema software di base sul quale i [[programma (informatica)|programmi]] e le [[applicazioni]] sono sviluppati e/o eseguiti ([[ambiente di esecuzione]], ad es. [[piattaforma Java]], piattaforma [[Wiki]], piattaforme di [[forum (Internet)|forum]] come [[VBulletin]], piattaforme di [[blog]] e [[sito web|siti web]] dinamici ([[Content management system|CMS]]) come [[WordPress]], [[Joomla!]], [[Drupal]] e [[Sharepoint]], piattaforme [[LAMP]] e [[WAMP]] per [[sito web|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.com|Amazon]] ecc..., N.B. in quest'ultime accezioni si parla di [[applicazione web|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 ([[application programming interface|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: [[Java runtime environment|JRE]], [[browser]]) o di un [[Application binary interface|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 [[sistema operativo|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 [[processore|processori]]. Il livello macchina è definito principalmente da un computer specifico o dall'[[architettura informatica|architettura]] del processore e si trova logicamente in basso, sotto il [[Pila ISO/OSI|livello dell'applicazione]].
Una piattaforma per l'architettura di un processore utilizza un [[linguaggio macchina]] standardizzato, [[Parola (informatica)|parole]] di grandi dimensioni, un [[ordine dei byte]]. Un esempio di largo utilizzo è l'architettura dell'[[x86]].
Tuttavia, il modo in cui i singoli [[Instruction set|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 [[libreria (software)|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 dinamica|ricompilazione]] o adattamento) da parte degli sviluppatori di applicazioni, né modifiche alla [[configurazione (informatica)|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,<ref>{{cite web |url=http://blog.linuxgamepublishing.com/2009/08/18/handling-misbehaving-libraries-in-binary-products/ |first=Michael |last=Simms |date=2009-08-18 |accessdate=2012-01-15 |language=en |title=Handling misbehaving libraries in binary products |quote=It is a bit of an arcane artform, making a game that runs on all Linux versions. […] [libraries] will load their own dependencies in a way we cannot control.The biggest problem is that OpenAL and SDL try to dlopen libasound, and on some machines, libasound doesn’t work with our binaries. On others, it can actually crash the whole game due to incompatibilities. This is a common issue when dealing with unknown system configurations when sending out a binary-only product into the world. |publisher=[[Linux Game Publishing]] |archiveurl=https://web.archive.org/web/20140222145251/http://blog.linuxgamepublishing.com/2009/08/18/handling-misbehaving-libraries-in-binary-products/ |archivedate=2014-02-22}}</ref>, 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.<ref>{{cite web|archiveurl=https://web.archive.org/web/20071013034536/http://www.gamedev.net/reference/programming/features/linuxprogramming2/page2.asp|url=http://www.gamedev.net/reference/programming/features/linuxprogramming2/page2.asp |title=Linux Game Development Part 2 – Distributable Binaries|first=Troy |last=Hepfner |date=2007-10-01|accessdate=2011-12-19|archivedate=2007-10-13|language=englisch |quote=''Creating an executable that works on almost all Linux distributions is a challenge. There are a number of factors that contribute to the problem […]''|publisher=gamedev.net}}</ref> Inoltre, la necessità di rendere disponibile il codice sorgente all'utente può rappresentare un ostacolo, poiché è insolito che un software proprietario non sia anche [[closed source|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<ref>{{cite web |author=[[Ian Murdock]] |title=On the importance of backward compatibility |language=englisch |date=2007-01-17 |url=http://ianmurdock.com/platforms/on-the-importance-of-backward-compatibility/ |archiveurl=https://web.archive.org/web/20120114153717/http://ianmurdock.com/platforms/on-the-importance-of-backward-compatibility/ |archivedate=2012-01-14 |offline=yes |accessdate=2012-01-04 |archivebot=}}</ref><ref>{{cite web|url=http://weblogs.asp.net/oldnewthing/archive/2003/10/15/55296.aspx|archiveurl=https://web.archive.org/web/20040703024414/http://weblogs.asp.net/oldnewthing/archive/2003/10/15/55296.aspx|title=What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS?|author=[[Raymond Chen]]|publisher=|date=2003-10-15 |accessdate=2012-01-04|archivedate=2004-07-03 |work=The Old New Thing|language=englisch}}</ref> o [[Mac OS]], ad esempio.<ref>{{cite web |last=Peter |first=Simon |title=AppImageKit Documentation 1.0 |language=en |date=2010 |publisher=PortableLinuxApps.org |url=http://portablelinuxapps.org/docs/1.0/AppImageKit.pdf |archiveurl=https://web.archive.org/web/20101129031656/http://portablelinuxapps.org/docs/1.0/AppImageKit.pdf |archivedate=2010-11-29 |offline=yes |format=PDF; 38 kB |accessdate=2011-07-29 |archivebot= |pages=2–3 |quote=''A critical distinction between the approach known from Windows and the Mac and the one known from UNIX and Linux is the „platform“: While Windows and the Mac are seen as platforms to run software on, most Linux distributions see themselves as the system that includes the applications.''}}</ref>
===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 [[trade-off|compromesso]] tra [[efficienza (informatica)|efficienza]] e livello di astrazione, in quanto consente di risparmiare una fase di conversione che richiede molto tempo in fase di [[Run-time|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 [[interfaccia (informaticca)|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 binary|fat binaries]] o i [[universal binary|universal binaries]] e gli [[emulatore di terminale|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 [[architettura AR|ARM]], in passato anche [[Architettura MIPS|MIPS]], [[POWER]] o [[PowerPC]], [[DEC Alpha|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===
{{Main|Giardino recintato}}
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 [[modello di business|modelli di business]] orientati alla [[digitalizzazione]].<ref>[https://www.cenit.com/de_DE/newsroom/article/news/welche-digitale-plattform-braucht-mein-unternehmen-907.html Welche digitale Plattform braucht mein Unternehmen?], cenit.com</ref> In questo caso, la piattaforma digitale funge da architettura informatica per “la generazione di dati, la strutturazione dei dati e i [[formato|formati]] di scambio dei dati basati su standard tecnici”.<ref>[https://www.vbw-bayern.de/vbw/Themen-und-Services/Zukunftsrat/Plattformen-%E2%80%93-Infrastruktur-der-Digitalisierung.jsp Studie – Plattformen – Infrastruktur der Digitalisierung], vbw-bayern.de</ref> Viene creata una “spina dorsale digitale” che collega tutti gli attori e le azioni coinvolte nella creazione di [[valore aggiunto|valore]] nella [[catena del valore]] digitale.
== Note ==
|