La differenza fra le due API di Mac OS X

Carbon vs Cocoa
di Luca Torella

Livello: Base

Introduzione
Da quando Mac OS X è stato annunciato, notizie di nuove versioni di programmi che girano nativamente sotto il nuovo sistema operativo, sono ormai giornaliere. Alcuni annunci annunciano che la nuova versione dell'applicazione è basata su Cocoa, altri che l'applicazione è basata Carbon.
La Apple spesso spiega agli sviluppatori i vantaggi comportati dall'utilizzo di Cocoa e come risultato molti utenti Mac hanno cominciato a pensare che le applicazioni Cocoa avevano qualcosa di più rispetto alle applicazioni Carbon.
Questo articolo si propone di spiegare cosa sono Cocoa e Carbon.

Un po' di storia
Quando Mac OS fu introdotto nel 1984 era un moderno ambiente di sviluppo. Intanto le altre piattaforme, che esistevano già da parecchi anni prima dell'uscita del Mac, stavano sviluppando altre tecnologie come la memoria protetta e il multi-tasking. La Apple non sviluppò queste funzioni nel Mac OS semplicemente perché il processore che utilizzava al tempo non era sufficientemente veloce per queste funzioni.
Successivamente fu difficile introdurre queste funzioni poiché interessavano il cuore del sistema operativo; a dir la verità più volte la Apple ci provò, ma mai venendo a capo.
Infine la Apple decise di comprare un moderno sistema operativo. Considerarono di prendere BeOS della Be, Inc., ma poi optarono per NEXTSTEP della NeXT, Inc., la compagnia che Steve Jobs fondò quando lasciò la Apple. Con tale acquisto, Steve Jobs tornò a lavorare per la casa della Mela. NEXTSTEP procurò alla Apple il moderno sistema operativo di cui aveva bisogno, ma aveva un'interfaccia utente completamente diversa da quella del tradizionale Mac OS.
La Apple cominciò a modificare NEXTSTEP in modo che si avvicinasse di più al Mac OS. Il risultato fu un progetto che la Apple nominò Rhapsody. Rhapsody era un nuovo e moderno sistema operativo con l'interfaccia utente molto simile a quella di Mac OS. Il passo successivo era quello di portare tutte le applicazioni esistenti sotto il classico Mac OS, come Adobe Photoshop o Microsoft Office, sotto Rhapsody in modo che ogni utente avrebbe avuto un buon motivo per utilizzarlo.
Sfortunatamente sistemi operativi differenti sono come diverse lingue parlate: possono eseguire le medesime funzioni ma in modi completamente differenti. Far diventere una applicazione Mac OS un'applicazione in grado di girare sotto Rhapsody voleva dire cambiare ogni riga di codice che comunicava con Mac OS in un nuovo linguaggio in grado di comunicare con Rhapsody. Infatti mentre le applicazioni per Mac OS erano scritte in Pascal, C o C++, l'unico linguaggio che poteva comunicare con Rhapsody era l'Objective-C (un linguaggio completamente nuovo sviluppato da NeXT). Gli sviluppatori Mac che avrebbero voluto portare le proprie applicazioni sul nuovo sistema operativo sarebbero stati costretti a imparare un nuovo linguaggio di programmazione e a riscrivere ex novo le loro applicazioni. La Apple aveva bisogno di un modo per rendere più semplici il porting verso Rhapsody.

Cosa sono le API
Le API permettono ad una qualunque applicazione di comunicare con il sistema operativo. Queste API permettono ad un programma di dire al sistema operativo di fare qualcosa di semplice come riprodurre un suono o qualcosa di più complesso come il drag & drop. Per esempio per riprodurre un beep su Mac OS, un'applicazione chiama SysBeep(). Con Rhapsody la stessa funzione si schiama NSBeep.
Cos'è esattamente Cocoa?
Cocoa è il nome che la Apple usa per rappresentare le API che già esistevano in Rhapsody. Le applicazioni originariamente scritte per NEXTSTEP sono scritte in Objective-C e usano le API Cocoa. Alcune delle applicazioni che sono in bundle con Mac OS X (come Mail e Chess) originariamente erano scritte per NEXTSTEP e quindi utilizzano le API Cocoa. Ci sono anche applicazioni di terze parti originariamente scritte per NEXTSTEP che sono state aggiornate per girare sotto Mac OS X.

Cos'è Carbon?
Quando Rhapsody fu rinominato Mac OS X, venne introdotta la soluzione che permetteva di portare le applicazioni Mac esistenti sotto Mac OS X. Venne aggiunto un altro set di API che utilizza (in maggioranza) gli stessi nomi e gli stessi parametri che venivano utilizzati dagli sviluppatori per creare applicazioni per Mac OS. Così applicazioni esistenti sotto Mac OS potevano girare nativamente sotto Mac OS X modificando solo una piccola porzione di codice.
Comunque uno sviluppatore doveva riscrivere in parte il suo programma, ma sempre meglio di riscriverlo da capo.
Questo set di API venne chiamato Carbon.

Cocoa è migliore di Carbon?
La risposta è assolutamente no. Entrambe le API richiamano le stesse procedure di Mac OS X. Diversamente da quanto qualcuno potrebbe pensare, le API Carbon non chiamano le API Cocoa.
Più precisamente se decidi di scrivere una nuova applicazione per Mac OS X in un linguaggio come Java o C e ti preoccupi che la tua applicazione funzioni solo sotto Mac OS X ti conviene potresti imparare le API Cocoa perché sono ad un livello più alto rispetto a quelle Carbon. La maggior parte degli sviluppatori che vuole, invece, utilizzare la gran parte del codice scritto finora, lungo gli anni, e le proprie conoscenze di C e C++, userà Carbon piuttosto che imparare un nuovo linguaggio di programmazione e riscrivere i propri programmi ex novo secondo le API Cocoa.
In generale le applicazioni che usano Cocoa, potenzialmente, non possono fare più cose rispetto a quelle scritte rispettando le API Carbon. Comunque c'è un piccolo set di funzioni che la Apple non ha ancora reso disponibile a Carbon semplicemente perché non sono necessarie a rendere l'applicazione nativa. Vice versa c'è un piccolo set di funzioni accessibili dalle applicazioni Carbon, ma non alle applicazioni Cocoa. La Apple sta lavorando per ridurre queste differenze a zero.

Le applicazioni Cocoa sono "più native" di quelle Carbon?
No. Sia Cocoa sia Carbon chiamano le stesse parti del sistema operativo. Le applicazioni Cocoa non sono né più né meno native rispetto a quelle Carbon. Le API Carbon sono più nuove a Mac OS X e quindi è possibile che ci sia qualche problema in più rispetto alle API Cocoa che da sempre sono presenti nel sistema operativo. Comunque questo è un problema a breve termine dato che la Apple presto risolverà il problema.

Conclusioni
Come detto in precedenza, gli sviluppatori di applicazioni già esistenti nel Mac OS classico difficilmente abbandoneranno le loro conoscenze di C/C++ per imparare l'Objective-C e difficilmente riscriveranno le loro applicazioni da capo. Inoltre le applicazioni scritte con le API Carbon sono più portabili verso altre piattaforme dove C e C++ sono i linguaggi di sviluppo principali. Le applicazioni Cocoa non sono portabili verso altre piattaforme e di solito gli sviluppatori vogliono vendere i propri prodotti su più piattaforme.
Pertanto la Apple continuerà a sviluppare sia Carbon sia Cocoa, poiché sa che la maggior parte delle applcazioni che hanno fatto la storia del Mac (Photoshop, Office…) sono scritte sfruttando le API Carbon.Se la Apple vuole che queste applicazioni continuino a sfruttare le tecnologie messe a disposizione da Mac OS X, deve continuare a rendere disponibili queste tecnologie anche alle API Carbon.

Luca Torella
17 giugno 2002

Chi è l'autore:

Luca Torella
è il responsabile dell'area Mac
del sito www.programmazione.it,
portale dedicato agli sviluppatori.

Home Page: http://www.torellasoft.com/
E-mail: postmaster@torellasoft.com