Indipendenza dalla piattaforma nel software significa che puoi eseguire del codice con poche o nessuna modifica su più piattaforme.
Il diavolo si trova nei dettagli:
- Dipende da ciò che definisci "la piattaforma". In alcuni casi questa può essere una configurazione hardware / macchina specifica. In altri gas può essere un "PC generico". In altri casi può essere una macchina virtuale e un ambiente di runtime (come nel caso di Java).
- Niente è "perfettamente" indipendente dalla piattaforma: ci sono sempre alcuni casi d'angolo che possono catturarti. Ad esempio, se i separatori del percorso del file sono hardcode anziché utilizzare la piattaforma indipendente File.pathSeparator in Java, il tuo codice non funzionerà su Windows e Linux. Come programmatore, devi stare attento a queste cose, usa sempre l'opzione indipendente dalla piattaforma, se possibile, e verifica correttamente su piattaforme diverse se ti interessa la portabilità.
- Ci sono sempre alcuni vincoli su piattaforme specifiche che non possono essere ignorate. Esempi sono cose come la lunghezza massima dei nomi di file o la RAM disponibile su un sistema. Non importa quanto tu tenti di essere indipendente dalla piattaforma, il tuo codice potrebbe fallire se provi ad eseguirlo su una piattaforma troppo stretta.
- È importante notare che alcuni linguaggi sono indipendenti dalla piattaforma a livello di codice sorgente (C / C ++ è un buon esempio) ma perdono l'indipendenza dalla piattaforma una volta che il codice è compilato (poiché il codice nativo è specifico per la piattaforma). Java mantiene l'indipendenza dalla piattaforma anche dopo che il codice è stato compilato perché viene compilato in un codice byte indipendente dalla piattaforma (la conversione effettiva al codice nativo viene gestita in un secondo momento dopo che il codice byte è stato caricato dalla JVM).
- A volte ci sono errori nelle implementazioni linguistiche che si verificano solo su determinate piattaforme. Quindi, anche se il tuo codice è teoricamente portatile al 100%, devi comunque testarlo su piattaforme diverse per assicurarti che non si verifichino errori insoliti!
Nel caso specifico di Java:
-
Java code è indipendente dalla piattaforma nel senso che la stessa applicazione o algoritmi Java (tipicamente compilati in bytecode Java e inseriti in un file .jar) eseguire identicamente su Windows e Linux.
-
Le librerie Java (ad esempio tutti i simpatici set di strumenti open source) sono in genere indipendenti dalla piattaforma, a condizione che siano scritte in puro Java. La maggior parte delle librerie tenta di rimanere con Java puro per mantenere l'indipendenza dalla piattaforma, ma ci sono alcuni casi in cui ciò non è possibile (ad esempio se la libreria deve interfacciarsi direttamente con hardware speciale o chiamare una libreria C / C ++ che usa codice nativo) .
-
La piattaforma Java / ambiente di runtime è indipendente dalla piattaforma nel senso che le stesse librerie (immagini, networking, file IO ecc.) sono disponibili e funzionano allo stesso modo su tutte le piattaforme . Questo viene fatto deliberatamente per consentire alle applicazioni che utilizzano queste librerie di essere in grado di girare su qualsiasi piattaforma. Ad esempio, le librerie Java che accedono al filesystem conoscono il fatto che Windows e Linux usano separatori di percorsi dei nomi di file diversi e tengono conto di ciò per te. Ovviamente, questo significa che sotto la cappa l'ambiente runtime fa uso di funzionalità specifiche della piattaforma, quindi è necessario un JRE diverso per ogni piattaforma. È possibile visualizzare un elenco di alcune delle piattaforme disponibili sul sito di download Java: link
-
La JVM stessa (ovvero la Java Virtual Machine che è responsabile della compilazione JIT e dell'esecuzione del bytecode Java) è indipendente dalla piattaforma nel senso che è disponibile su molte piattaforme (tutto dai mainframe ai telefoni cellulari). Tuttavia specifiche versioni della JVM sono necessarie per ciascuna piattaforma sottostante per tenere conto dei diversi codici di istruzioni native e delle funzionalità della macchina (quindi non è possibile eseguire una JVM Linux su Windows e viceversa). La JVM è confezionata come parte della piattaforma Java / ambiente di runtime come sopra.
Nel complesso, Java è probabilmente più vicino alla vera indipendenza dalla piattaforma che puoi ottenere, ma come puoi vedere c'è ancora un bel po 'di lavoro specifico per la piattaforma sotto il cofano.
Se ci si attiene a librerie e codici Java puri al 100%, la mia esperienza è che si può contare su Java come "efficace" indipendente dalla piattaforma e che generalmente rispetta la promessa di Write Once Run Anywhere. Ma dovresti comunque testarlo !!