# Tecnologia di macOS

macOS è il sistema operativo sviluppato da Apple per i computer Macintosh. Mac OS X, come tutti i moderni sistemi operativi, è strutturato a livelli - e, nella fattispecie, da cinque livelli. La suddivisione in livelli è una scelta molto comune tra i moderni OS, poiché consente uno sviluppo rapido del sistema operativo e permette di renderlo quasi totalmente indipendente dall'hardware. Inoltre, questa soluzione fornisce un'architettura estremamente logica e consente di ottenere un sistema efficiente, visto che i singoli moduli possono essere analizzati e riprogettati in modo da eliminare il più possibile gli eventuali "colli di bottiglia".

## Livello utente

Questo livello è l'unico ad essere direttamente accessibile dall'utente. Alcune componenti di questo livello formano l'interfaccia grafica che l'utente utilizza, mentre altre rappresentano delle linee guida che i programmatori devono seguire per uniformare l'interfaccia grafica dei loro programmi all'interfaccia grafica del sistema operativo - e, quindi, alle aspettative dell'utente.
* Aqua
Aqua è la tecnologia che racchiude la rappresentazione dell'interfaccia grafica. Questa tecnologia racchiude i temi utilizzati dall'interfaccia grafica per disegnare le finestre che compongono le applicazioni e il sistema operativo. Aqua è anche un insieme di linee guida che i programmatori devono seguire per uniformare le loro applicazioni al sistema operativo.
* Accessibilità
Questa componente raccoglie tutte le tecnologie che il sistema operativo utilizza per facilitare l'utilizzo del computer agli utenti disabili - dall'utilizzo di un programma per ingrandire lo schermo al riconoscimento vocale.
* AppleScript
AppleScript è il linguaggio standard di scripting utilizzato da Mac OS X e dalle sue applicazioni per automatizzare le operazioni ripetitive.
* Bundle e Package
I Bundle e i Package sono i contenitori di software autoinstallanti di Mac OS X. I Bundle vengono usualmente utilizzati per installare e gestire i componenti interni del sistema operativo (come i salvaschermo, le librerie, i plug-in o altro), mentre i package vengono utilizzati per l'installazione delle applicazioni. Il sistema tiene traccia dei Bundle e dei package installati tramite un database interno.
* Cambio utente rapido
Il Mac OS X consente a un utente di utilizzare il computer anche quando un altro utente risulta collegato al computer. L'avvio del nuovo utente, infatti, non sospende i processi del vecchio utente. Quando un nuovo utente si intende collegare al sistema Cambio utente rapido provvede a creare l'ambiente per il nuovo utente e a tenere traccia di tutte le risorse condivise in modo da evitare blocchi del sistema dovuti all'accesso scorretto a risorse condivise.
* Localizzazione
Mac OS X supporta molteplici lingue e tutti i maggiori stili di scrittura del pianeta. Tutti i componenti raccolti sotto questa denominazione si preoccupano di gestire i vari linguaggi del sistema operativo comprese le peculiarità di scrittura (se da destra verso sinistra o viceversa, dall'alto verso il basso o l'opposto) e le notazioni standard della data, dei numeri e così via. Esiste, quindi, una componente del sistema operativo che provvede a selezionare la localizzazione migliore tra quelle disponibili.
* Autoconfigurazione del Software
Per cercare di semplificare il normale utilizzo del computer, il sistema operativo dispone di una componente che quando installa un programma provvede a memorizzare i file che il programma è in grado di manipolare in modo da associarli automaticamente alle estensioni corrette. Provvede, dunque, a integrare le funzionalità del programma nel sistema operativo (sempre che il programma possa fornire funzioni al sistema operativo).

## Livello Applicazioni

Per sviluppare applicazioni per Mac OS X il programmatore dispone di diverse tecnologie utilizzabili. Alcune tecnologie svolgono compiti simili pur essendo progettate per affrontare un problema da punti di vista differenti
* Carbon
La tecnologia Carbon è stata sviluppata per permettere alle applicazioni progettate per Mac OS 9 di essere utilizzate con Mac OS X con minime correzioni. Questa tecnologia per ragioni di compatibilità non si avvantaggia di molte delle caratteristiche del Mac OS X
* Cocoa
Questa tecnologia è rivolta allo sviluppo di applicazioni native per Mac OS X. È progettata per sfruttare al pieno le tecnologie incluse nel sistema operativo. I programmi sviluppati con le librerie Cocoa non sono compatibili con i sistemi operativi precedenti a Mac OS X
* Java
Il sistema operativo supporta nativamente le applicazioni Java e le Applet Java. Questo componente provvede a avviare la Java virtual machine e a gestire le comunicazioni tra la Java virtual machine e il sistema operativo.
* WebObjects
WebObjects è un insieme di programmi e librerie utilizzabili per sviluppare applicazioni native per il Web.
* BSD e X11
Il nucleo del Mac OS X è basato su BSD, questo componente provvede a gestire le chiamate dei programmi BSD e a indirizzarle correttamente. X11 è un'estensione grafica utilizzata dei programmi BSD per visualizzare un'interfaccia grafica. È concettualmente simile a Quartz solo che è meno sofisticata. Per la visualizzazione si basa sulle primitive di Quartz per fornire all'utente una rappresentazione grafica coerente con le applicazioni native per Mac OS X.

## Grafica e multimedia

Durante lo sviluppo di Mac OS X Apple ha posto molta attenzione nel sottosistema grafico. Infatti il livello dedicato alla gestione della grafica e più in generale del multimedia è composto da molte tecnologie che sono state sviluppate per ottenere il miglior risultato possibile nel loro campo di applicazione.
* Quartz
Quartz è l'insieme delle tecnologie che si occupano del disegno e della gestione dell'interfaccia grafica del Mac OS X. La tecnologia Quartz è basata sul formato PDF per consentire una resa grafica elevata e indipendente dal dispositivo di visualizzazione.
* QuickTime
QuickTime è la tecnologia sviluppata da Apple per manipolare i dati multimediali. Viene utilizzata per visualizzare filmati, immagini, suoni e altro. Può essere utilizzata per effettuare conversioni e per creare streaming audio e video.
* OpenGL
OpenGL è la tecnologia standard sviluppata per la visualizzazione della grafica tridimensionale. Include una serie di effetti applicabili sulle immagini. Viene utilizzata anche dal sottosistema Quartz per accelerare alcune operazioni grafiche demandandole alla scheda grafica.
* Testo e Font
Il sistema operativo dispone di una serie d componenti dedicati alla visualizzazione e alla elaborazione dei font. I componenti supportano anche la codifiche unicode a 16 bit per permettere di rappresentare correttamente lingue come il cinese o il coreano, lingue dotate di migliaia di simboli diversi.
* ColorSync
ColorSync è la tecnologia sviluppata da Apple per gestire i colori. Ogni dispositivo di ingresso (scanner, videocamere, fotocamere, ecc) e ogni dispositivo di uscita (monitor, stampante, ecc.) è dotato di una particolare rappresentazione dei colori. Lo spazio cromatico gestibile dal monitor è diverso dallo spazio cromatico gestibile dalla stampante e quindi per evitare di ottenere dei colori in stampa diversi da quelli visualizzati a monitor è stato sviluppato ColorSync. Il componente provvede utilizzando i profili colore dei singoli dispositivi a adattare i colori rappresentati a video con i colori stampati.
* Core Audio
Questo componente si preoccupa di gestire l'audio del computer. Permette di adattare l'audio prodotto dai programma con le reali capacità audio del computer e provvede a miscelare più canali, a generare effetti audio, ecc.
* Riproduttore DVD
Questo componente fornisce le capacità di riprodurre i filmati DVD a tutte le applicazioni che lo utilizzano.
* Stampa
Questo sottosistema provvede a gestire le stampanti installate. È in grado di gestire stampanti remote, di effettuare conversioni se necessario e di gestire la coda di stampa. Il sottosistema si occupa di gestire i fax ricevuti e si interfaccia a CUPS o a i driver proprietari sviluppati dai produttori delle stampanti.
* QuickDraw
Questa tecnologia si occupa di manipolare e visualizzare la grafica delle applicazioni che utilizzano Classic. In realtà la tecnologia QuickDraw non manipola direttamente la grafica ma unicamente converte le chiamate QuickDraw in chiamate al sottosistema Quartz che provvederà a elaborarle.

## Servizi per le applicazioni

Questo livello è composto da servizi forniti dal sistema operativo alle applicazioni. Questi servizi hanno lo scopo di consentire una più stretta integrazioni tra le applicazioni e il sistema operativo. Questo servizi sono nati nell'ottica di rendere più semplice e comodo l'utilizzo del computer per l'utente.
* Contatti
Il sistema operativo mette a disposizione delle applicazioni un servizio centralizzato di recupero e gestione delle informazioni. Questo servizio che si basa sull'omonimo programma provvede a organizzare tutti i contatti dell'utente.
* Disc Recording
Questo insieme di librerie permettono agli applicativi di manipolare e gestire direttamente i dispositivi ottici riscrivibili come CD e DVD senza doversi preoccupare delle problematiche tecniche dato che queste sono gestite dal sistema operativo.
* Help
Mac OS X include un gestore delle guide in linea centralizzato. Questo consente all'utente di effettuare direttamente le ricerche in tutte le guide in linea installate e non soltanto in quella dell'applicazione in uso.
* Human Interface Toolbox
L'Human Interface Toolbox è una raccolta di oggetti (Toolbox) che possono essere utilizzati dai programmatori per realizzare interfacce grafiche conformi agli standard Aqua con semplicità.
* Image Capture
Image Capture è un componente che si preoccupa di gestire l'acquisizione di immagini da scanner o da fotocamera. Utilizzando questa libreria i programmatori non si devono preoccupare di gestire direttamente l'acquisizione delle immagini dato che viene gestito e processato in automatico dal sistema operativo.
* Ink
Questo componente si preoccupa di gestire il riconoscimento della scrittura a mano libera. Se l'utente collega al computer una tavoletta grafica il sistema riconosce la presenza del dispositivi e attiva il componente Ink. Questo componente provvede a gestire la tavoletta grafica e a riconoscerne i comandi.
* Keychain Services
Il sistema operativo fornisce un servizio di raccolta e gestione delle informazioni sensibili dell'utente. Questo componente gestisce le password, gli account e tutte le informazioni riservate che l'utente crea quando utilizza internet o durante il normale utilizzo del computer. Il servizio fornisce (dietro autentificazione) le informazioni richieste ai programmi.
* Launch Services
Questo servizio provvede a attivare il programma appropriato quando l'utente effettua un doppio click su un file contenente dati.
* Open Directory
Open Directory è una tecnologia che provvede a fornire un metodo standard e trasparente per recuperare e gestire informazioni presenti in locale o su server remoti. Il servizio si avvale di plug-in che provvedono a gestire i singoli protocolli. Apple fornisce plug-in per LDAPv2, LDAPv3, NetInfo, AppleTalk, SLP, SMB, DNS, Microsoft Active Directory, Rendezvous e altri. Ulteriori protocolli possono essere gestiti con l'aggiunta di ulteriori plug-in.
* Bonjour
Questo servizio fornisce l'implementazione Apple della tecnologia Zeroconf, una tecnologia per l'autoconfigurazione delle reti locali e l'individuazione delle macchine disponibili.
* Search Kit
Questo insieme di librerie forniscono un motore di ricerca veloce e efficiente da utilizzare nelle applicazioni. Il motore di ricerca gestisce le lingue e gli alfabeti gestiti da Mac OS X e è in grado di indicizzare e analizzare elevate molti di dati in tempi rapidi. Viene utilizzato dal Finder, dal programma di posta Mail e da Contatti.
* Security Services
I componenti sotto questo nome si occupano della gestione della sicurezza sotto Mac OS X. Il sistema operativo supporta tecnologie come il protocollo di rete Kerberos, BSD e Common Data Security Architecture (CDSA). I componenti supportano la gestione dei certificati digitali e dei canali sicuri (VPN e SSL). I componenti utilizzano i Keychain Services per memorizzare le informazioni riservate.
* Tecnologia vocale
Mac OS X è dotato della tecnologia di riconoscimento audio e di sintesi vocale. Il sistema operativo utilizzando questi componenti è in grado di riconoscere i comandi datagli vocalmente ed è anche in grado di tradurre un testo nell'equivalente file audio. Questa tecnologia è molto importante per gli utenti disabili e utilizzando questi componenti può essere integrata nelle applicazioni. La tecnologia attualmente gestisce solo l'inglese.
* Web Kit
Questo componente si preoccupa di analizzare un file HTML e di tradurlo nella sua rappresentazione grafica. Viene utilizzato dal programma Safari e dal programma Mail per mostrare le e-mail in formato HTML.
* Web Service Access
Questo componente fornisce una serie di servizi agli sviluppatori di applicazioni orientate al Web.
* XML Parsing
Tutte le preferenze del Mac OS X sono memorizzate come file XML questo componente fornisce alle applicazioni un metodo semplice veloce e standard per analizzare e modificare file XML.

## Primitive di sistema

Il Mac OS X fornisce una serie di interfacce in C per la gestione a basso livello dei dati. Le primitive sono integrate nel nucleo di Darwin. Questa lista rappresenta i più comuni tipi di dati nativamente manipolate dal sistema operativo.
* Collection
* Bundle e plug-ins
* Stringhe
* Dati grezzi a blocchi
* Data e ora
* Preferenze
* Stream
* URL
* Dati XML
* Informazioni Locali
* loop attivi
* Porte e socket

## Nucleo del Sistema Operativo

Questo è l'ultimo livello del sistema operativo. A questo livello i programmi accedono direttamente all'hardware della macchina. In questo livello si trova il nucleo del sistema operativo e tutti i componenti che per ottenere le migliori prestazioni possibili gestiscono direttamente i componenti hardware del computer.
* Darwin
Darwin è il nucleo del Mac OS X, è formato dal kernel XNU e dal sottosistema BSD. XNU è un kernel di derivazione Mach che supporta il multitasking preemptive, supporta il multiprocessing simmetrico e i task in tempo reale. Gestisce nativamente la memoria protetta e la memoria virtuale. Il sottosistema BSD è integrato nel kernel e fornisce le primitive per manipolare i processi e le regole per gestire la sicurezza a livello di processo. Il sottosistema BSD fornisce le primitive per gestire la rete e per il supporto dei thread. Il kernel provvede a gestire anche i driver delle periferiche e i file system che gestiscono i dispositivi di memorizzazione (disco rigido, CD, DVD, ecc).
* Network Support
Questo componente si preoccupa di gestire i dispositivi di rete. Essendo basato sul sottosistema BSD i dispositivi sono gestiti tramite moduli. Questo componente si occupa di gestire sia i protocolli logici che quelli fisici.
* Velocity Engine
Questo componente permette al programmatore di utilizzare le istruzioni multimediali incluse nell'unità di calcolo altivec dei processori PowerPC a partire dai processori PowerPC G4. L'unità altivec è stata progettata per lavorare in parallelo su elevati flussi di dati come possono essere i flussi multimediali.
* Supporto Java
Per ottenere le migliori prestazioni dal linguaggio Java è stato necessario implementare direttamente le chiamate della Java virtual machine al più basso livello possibile.