2010-08-10 7 views

risposta

7

Se il software Mac utilizza Cocoa, la libreria di visualizzazione proprietaria di Apple (che è , se viene eseguita su Mac con una GUI e non richiede l'avvio di un server X), potrebbero verificarsi problemi durante l'esecuzione del codice su un normale sistema BSD.

Se il proprio codice utilizza solo funzioni specificate da POSIX, verrà portato in modo pulito a Linux, BSD e anche a Windows.

È vero che Mac OS X e BSD sono correlati. Sebbene abbiano kernel diversi, condividono un antenato comune e un codice userland significativo. Ovviamente, non riesco a quantificare "quanto vicino" - questo è soggettivo.

+1

@AmokHuginnsson In realtà, Windows XP, 7, Server 2003 e 2003 R2 (che io conosca) hanno un "componente" POSIX che può essere installato tramite la voce del pannello di controllo "Aggiungi o rimuovi componenti di Windows". Una volta installati, diventano infatti conformi a POSIX. – Borealid

4

Mac OS X è un sapore di BSD Unix. Come già sottolineato da Borelaid, ciò non significa necessariamente che trasferire applicazioni Mac ad altri tipi di BSD sarebbe facile o addirittura gestibile, molto meno rispetto ad altri sapori BSD comuni. Ognuno di loro porta le proprie specifiche e OS X più della maggior parte.

Porting programmi da altri sapori BSD a OS X coinvolge anche il lavoro e non sempre funziona (senza intoppi o affatto), ma di solito è molto più semplice.

1

Dipende dal tipo di app che si sta tentando di effettuare. Se si scrivono programmi di console C/C++ compatibili con POSIX, verranno compilati e funzioneranno correttamente con qualsiasi sistema POSIX compatibile (per lo più gusti Linux e BSD), ma si noti che OS X spesso non implementa le nuove funzioni POSIX (ad esempio utimensat) che sono disponibili in Linux. D'altra parte, le applicazioni grafiche utilizzano Cocoa o il vecchio Carbon, che richiederebbe GNUstep. Portare applicazioni grafiche è abbastanza raro perché ogni ambiente grafico ha standard e convenzioni di design diversi, quindi le applicazioni grafiche di solito devono essere scritte da zero per ogni ambiente grafico.

26

Torna nei giorni di OS X 10.4 ho trascorso qualche tempo non riuscendo a scrivere un VFS per OS X. In quei giorni, dei maggiori sottosistemi del kernel, ma solo lo stack di rete e il VFS erano ancora veramente BSD. A quel tempo, anche il VFS era stato parzialmente riscritto per renderlo più modulare (tutte le strutture di dati VFS BSD diventavano puntatori opachi e l'API passava attraverso quelle che venivano chiamate funzioni KPI). Credo che lo stack di rete stava andando allo stesso modo. C'era anche un sottile strato all'interfaccia con l'utente che rendeva il sistema operativo simile a BSD ai programmi per gli utenti.

Tutto il resto era stato più o meno riscritto o sostituito: la gestione della memoria, la gestione dei processi ecc. Provenivano dal Mach microkernel; il sottosistema del driver del dispositivo è stato scritto da zero da Apple.

In termini di programmazione userland, OS X è molto simile a BSD e i programmi scritti per BSD dovrebbero essere facilmente trasportabili. Tuttavia, OS X ha un sacco di API che non sono disponibili in BSD. Questi includono quasi tutto ciò che ha a che fare con l'interfaccia utente: grafica, audio, ecc. Esistono anche altre interfacce che non esistono in BSD come l'API di avvio, che è il modo preferito di OS X per avviare processi in background.

0

Installato - no.

Portati dalla sorgente, forse - vedi Gnustep, Cocotron, EtoileOS - che offrono vari gradi di compatibilità con lo stack di sviluppo Cocoa (ma non con il vecchio Carbon). Esiste una quantità limitata di software per obiettivi-C x-platform sviluppato in questo modo.

14

La Wikipedia BSD article è buona (e concorda con la mia comprensione, per quello che vale). Dice che Darwin, il sistema su cui è costruito il Mac OS X di Apple, è un derivato di 4.4BSD-Lite2 e FreeBSD e nota che 4.4BSD è l'ultima versione con cui Berkeley era coinvolto.

Quindi, Darwin è come BSD che puoi ottenere (proprio come tutti gli altri BSD!). OS X si riferisce a quelle parti della distribuzione che non sono open-source, principalmente la GUI, ma includono una varietà di framework, e tutto ciò che si basa su questi non sarà portatile.

OS X nel suo complesso è un sistema UNIX 03. È equivalente ad essere un sistema veramente conforme a POSIX (al contrario di essere simile a POSIX).

Come altre risposte hanno notato, le parti userland del sistema operativo sono sorprendente per chiunque abbia molta esperienza UNIX, e raramente ho avuto alcuna difficoltà a costruire portatile-unix software su OS X.

Al contrario, il parti del sistema operativo non dell'utente sono piuttosto diverse. Apple sembra intenzionata a innovare in quelle aree abbastanza allegramente. Penso (ma non sono positivo) che questi cambiamenti formalmente facciano parte di Darwin. Una delle differenze più evidenti è che launchd ha sostituito cron, at, inetd e gran parte dell'infrastruttura di avvio.