Cocoa è l'ambiente di sviluppo "nativo" di Mac OS X.
Deriva da OpenStep, uno straordinario ambiente di sviluppo orientato agli oggetti a cui alcuni programmatori avevano cominciato a lavorare fin dai primi giorni di Macintosh, quello con 128 kbyte di RAM. Infatti se l'interfaccia del Mac originale appariva notevole nei giorni in cui si dialogava con i computer solo tramite comandi digitati sulla tastiera, altrettanto non poteva dirsi della sua facilità di programmazione.
Scrivere un programma per Mac era molto complesso, ed il lavoro del programmatore consisteva in gran parte nel far funzionare cose che avrebbero dovuto andare per conto proprio, come i menu, le finestre, i pulsanti...
Ancora oggi scrivere un programma per un computer con interfaccia grafica è un lavoro da operaio dell'informatica, tutto basato sul fare esperienza di centinaia di API (l'interfaccia di programmazione) del sistema operativo (Windows, Mac) o del sistema di sviluppo (Java).
Quando Jobs fu lasciò Apple nel 1986 portò con se nella sua nuova azienda (Next Computer) alcuni ottimi programmatori, compresi coloro che stavano lavorando a questo sistema di sviluppo ad oggetti.
Programmare con oggetti tende a imitare la realtà; quando viene costruito un computer, si usano pezzi standard già presenti sul mercato: microprocessore, RAM, hard disk, scheda video, schermo, senza doverli reinventare. Viceversa il programmatore normalmente si ritrova invece nella situazione di doversi occupare di far funzionare tutto.
Nella programmazione ad oggetti dovrebbero esistere "oggetti" software reimpiantabili esattamente come si fa con un hard disk o un microprocessore.
Ancora oggi siamo lontani da una definizione così universale di "oggetto" tale da rendere applicabile al 100% questa idea, ma resta il fatto che per Next fu messo a punto un sistema di sviluppo straordinario, che si prendeva cura da se del funzionamente dei componenti del programma (finestre, menu, stampa, campi di testo e così via) lasciando che il progammatore si concentrasse sul proprio codice.
Per OpenStep fu addirittura creato un linguaggio specifico derivato dal C, Objective C, in tempi in cui ancora non esisteva C++. Nello stesso perioro in Apple Bill Atkinson lavorava al meraviglioso progetto di un programma basato sugli oggetti che permettesse all'utente non programmatore di scrivere da se i propri programmi senza bisogno di curarsi di dettagli ostili come "il tipo dei dati"... Quel programma era WildCard, poi HyperCard, che avrebbe influenzato addirittura l'autore di HTML e programmi come VisualBasic e REALbasic.
Comunque, OpenStep permetteva ai programmatori aziendali di scrivere velocemente per il proprio Next quel software che sul mercato mancava. Molti programmi di sviluppo da allora hanno preso ispirazione da OpenStep, ma a detta di chi lavora con quest'ultimo, nessuno è altrettanto efficiente, coerente e stabile. Un po' la differenza che corre fra l'interfaccia di Macintosh e quella di Windows.
Oggi OpenStep, aggiornato e ridenominato Cocoa, è diventato una realtà per sviluppare programmi per Mac OS X.
Dall'esperienza dell'insuccesso di Next, Steve Jobs ha però capito che non è sufficiente dare all'utente il sistema migliore perché esso lo usi. Nella "non più tanto breve" storia dell'informatica la parola chiave fino a oggi pare essere "compatibilità all'indietro". Per questo motivo è stato assegnato un peso determinante alla compatibilità di Mac OS X con i programmi già esistenti per Mac.
Per motivi "tecnici" i programmi originali di Mac OS 8 e 9 (programmi "classici) non potevano giovarsi dei vantaggi di OS X; Apple ha allora inventato un passo intermedio (Carbon), che permettesse di fare qualche modifica ai programmi scritti in modo "classico" per ricompilarli poi per il nuovo sistema. Questo sforzo ha preso quel paio d'anni in più che abbiamo aspettato OS X, ma evidentemente ne valeva la pena. Carbon permette agli sviluppatori che già hanno un programma funzionante per Mac OS 9 di non doverlo riscrivere da capo, ma di modificarlo leggermente, eliminando alcune chiamate ad API che non esistono più e usando invece alcune chiamate nuove.
Mac OS X riesce a far girare anche i programmi "classici", cioè non carbolizzati, ma lo fa in un modo particolare: lanciando un programma che simula il vecchio ambiente operativo e al cui interno gira Mac OS 9. Un po' come fa Virtual PC per far funzionare Windows, con la differenza che nel caso di Macintosh non bisogna emulare il microprocessore, che è sempre lo stesso PowerPC.
I programmi "classici", girando all'interno dell'ambiente Classic non godono dei vantaggi del nuovo sistema operativo; per cui su Mac OS X sarà meglio usarli il meno possibile...
Ma non ne sentiremo la mancanza: nel corso del 2001 saremo bombardati dai programmi nativi. Prima soprattutto dalle versioni carbonizzate delle applicazioni classiche che già conosciamo, come Filemaker, PhotoShop, FreeHand e compagnia. Probabilmente le "vecchie" software house continueranno a sviluppare in questo modo. Per qualche tempo, forse, sarà difficile convincerle a scrivere applicazioni per Cocoa, un po' per inerzia e un po' perché molte aziende vogliono utilizzare lo stesso codice per programmare per Windows e Mac; questa abitudine è deleteria per Macintosh, perché annulla parte della differenza fra Mac OS e Windows; in realtà Cocoa per Intel (e addirittura per Windows) esisterebbe, ma Steve ha pensato acutamente di congelarne lo sviluppo, proprio per fare di Cocoa un "plus" specifico di Mac OS X.
Cocoa rappresenta invece una grande opportunità per gli outsider: i giovani programmatori e le giovani software house, magari di provenienza dalla cultura Linux e/o Java (Cocoa è interamente programmabile in Java), che potranno creare grazie a Cocoa creare quella "killer application" bella, veloce e leggera che aziende schiacciate dal peso della compatibilità all'indietro e di piattaforma non sono più in grado di fare. E così nascerà qualche nuova software house di successo...
Naturalmente su Mac OS X possono girare con molta efficienza anche le applicazioni scritte in Java, compreso il nuovo Java 2, e, con poche o nessuna modifica, quelle scritte per Linux che, come Mac OS X, è un dialetto di Unix.