Una taglia non si adatta a tutti Perché il software non è universalmente compatibile

Una taglia non si adatta a tutti Perché il software non è universalmente compatibile / Spiegazione della tecnologia

Hai appena scaricato un aggiornamento ricco di funzionalità per la tua app open source preferita. Tutto funziona bene e lo si utilizza sugli altri dispositivi, quindi è giunto il momento di implementarlo anche su quelli.

Tranne il tuo nuovo brillante laptop Linux non è compatibile con il tuo pacchetto di installazione di Windows. Che ne dici del tuo tablet Android? i phone? PS4? Perché non puoi semplicemente prendere quel software e usarlo dove vuoi? Esaminiamo alcuni diversi ostacoli al sogno di “compra una volta, corri ovunque.”

Sviluppo software e architettura del sistema operativo

Capire perché il software non funziona su tutti i sistemi operativi richiede un po '(solo un po', lo prometto) la conoscenza di come viene prodotto il software.

Il processo di sviluppo del software

In un flusso di sviluppo software di base per desktop, server e dispositivi mobili (ad esempio, non programmazione web e sviluppo Web: qual è la differenza? Programmazione vs sviluppo Web: qual è la differenza? Si potrebbe pensare che i programmatori di applicazioni e gli sviluppatori web facciano lo stesso lavoro , ma questo è lontano dalla verità.Qui sono le differenze chiave tra i programmatori e gli sviluppatori Web. Per saperne di più), un programmatore:

  1. Digitare alcuni codice in uno o più file.
  2. Compilare il codice in qualcosa che il computer può eseguire.
  3. Test per assicurarsi che il programma funzioni come previsto.
  4. Imballa e distribuisci / distribuisci il software.

È una combinazione del primo e del secondo passo che ci riguardano qui. Il processo di compilazione il software, o trasformandolo da codice in quelli e zeri che un computer capisce (linguaggio macchina) è complesso. Non ci entreremo in dettaglio, ma è utile capire ad alto livello cosa succede.

Architettura del sistema operativo

Un punto importante da capire è che un sistema operativo non è una singola entità. Piuttosto, è costituito da strati di software.

Kernel del sistema operativo

Un sistema operativo nocciolo è responsabile della comunicazione con l'hardware del computer. Il software comunica i suoi comandi al kernel, che a sua volta impartisce comandi all'hardware per (ad esempio) leggere un file dal disco rigido o disegnare una finestra sullo schermo. Fondamentalmente coordina tutte le informazioni (sia che si tratti di dati memorizzati, calcoli o input dell'utente) tra hardware e vari software. Il kernel rende tutte queste funzionalità disponibili per il software tramite chiamate di sistema.

Immagine di credito: Wikimedia Commons

Il kernel di ciascun sistema operativo implementerà le chiamate di sistema in modo diverso, in termini di quali sono disponibili, quali sono chiamati o quali opzioni prendono. Di conseguenza, il software deve tenere conto delle chiamate di sistema supportate dal kernel di ciascun sistema operativo target. La chiamata di sistema che usi per inviare dati alla GPU in Linux può avere un nome diverso, un elenco di informazioni che devi fornire, o entrambi in Windows. Quella chiamata esatta potrebbe anche non esserci affatto.

Librerie di sistema

In molti casi il software non chiama direttamente al kernel. Invece, chiama a librerie di sistema, o collezioni di funzioni di base. Le librerie esistono così (per esempio) ogni singolo programma che salva i file sul disco rigido non ha bisogno di scrivere una funzione per farlo. Invece, semplicemente collegamenti a una libreria di sistema e utilizza una funzione esistente. La libreria GLibC per Linux è un ottimo esempio, come lo sono i file .DLL nell'API Win32 o il contenuto della directory Mac / System / Library Come accedere alla cartella Libreria OS X e perché è pratico Come accedere alla libreria OS X Cartella e perché è pratica La maggior parte delle cartelle della libreria OS X è meglio lasciarle in pace, ma è utile conoscere la propria strada all'interno e intorno alla Libreria utente. Leggi di più .

Immagine di credito: ScottXW tramite Wikimedia Commons

Le librerie di sistema agiscono come una sorta di traduttore tra le applicazioni e il kernel per le attività di routine. Le applicazioni fanno chiamate di funzione a queste librerie, che gestiscono molti dettagli di basso livello. Possono anche effettuare chiamate di sistema al kernel per comodità. Come avrete intuito, questo significa che queste librerie sono scritte per un particolare kernel, e quindi non possono essere usate su sistemi operativi con kernel diversi.

Intestazioni di esecuzione del sistema operativo

L'ultimo ostacolo al software universale è il formato dei file eseguibili per i sistemi operativi. Un sistema operativo si aspetta che i file che esegue seguano un particolare formato di file binario Tutto quello che c'è da sapere sui formati di file e le loro proprietà Tutto quello che c'è da sapere sui formati di file e le loro proprietà Usiamo il file di parole in modo intercambiabile: musica, immagine, foglio di lavoro, presentazione , e così via. Ma cosa rende un file un "file", comunque? Proviamo a capire questa parte fondamentale dell'informatica. Leggi di più . Ad esempio, i file ELF (Executable and Linkable Format) eseguiti su sistemi operativi come Linux e FreeBSD devono specificare determinate proprietà del file in determinati byte, come mostrato nell'immagine seguente.

Il interfaccia binario dell'applicazione (ABI) mostrato in grado è di particolare importanza. Una combinazione delle chiamate disponibili da processore, kernel e libararies di sistema, un ABI è simile a un interfaccia di programmazione dell'applicazione (API) in questo definisce come due programmi comunicano tra loro. Ma l'API è qualcosa usato dai programmatori (umani) nel codice sorgente per indicare due pezzi di software dovrebbero parlarci. L'ABI è ciò che effettivamente consente loro di farlo una volta che il software è stato compilato ed eseguito. Ogni sistema operativo implementa un particolare ABI, che può o meno cambiare tra le versioni di quello stesso SO.

In generale, i sistemi operativi implementano il proprio ABI, determinato da una combinazione del tipo di processore, del kernel e di qualsiasi libreria di sistema standard. Ma a volte un sistema operativo ne implementerà più di uno. FreeBSD ha il supporto per i binari di Linux, ad esempio, perché fornisce un ABI Linux come componente aggiuntivo del kernel di FreeBSD (invece del kernel di Linux). Questo è diverso dai programmi di virtualizzazione Che cos'è una macchina virtuale? Tutto quello che c'è da sapere Cos'è una macchina virtuale? Tutto quello che devi sapere Le macchine virtuali ti consentono di eseguire altri sistemi operativi sul tuo computer corrente. Ecco cosa dovresti sapere su di loro. Ulteriori informazioni come VMWare o VirtualBox, che utilizzano software per simulare un'intera macchina (hardware e tutto). Di conseguenza questo tipo di compatibilità ABI è più veloce, ma molto più sforzo da mantenere. Questo è il motivo per cui è raro, anche se Microsoft ha recentemente visto il valore di Ubuntu è ora disponibile su Windows Store Ubuntu è ora disponibile su Windows Store Windows Insiders ora può scaricare e installare Ubuntu su Windows 10. Questo porta Linux e Windows insieme in un'unione empio pochi hanno mai immaginato che avrebbero vissuto abbastanza a lungo da testimoniare. Leggi di più nel farlo.

Eccezione: software interpretato

Sulla base di quanto sopra abbiamo appreso che gli sviluppatori scrivono software per uno, e solo uno, tipo di sistema di destinazione. Tranne quando non lo fanno. Ci sono molte applicazioni che puoi scaricare ed eseguire su un Mac, quindi copiarle ed eseguirle su Windows, e magari anche copiarle di nuovo ed eseguirle su Linux senza problemi. Com'è possibile?

Stavo mentendo fino ad ora?

A quanto pare, c'è una categoria di software che guarda in superficie come se fosse appena “corre dappertutto.” Puoi scaricarlo ed eseguirlo su qualsiasi piattaforma supportata - la parola chiave è “supportato.” Infatti, stai scaricando il codice sorgente per l'applicazione, mentre un'altra applicazione (il interprete) è una sorta di esecuzione del codice sorgente direttamente in tempo reale. Si tratta di una semplificazione eccessiva, quindi osserviamo esattamente come funziona con un paio di lingue.

Giava

Quando Java è stato rilasciato, la promessa è stata (letteralmente) “scrivi una volta, corri ovunque.” L'idea era di creare applicazioni utilizzando le funzioni Java per come salvare file, effettuare calcoli o creare una finestra dell'applicazione. Poi un Java Runtime Enviornment (JRE) per ogni piattaforma di computer supportata eseguirebbe il codice e li tradurrà in funzioni del sistema operativo nativo. Il trucco di Java, quindi, è che non viene eseguito “direttamente” sul sistema operativo. Funziona in una parte del JRE chiamato il macchina virtuale Java e questo è ciò che viene eseguito sul sistema operativo.

Inserendo questo livello software aggiuntivo tra l'applicazione e il sistema operativo, Java consente di concentrarsi su un insieme di funzioni uguali a tutti i sistemi operativi. Dì a Java cosa vuoi fare e lascia che la JVM del tuo sistema si preoccupi di come farlo effettivamente. L'immagine qui sotto mostra questo in azione, dove Java Desktop Application Framework di JIDE Software visualizza la stessa applicazione per Mac (in alto), Windows (in alto a sinistra), “puro Java” (medio-destra) e Linux (in basso).

Credito immagine: software JIDE

I programmi Java non sono precisamente “compilare” se stessi in tempo reale. Piuttosto, il compilatore Java li renderà in “bytecode.” Puoi pensare al bytecode come a un programma semi-cotto. Quando lo sviluppatore rilascia l'applicazione, viene compilato per quanto possibile senza sapere su quale sistema operativo verrà eseguito. Quando lo lanci effettivamente, la JVM lo farà “cuocere il resto del modo” per adattare le funzioni particolari del sistema operativo host.

Pitone

Un linguaggio interpretato popolare è Python 5 Ragioni per cui la programmazione in Python non è inutile 5 motivi per cui Python Programming non è inutile Python - Lo ami o lo odi. Potresti anche oscillare da un'estremità all'altra come un pendolo. Indipendentemente da ciò, Python è un linguaggio per il quale è difficile essere ambigui. Leggi di più . Quando si esegue uno script Python, l'interprete Python tradurrà il codice in istruzioni per il sistema operativo. Può anche funzionare in modo simile a Java: quando tu “importare” codice dall'esterno dell'applicazione è compilato in bytecode la prima volta che viene eseguito. Quindi l'interprete saprà se, nelle esecuzioni successive, il codice originale è cambiato, a quel punto lo ricompilerà in un nuovo bytecode.

Un interessante sottoprodotto di questo “su richiesta” l'esecuzione è che è possibile utilizzare l'interprete per sviluppare i propri script in modo interattivo. Semplicemente digitando “pitone” alla riga di comando si avvia l'interprete ed è possibile eseguire il codice e vedere immediatamente i risultati.

Ciò significa che gli sviluppatori possono giocare e modificare le cose “vivere.” Quindi, una volta che una riga di codice fa ciò che vuole, copialo e incollalo in un file di script (che è molto più efficiente del file “code-compile-test” ciclo che i programmatori linguistici non interpretati devono fare).

Anche quando il software è lo stesso, probabilmente no

Sfortunatamente per gli utenti, l'industria tecnologica non ha sviluppato veramente “universale” formato. E potrebbe non farlo mai. L'introduzione di questi tipi di standard spesso si traduce in a “minimo comune denominatore” soluzione, con concessioni nell'interesse di ottenere l'approvazione di tutti.

Cosa pensi? Preferiresti avere un software universalmente compatibile, anche se ciò significa che non è così buono? O stai bene con il sistema operativo che stai utilizzando e non hai interesse per le app di altre piattaforme? Facci sapere di seguito nei commenti!

Crediti immagine: Masterchief_Productions / Shutterstock

Scopri di più su: File System, Installa software, Sistemi operativi.