Newsgroup: it.comp.macintosh
Titolo: Differenze e relazioni tra Carbon, Cocoa, Classic, Aqua etc.

Ciao a tutti,
parlando a livello di architettura di Mac OS X, qualcuno mi spiega le
differenze e le relazioni tra le componenti Carbon, Cocoa, Classic,
Aqua, etc.?
Da quel che ho capito Aqua e` la API per le interfacce grafiche (quindi
la libreria di Widgets in pratica)... Ma Carbon e Cocoa esattamente
cosa sono? E che relazioni hanno con Aqua?
Poi sotto c'e` pure BSD con le sue API POSIX... Insomma, se volessi
sviluppare come mi oriento?
E visto che ci sono... Mi sembra che Objective-C la faccia da padrone
in questo ambiente, anche se ci sono vari bindings. Ma se volessi
sviluppare un'applicazione "nativa" dovrei farlo in Objective-C?
Grazie.

 Da quel che ho capito Aqua e` la API per le interfacce grafiche
 > (quindi la libreria di Widgets in pratica)
No. Con Leopard l'Epoca Aqua finirà, tanto non c'è più l'iMac
traslucido primigenio con cui fare pendent: già con Panther hanno
iniziato a rinsavire e ridurre il livello delle trasparenze,
quanto mai pacchiane ormai in Vista e KDE.
Sta per iniziare il Lustro Specio: il nuovo tormentone tra i
designer vuole scrivanie ebano tirate a lucido su cui poggiare
widget ninnoli soprammobili.

 widget ninnoli soprammobili.
Questo č vero o č uno scherzo? :)
-- 
Uccidete i filosofi e tenetevi riso e bacchette per voi.

 a livello speculativo come design mi sembra probabile, i tempi ci sono.
Ah, ok. Speriamo che facciano una cosa "bella".


 Aqua, etc.?
OS X e' organizzato cosi':
        UTENTE
------------------------
Servizi per Applicazioni
------------------------|------------------
      Fondamento        |
------------------------|  Servizi Quartz
     Supporto BSD       |
------------------------|------------------
        Kernel
------------------------
        IL MAC
Dall'alto al basso:
UTENTE sei tu.
Lo strato "Servizi per Applicazioni" contiene le parti di Cocoa e Carbon
che mostrano roba all'utente (l'Application Kit per Cocoa, le classi HI*
e le vecchie chiamate mutuate da OS 9 per Carbon). A questo strato si
posizionano anche gli altri ambienti grafici ad alto livello che possono
girare sotto OS X, come Swing (il kit per interfacce utente Java) o
Classic. In questo strato c'e' anche il sistema di messaggistica Apple
Event di alto livello, che consente a diverse applicazioni di scambiarsi
messaggi (e su cui si fonda AppleScript).
Lo strato "Fondamento" contiene il kit Foundation di Cocoa, Carbon Core,
i servizi di I/O e comunque tutte quelle parti che servono alle
applicazioni ma non interagiscono direttamente con l'utente. La
differenza fondamentale tra App Services e Fondamento sta nel fatto che
i servizi offerti da questo strato non richiedono l'ausilio di un
programma, il window server, che gestisce la parte grafica e
comunicativa della sessione (es. puoi usare le API di Fondamento anche
se sei collegato al Mac solamente via SSH, ma non hai fatto il login
grafico, mentre quelle di App Services no).
Lo strato "Supporto BSD" contiene a. le API di bassissimo livello
(libc), b. i meccanismi di boot (init tradizionale per OS X < 10.3,
launchd per OS X >= 10.4). Le API sono usate direttamente dalle
applicazioni che vengono da altri OS (es. quelle che vengono da Linux e
usiamo sotto X11, o Samba, o sshd) e fanno da mattoncini-base per Carbon
e Cocoa. A questo livello operano anche daemon vari che offrono servizi
a tutto il sistema, come ad esempio il Server Sicurezza (quello che
permette di escalare i privilegi a piacimento).
Parallelamente a Fondamento/Supporto BSD operano i Servizi Quartz, che
fornisce ad App Services un modo svelto per comunicare direttamente con
i driver grafici (che operano a livello kernel). E' avviato durante le
operazioni di boot e fornisce accelerazione hardware di un mucchio di
roba (non ancora tutto pero'). Dentro questo strato, per semplicita', ho
incluso anche le API grafiche e video di basso e medio livello (OpenGL,
Quicktime, i vari Core Image/Video e anche Core Audio, che non c'entra
con la grafica ma fa piu' o meno la stessa cosa con le schede audio).
Fino a qui siamo in userspace, cioe' stiamo parlando di librerie o
applicativi che lavorano a "livello alto", schermati dal resto della
macchina. Sotto questo punto c'e' il kernel, che traduce le chiamate dei
livelli superiori in istruzioni all'hardware. A questo strato lavorano i
driver delle periferiche (kext). Il kernel di OS X fornisce diversi
servizi, tra cui il piu' basilare (e usato dal 90% della gente sopra) e'
quello di messaggistica, con cui i programmi possono scambiarsi dati.
Molti dei servizi di I/O tra applicazioni sono realizzati in questo modo
(Distributed Objects, notifiche, Apple Events, pipe e vari sistemi di
interscambio dati BSD, ecceccecc.). Inoltre il kernel contiene l'I/O
Kit, che controlla il funzionamento dei driver di input/output e la loro
comunicazione semplificata coi livelli piu' elevati.
Sotto tutto cio' sta IL MAC, che e' il tuo Mac.
Questa e' ovviamente una divisione di massima, una linea guida, ma
certamente troverai dei controesempi che esistono "spalmati" in piu' di
una di queste categorie. OS X e' una bella bestia complicata,
purtroppo...
 - ∞
-- 
http://millenomi.altervista.org/

 sviluppare un'applicazione "nativa" dovrei farlo in Objective-C?
Puoi usare Carbon e il C procedurale, oppure utilizzare un server
grafico diverso da quello normale di OS X (esempio: X11) con le sue API
diverse. Cocoa, pero', semplifica le cose di parecchio (prova a creare
un'applicazione Cocoa nuova da Xcode, metti un campo di testo nella
finestra-base che ti viene fornita in MainMenu.nib e avviala senza
scrivere alcuna linea di codice: vedrai che cose come Esci, Taglia,
Copia, Incolla, Aiuto, Ortografia... gia' funzionano perfettamente).
 - ∞
-- 
http://millenomi.altervista.org/

 Ah, ok. Speriamo che facciano una cosa "bella".
A me Unified (leggi Lo Stile di Mail 3) ovunque non dispiacerebbe.
 - ∞
-- 
http://millenomi.altervista.org/

 Lo Stile di Mail 3
Sai qualcosa che io non so?
-- 
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport

 comunicativa della sessione
In questo punto è forse il caso di fare una distinzione molto
importante fra il Foundation Kit di Cocoa e CoreFoundation.
E' vero che ciò che discrimina il Foundation dall'App Kit
è l'indipendenza dalle problematiche GUI, ma il Foundation
Kit rientra comunque in Cocoa e quindi tra gli "Application
Environments" che Apple colloca in cima allo stack
dell'architettura di Mac OS X.
CoreFoundation rientra invece tra i Core Serivices ad un
livello più basso d'astrazione ed è in esso che vengono
per esempio concretamente implementati molti serivizi
e strutture dati in comune tra Cocoa e Carbon, tanto che
che molti puntatori possono venire scambiati senza problemi
tra i due ambienti (Apple usa l'aggettivo "toll-free").
La creazione di CoreFoundation è stata una tappa
fondamentale nell'evoluzione di Mac OS X. Mentre all'indomani
dell'acquisizione di NeXT si pensava di relegare i Manager
(raccolte di API) derivati dal vecchio System all'interno
di un emulatore (la Blue Box), grazie a CoreFoundation
le API Carbon sono state portate alla pari dignità di Cocoa e
i due ambienti sono stati fatti intercomunicare pienamente;
la visione manichea che li vede contrapposti non ha
affatto una giustificazione concreta: peccato solo che i
continui intrecci che si stabiliscono tra loro, più che rendere
la storia più appassionante, la rendono invece maledettamente
difficile da seguire e capire fino a fondo.

 Sai qualcosa che io non so?
Ops, ho toppato. Mail 2.
 - ∞
-- 
http://millenomi.altervista.org/

 tra i due ambienti (Apple usa l'aggettivo "toll-free").
Vero. Avrei dovuto menzionarlo esplicitamente.
"Passaggio senza pedaggio" pero' mi ha sempre fatto un po' ridere :D
 - ∞
-- 
http://millenomi.altervista.org/

 Ops, ho toppato. Mail 2.
Ah, allora quoto


 Ah, allora quoto
Anche a me alla fine non dispiace.


 Anche a me alla fine non dispiace.
C'era un programmillo, postato svariati mesi fa, che rendeva tutte le
applicazioni di quel colore li`, eliminando il brushed, l'aqua e (mi
pare) anche il color palude di iTunes 6.
Mo` che c'ho pensato me lo cerco e installo


 Mo` che c'ho pensato me lo cerco e installo
Uno. Ce l'avevo anche io, ma poi l'aggiornamento a 10.4.3 (o era 4?) me
l'ha tolto, e non ho piu' avuto la voglia di rimetterlo.
 - ∞
-- 
http://millenomi.altervista.org/

 l'ha tolto, e non ho piu' avuto la voglia di rimetterlo.
Mo` cerco Uno


 Mo` cerco Uno
Migliore, me lo tengo


Grazie a tutti per le preziose informazioni
A presto

 window server avviato
correzione: Il secondo ha bisogno del window server avviato, il primo
no.
 - ∞
-- 
http://millenomi.altervista.org/

 pare) anche il color palude di iTunes 6.
Uhm. Interessante, anche se per ora preferisco non haxarmi la GUI.
Già ho sto facendo da betatester pagante per Apple...


 Migliore, me lo tengo
hai degli screenshots?


 Già ho sto facendo da betatester pagante per Apple...
T'assicuro che se mi inviassi il tuo iMac sarei ben felice di sollevarti
da questo peso :)


 hai degli screenshots?
In realta` l'ho cacciato dopo 15 minuti, fa casino coi menu.
Ogni tanto i font della barra del Finder (all'apertura di una
applicazione) sono grossi e i menu non hanno scritte.
Non so se il problema sia di Uno o Uno con la 10.4.5 ma non e` usabile.
Iridium invece sembrava andare bene, ma era troppo poco curato.


 Non so se il problema sia di Uno o Uno con la 10.4.5 ma non e` usabile.
Bene... allora se ne sta per cazzi suoi :)


 da questo peso :)
Eh, ma il problema è tutto sul *pagante*.


 Eh, ma il problema è tutto sul *pagante*.
Evvabbe`, ma se te fai il pignolo :P
