Poiché il sistema operativo Apple OS-X è un derivato UNIX (BSD) e l'architettura Mac (Intel) sottostante è la stessa, perché non è molto semplice far funzionare le applicazioni specifiche di Apple su Linux?
Poiché il sistema operativo Apple OS-X è un derivato UNIX (BSD) e l'architettura Mac (Intel) sottostante è la stessa, perché non è molto semplice far funzionare le applicazioni specifiche di Apple su Linux?
Risposte:
OS X è in realtà (principalmente) la shell grafica proprietaria in cima a BSD. Per creare un'applicazione GUI di OS X, è necessario seguire l'api che Apple ha esposto, e quindi questo non è multipiattaforma e non facilmente trasportabile.
Ecco perché la maggior parte delle librerie può essere facilmente trasferita (in realtà la maggior parte è sviluppata su Linux) su Linux ma non sulle loro shell grafiche.
Nota a margine: ci sono framework là fuori con i quali è possibile creare applicazioni GUI multipiattaforma. Mi viene in mente Qt . Ma il fatto che tali framework siano multipiattaforma rende anche le applicazioni create con loro meno user friendly su una piattaforma specifica rispetto a un'applicazione GUI "nativa". Tali framework tendono a rendere tutto generico su piattaforme diverse, il che nel caso di Apple è negativo, perché Apple ha creato un'esperienza utente molto specifica che non si adatta facilmente ad altre piattaforme.
Modifica (per incorporare i commenti nella risposta - grazie @Nick, @kbisset e @John):
una soluzione sarebbe quella di portare l'intera shell grafica di OS X (le librerie Cocoa / Core di origine chiusa - che è ciò che rende OS X davvero unico ) a Linux. E tecnicamente, Apple potrebbe farlo abbastanza facilmente, ma non hanno motivo di farlo, poiché il loro intero modello di business è l'unicità di tutta la loro piattaforma: hardware e software.
È CONCEPIBILE che qualcuno possa tentare di clonare le biblioteche, ma ciò richiederebbe decenni di lavoro, e probabilmente non sarebbe mai giusto a causa di tutte le chiamate non documentate che dovrebbero essere replicate.
Il livello grafico non è affatto lo stesso. OS X utilizza un framework grafico proprietario, Linux utilizza X (X11 / X.org)
Quasi tutte le applicazioni native di OS X utilizzano framework come Cocoa, CoreAnimation e così via, disponibili solo su OS X.
Ad esempio, supponiamo che tu abbia un'applicazione che memorizza una password per l'utente - su OS X, questo userebbe il suo sistema di portachiavi e le API pertinenti. Se dovessi eseguire il porting di questo su Linux, non esiste un equivalente diretto, quindi dovresti reimpiantare l'intera funzionalità. Questa è una funzione minuscola e richiederebbe una grande riscrittura.
Se si scrive l'applicazione utilizzando una libreria GUI multipiattaforma come GTK, Qt o wxWidgets e il porting sarà molto più semplice (o "possibile") - ma i sistemi operativi sono ancora molto diversi in termini di UI (ad esempio, il sistema operativo X usa una barra dei menu separata, mentre Linux tende ad avere la sua barra dei menu per ogni finestra)
Una delle migliori porte multipiattaforma che ho visto è Transmission , che implementa la sua funzionalità principale come libreria (che contiene il minor numero possibile di codice specifico della piattaforma), quindi creando GUI native per ciascuna piattaforma, separatamente. Ciò significa che ogni porta condivide molto codice, ma tutte hanno buone interfacce native (piuttosto che una singola interfaccia che si adatta bene su Linux, ma è fuori posto su OS X o viceversa)
Esiste un progetto chiamato Cocotron che "mira a implementare un'API Objective-C multipiattaforma simile a quella descritta dalla documentazione Cocoa di Apple Inc." che potrebbe potenzialmente rendere il porting molto più semplice, ma sembra che ci sia pochissima attività negli ultimi tempi (l'ultimo post sul blog è stato a dicembre 2008)
Perché la maggior parte delle applicazioni dipende molto più del processore e dell'architettura sottostante della macchina su cui è in esecuzione. Dipendono anche dai toolkit dell'interfaccia utente e da altre librerie specifiche della piattaforma.