Elaborato Mauriello Rina Michela N46000137
Transcript
Elaborato Mauriello Rina Michela N46000137
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato finale in Sistemi Operativi Il Sistema Operativo OS X 10.8 Mountain Lion Anno Accademico 2011/2012 Candidato: Rina Michela Mauriello matr. N46/000137 A mio nonno, che è e sempre sarà la mia àncora. E al mio Capitano, Per Aspera, Ad Astra. Il Sistema Operativo OS X 10.8 Mountain Lion Indice Introduzione 4 Capitolo 1. Core & Application Services 1.1 1.2 10 Application Services Core Services 10 21 Capitolo 2. API & GUI 2.1 2.2 29 Application Programming Interface Graphical User Interface 29 39 Capitolo 3. Il Kernel 3.1 3.2 3.3 3.3.1 3.3.2 48 Mach I/O Kit BSD File System Networking 50 54 55 57 59 Conclusioni 61 Bibliografia 63 Ringraziamenti 64 III Il Sistema Operativo OS X 10.8 Mountain Lion Introduzione L’evoluzione di questo Sistema Operativo ha origini lontane. Era il 1976 quando tre ragazzi statunitensi, Steve Jobs, Steve Wozniak e Ronald Wayne, fondarono l’oramai nota Apple. Il loro sogno era costruire un computer economico, utilizzando il quantitativo minimo di componenti ed accessibile a tutti. Cominciarono a lavorare nel garage della famiglia di Steve Jobs, e con non poche difficoltà sono riusciti a sviluppare l’Apple I. Il primo Apple Macintosh fu presentato nel 1984, ma solo nel 2000, dopo l’acquisizione della NeXT nel 1996, si è avuta la presentazione del padre di Mountain Lion, Mac OS X 10.0 Cheetah (Giaguaro). Da allora sono passati 13 anni, e il Sistema Operativo ha subito dei cambiamenti radicali. OS X 10.8 Mountain Lion ha come primo cambiamento il nome: Mountain Lion perde il suffisso Mac. Alla pagina seguente, una tabella che riassume la storia dell’evoluzione di Mac OS X. 4 Il Sistema Operativo OS X 10.8 Mountain Lion Versione Nome In Codice Data di rilascio Grail1Z4 / RhapsodyDeveloper Release Ultima release DR2 31 Agosto 1997 Titan1U (14 Maggio 1998) 1.2v3 Mac OS X Server 1.0 Hera 16 Marzo 1999 (27 Ottobre 2000) Mac OS X Developer Preview 16 Marzo 1999 Public Beta Kodiak 13 Settembre 2000 Mac OS X 10.0 Cheetah 24 Marzo 2001 DP4 (5 Aprile 2000) 10.0.4 (22 Giugno 2001) 10.1.5 Mac OS X 10.1 Puma 25 Settembre 2001 (6 Giugno 2002) 10.2.8 Mac OS X 10.2 Jaguar 24 Agosto 2002 (3 Ottobre 2003) 10.3.9 Mac OS X 10.3 Panther 24 Ottobre 2003 (15 Aprile 2005) 10.4.11 Mac OS X 10.4 Tiger 29 Aprile 2005 (14 Novembre 2007) 10.5.8 Mac OS X 10.5 Leopard 26 Ottobre 2007 (5 Agosto 2009) 10.6.8 v1.1 Mac OS X 10.6 Snow Leopard 28 Agosto 2009 (25 Luglio 2011) 10.7.5 Mac OS X 10.7 Lion 20 Luglio 2011 (19 Settembre 2011) 10.8.2 OS X 10.8 Mountain Lion 25 Luglio 2012 (19 Settembre 2012) Tabella I.1 5 Il Sistema Operativo OS X 10.8 Mountain Lion Apple ci offre oltre 200nuove funzioni e molti cambiamenti interni. Vediamo alcune novità interne:1 Maggiore integrazione con iCloud (iPhone, iPad, iMac, MacBook e iPod). Accessibilità, il pannello di accesso alle preferenze di sistema è stato completamente ridisegnato. Sincronizzazione automatica dei documenti in iWork con iCloud. Reminders, una nuova applicazione per gestire i promemoria. Notes, una nuova applicazione per creare note con testo e immagini, integrandole anche in altri dispositivi con iCloud. Messaggi, client di messaggistica istantanea multi protocollo (che sostituisce iChat), supportando il servizio iMessage per iPhone, iPad e iPod Touch utilizzando il servizio iCloud. Centro Notifiche, un’applicazione che consente di vedere tutte le notifiche di calendario, Facebook, Twitter, Messaggi, Mail, ecc… Power Nap. Il Mac resta aggiornato anche se spento (solo MacBook Pro con display Retina e MacBook Air Early 2009 o successivi). Un pulsante “Condividi” nella finestra di dialogo in Safari e in altre applicazioni per condividere sui principali social network e nelle app. Dettatura, un’applicazione che converte le parole in testo. Launchpad, per una ricerca veloce delle app. AirPlay Mirroring, una tecnologia che consente al computer di usare senza fili un qualunque televisore HD connesso ad Apple TV come schermo secondario. Finder, per una migliore gestione dei file. Gatekeeper, un sistema di riconoscimento delle applicazioni che può bloccare le applicazioni ritenute meno sicure (ossia quelle prive di certificati o, al massimo, non provenienti da Mac App Store). 1 http://www.apple.com/it/osx/whats-new/features.html 6 Il Sistema Operativo OS X 10.8 Mountain Lion Game Center, centro dove è possibile controllare ogni gioco scaricato. Time Machine, per creare backup criptati su Time Capsule. Nuovissime funzioni per la Cina. iCal è stato rinominato in Calendario Address Book è stato rinominato in Contatti Applicazioni contenute all’interno di OS X 10.8 Mountain Lion:2 Applicazioni Acquisizione Immagine Anteprima Automator Calcolatrice Calendario Contatti Dashboard Dizionario DVD Player FaceTime iTunes Launchpad Libro Font Mac App Store Mail Memo Messaggi Mission Control Note 2 http://support.apple.com/kb/SP654?viewlocale=it_IT 7 Il Sistema Operativo OS X 10.8 Mountain Lion Photo Booth Preferenze di Sistema Promemoria QuickTime Player Safari Scacchi TextEdit Time Machine Utility Accesso Portachiavi AppleScript Editor Assistente Boot Camp Assistente Migrazione Configurazione MIDI Audio Console DigitalColor Meter Grapher Informazioni di sistema Istantanea Monitoraggio Attività RAID Utility Scambio Documenti Bluetooth Terminale Utility AirPort Utility ColorSync Utility Disco Utility Network Utility VoiceOver 8 Il Sistema Operativo OS X 10.8 Mountain Lion Mountain Lion ha subito molti cambiamenti anche nelle tecnologie del Sistema Operativo. Una vecchia immagine che descrive l’architettura del Mac OS X è la seguente: Figura I.1 Nei vari capitoli di questa tesi si scomporrà tale disegno e si analizzeranno tutti i componenti singolarmente, vedendo il loro funzionamento e come sono cambiati in OS X 10.8 Mountain Lion. 9 Il Sistema Operativo OS X 10.8 Mountain Lion Capitolo 1 Core & Application Services Lo strato intermedio del OS X è composto da Core Services e da Application Services. Application Services, detto anche Media Layer, include numerose tecnologie per il rendering e l'animazione di contenuti 2D e 3D (compreso il testo) e per la riproduzione, la registrazione e la modifica di media audiovisivi. Core Services è un gruppo di API che forniscono i servizi essenziali per le applicazioni, non avendo però alcuna iterazione diretta con la GUI. 1.1 Application Services L’Application Services, o, come detto, il Media Layer, serve per per il rendering e l'animazione di contenuti 2D e 3D (compreso il testo) e per la riproduzione, la registrazione e la modifica di media audiovisivi. Media Layer è composto da più componenti: Quartz Quicktime OpenAL OpenGL 10 Il Sistema Operativo OS X 10.8 Mountain Lion Core Audio Core Image Core Animation Core Text AV Foundation Figura 1.1 Quartz è il motore di rendering3 situato sopra Darwin. Quartz supporta nativamente Aqua nella visualizzazione della grafica bidimensionale utilizzata per creare l'interfaccia grafica, include il rendering in tempo reale e antialiasing con una precisione di una frazione di pixel. Quartz è composto da due componenti principali: Quartz 2D e Quartz Compositor . Ossia è formato sia da un renderer 2D di grafica di base sia da un motore di composizione che invia le istruzioni alla scheda grafica. A causa di questa sua natura “verticale”, Quartz è spesso visto come sinonimo di Core Graphics. 3 Un motore di rendering è un componente hardware o software che interpreta delle informazioni in ingresso codificate secondo uno specifico formato e le elabora creandone una rappresentazione grafica. 11 Il Sistema Operativo OS X 10.8 Mountain Lion In un senso più generale, il termine Quartz fa riferimento a quasi ogni parte del modello di grafica del rendender di Mac OS X. In questo uso, il termine copre anche Core Image e Core Video 4, in quanto il termine comprende una vasta gamma di tecnologie grafiche fornite da Apple5: Quartz 2D Quartz Extreme QuartzGL o Quartz 2D Extreme Quartz Compositor Quartz Core Framework Quartz Display Services Quartz Event Services Quartz Framework Quartz 2D è la principale libreria grafica bidimensionale di testo e grafica: supporta nativamente la GUI Aqua tramite la visualizzazione grafica bidimensionale per creare l'interfaccia utente, includendo sia l’ “on-the-fly di rendering” sia l’ “anti-aliasing” . È un discendente diretto del Display PostScript di NeXT. Esso è basato sulla versione 1.4 dell'Adobe Portable Document Format (PDF)6 Quartz Compositor è il motore utilizzato da Quartz 2D e da altri frameworks7 come ad esempio OpenGL, Core Image e QuickTime. 4 http://developer.apple.com/reference/GraphicsImaging/idxQuartz-date.html 5 http://en.wikipedia.org/wiki/Quartz_(graphics_layer) 6 Un PDF è un formato multipiattaforma nato per preservare l'impaginazione dei documenti. Quindi, indipendentemente da quale sistema operativo o se sia a video o stampato, un file PDF mostra sempre la stessa impaginazione, con gli stessi caratteri, stili, colori, ecc. 7 Nella produzione del software, il framework è una struttura di supporto su cui un software può essere organizzato e progettato. 12 Il Sistema Operativo OS X 10.8 Mountain Lion Quartz Compositor si occupa di svolgere due compiti principalmente: Aggiornare e assemblare le finestre Gestire gli eventi legati alle finestre Ogni finestra nel Mac OS X è memorizzata come un'immagine bitmap con associata la posizione (inclusa la sua profondità rispetto allo schermo), la trasparenza e le informazioni relative all'antialiasing. Queste informazioni vengono utilizzate dall'applicazione proprietaria della finestra per disegnare correttamente la finestra utilizzando il sottosistema più appropriato. Una volta che la finestra è stata generata, Quartz Compositor preleva l'immagine della finestra e utilizzando le informazioni addizionali (posizione, profondità, ecc) crea la rappresentazione che viene visualizzata sullo schermo. Lo schermo non viene trattato dal gestore come una matrice di punti, ma viene trattato in modo vettoriale. Ogni finestra o componente della GUI è definito come un oggetto e come tale viene trattato. L'assemblaggio delle finestre avviene come se lo schermo fosse dotato di una terza dimensione infatti una finestra in primo piano proietta un'ombra sulla finestra sottostante. La gestione delle finestre sotto Mac OS X è in sostanza indipendente dalla tecnologia di disegno adottata. Questo consente di realizzare gli impressionanti effetti grafici come l'operazione di contrazione delle finestre quando entrano nel Dock o exposé con semplicità e efficienza. Quartz Compositor non si occupa solo del ridisegno delle finestre, si occupa anche della gestione degli eventi associati alle finestre. Quando l'utente preme un pulsante di una finestra Quartz Compositor riceve l'evento e provvede a trasmetterlo al processo responsabile della finestra. Il programma se necessario provvede a modificare l'immagine della finestra e poi ordina a Quartz Compositor di provvedere al ridisegno della finestra. 13 Il Sistema Operativo OS X 10.8 Mountain Lion Quartz Extreme è il processore di accelerazione grafico (GPU) di Quartz Compositor. Quartz Compositor viene eseguito utilizzando il processore grafico (GPU), incapsulando ogni archivio di backup visualizzata in una mappa trama OpenGL o di superficie. La GPU compone quindi le superfici e le mappe per fornire l'immagine finale, la quale viene consegnata al suo frame buffer.8 La tecnologia associa ad ogni finestra una texture. Tutte le schede grafiche con accelerazione tridimensionale integrano al loro interno dei processori dedicati all'elaborazione delle texture. Quindi Quartz Extreme invece di svolgere le operazioni di movimento, ridimensionamento, ecc le demanda alla scheda grafica programmando opportunamente il processore grafico. Da test svolti a parità di computer si ottiene un raddoppio delle prestazioni nella gestione delle finestre utilizzando questa tecnologia. QuartzGL, rinominato Quartz 2D Extreme in Mac OS X 10.4 Tiger, è l'accelerazione GPU per l'API di Quartz 2D. QuickTime è un framework multimediale estensibile che consente di gestire vari formati di video, immagine, suono, immagini digitali. Da Mac OS X 10.6 Snow Leopard9 è disponibile una versione più recente, QuickTime X. QuickTime X (pronuncia QuickTime Ten10) comprende la visualizzazione, la conversione, la condivisione su YouTube, il video editing, la cattura di flussi video e audio, la registrazione dello schermo, la diretta streaming e molte altre funzionalità.11 8 http://developer.apple.com/graphicsimaging/overview.html 9 http://www.tuaw.com/2009/06/08/quicktime-x-leaps-forward-in-snow-leopard/ 10 http://www.roughlydrafted.com/2008/06/12/wwdc-2008-new-in-mac-os-x-snow-leopard/ 11 http://www.apple.com/macosx/refinements/enhancements-refinements.html#quicktime 14 Il Sistema Operativo OS X 10.8 Mountain Lion Inoltre, ha un registratore dello schermo per registrare ciò che è sul desktop. Tuttavia, per evitare la possibilità di contrabbando, l'utente non ha i permessi per registrare file riprodotti da DVD o anche contenuti acquistati da iTunes. Lo sviluppo di QuickTime fa un salto dalla versione 7 alla versione X (10). Tale salto sta ad indicare una sorta di “rottura” dalle versione precedenti, e a sottolineare che il prodotto è totalmente innovativo. QuickTime X è totalmente diverso dalle versioni precedenti, a partire dal fatto che adesso è disponibile come un framework Cocoa, sviluppato in Objective-C, e non ha più compatibilità con il set di API in C utilizzati da QuickTime 7. QuickTime X è stato completamente riscritto per l'attuazione moderni codec audio video a 64-bit. Esso è la combinazione di due tecnologie: QuickTime Kit Framework (QTKit) e QuickTime X Player. QTKit12 è usato da QuickTime Player per la visualizzazione dei file multimediali. QuickTime X non implementa tutte le funzionalità del precedente QuickTime così come alcuni dei codec. Quando QuickTime X tenta di operare con un codec a 32 bit o di eseguire un'operazione non supportata da QuickTime X, inizia un processo di supporto a 32 bit per eseguire l'operazione richiesta. Il sito Ars Technica ha rivelato che QuickTime X utilizza QuickTime 7.x via QTKit per eseguire vecchi codec che non hanno fatto il passaggio a 64 bit.13 12 QTKit Framework https://developer.apple.com/quicktime/index.html 13 http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/6 15 Il Sistema Operativo OS X 10.8 Mountain Lion Quando si seleziona uno standard impostazioni di esportazione HD, QuickTime Player sfrutta la codifica hardware dei video per prestazioni ottimali. QuickTime Player comprende il tasto Condividi per Messages, AirDrop e Mail.14 Core Audio è un basso livello di API per la gestione del suono. Esso comprende una implementazione del cross-platform nella library OpenAL.15 Nella documentazione Apple di Core Audio è scritto: "Durante la creazione della nuova architettura del Mac OS X, Apple decise di puntare a due obiettivi della gestione dell'audio. Il primo obbiettivo era una alta qualità dell'audio, la miglior resa audio mai provata dagli utenti Macintosh. Il secondo obiettivo era consentire agli sviluppatori di integrare la loro gestione dell'audio con la gestione MIDI."16 Core Audio separa totalmente la riproduzione dell'audio dalla sua gestione, consentendo al programmatore di gestire i flussi audio con il numero di campioni e la risoluzione che ritiene più appropriata, sarà poi compito del sottosistema audio adattare il flusso audio alle reali capacità dell'hardware. Core Audio permette di gestire i flussi audio in modo da consentire a un programma di accettare in ingresso l'audio generato da un altro programma. Il programma potrà a sua volta elaborare l'audio e poi inviare il flusso audio verso un terzo programma per ulteriori elaborazioni. Tutto questo viene eseguito in tempo reale e quindi consente agli utenti di utilizzare più programmi contemporaneamente per la realizzazione delle proprie musiche. 14 QuickTime X in OS X 10.8 http://www.apple.com/osx/whats-new/features.html#quicktime 15 http://developer.apple.com/documentation/MusicAudio/Conceptual/CoreAudioOverview/WhatsinCoreAudio/chapter_ 3_section_9.html 16 http://developer.apple.com/audio/coreaudio.html 16 Il Sistema Operativo OS X 10.8 Mountain Lion Audio Unit (AU) è un plug-in di sistema fornito nell’architettura di Core.17 E’ un insieme di interfacce di programmazione di servizi applicativi forniti dal sistema operativo per generare, elaborare, ricevere, o in altro modo manipolare flussi di audio in near-real-time con latenza minima. Code Audio fornisce delle API che vengono utilizzate dagli Audio Units per ricevere i flussi audio che vengono ricevuti, elaborati e trasmessi. Mac OS X utilizzando gli Audio Units è in grado di modificare la scala temporale del flusso audio, può convertirlo in uno stream da inviare via rete locale per esempio o può elaborarlo localmente con una serie di filtri che possono equalizzare il suono, applicare effetti come il riverbero, il ritardo o inserire strumenti audio sintetizzati. Gli AU sono utilizzati da programmi Apple come GarageBand, Soundtrack, Logic Express, Logic Pro e Final Cut Pro oltre che da molti programmi di terze parti.18 Core Image è una tecnologia che viene utilizzata dal sotto sistema grafico Quartz Extreme.19 Questa tecnologia consente di utilizzare la scheda grafica per l'elaborazione di effetti grafici sgravando il processore dall'elaborazione degli stessi.20 Nel caso in cui il computer non sia dotato di una scheda grafica con processore grafico compatibile o moderno, Core Image utilizzerà l'unità AltiVec del processore per eseguire le elaborazioni grafiche. In caso di sistemi SMP Core Image è in grado di suddividere il carico di lavoro tra i vari processori. 17 http://developer.apple.com/documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/ 18 http://developer.apple.com/documentation/MusicAudio/Reference/CoreAudio/audio_units/chapter_5_section_1.html 19 http://developer.apple.com/macosx/coreimage.html 20 http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_concepts/ci_con cepts.html#//apple_ref/doc/uid/TP30001185-CH202-BCIHDIEG 17 Il Sistema Operativo OS X 10.8 Mountain Lion Core Video funziona in congiunzione con Core Image ed è ottimizzato per utilizzare il codec H.264. Come Core Image, consente di eseguire delle trasformazioni e delle manipolazioni grafiche, ma invece di agire sulle immagini agisce sulle animazioni in tempo reale. Al fine di garantire una riproduzione fluida, Core Video utilizza un thread a priorità alta per mantenere il suo frame buffer. Questo il link di visualizzazione funziona in modo indipendente dall'applicazione che invoca la riproduzione video, e compensa le aliquote diverse di visualizzazione di aggiornamento e la latenza.21 Queste tecnologie dipendono molto dalle prestazioni della scheda grafica e possono sgravare molto il carico del processore dato che vengono utilizzate dalla tecnologia Quartz e di conseguenza tutta l'interfaccia grafica si avvantaggerà delle tecnologie Core Image e Core Video. Insieme alla tecnologia Core Audio formano il nucleo del Mac OS X dedicato alla gestione dei flussi multimediali. Sia QuickTime X che QuickTime 7 dipendono da Core Video.22 Pixlet è un codec video che utilizza la compressione “wavelet”23 ed è nato per consentire la visualizzazione di animazioni di alta qualità a schermo intero in tempo reale con un flusso di dati ridotto. Esso non è stato sviluppato per la trasmissione video ma per l'elaborazione negli studi di registrazione. 21 http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/CoreVideo/CVProg_Concepts/C VProg_Concepts.html#//apple_ref/doc/uid/TP40001536-CH202-BABJDFHJ 22 http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/CoreVideo/CVProg_Intro/CVProg _Intro.html 23 Una wavelet è la rappresentazione di un segnale mediante l'uso di una forma d'onda oscillante di lunghezza finita o a decadimento rapido (nota come wavelet madre). Questa forma d'onda è scalata e traslata per adattarsi al segnale in ingresso. 18 Il Sistema Operativo OS X 10.8 Mountain Lion Questo codec punta a mantenere la massima qualità e non ad ottenere la massima compressione. Normalmente consente un rapporto di compressione di 20-25:1.24 Core Animation è un’API per la visualizzazione dei dati. Essa può creare un'animazione per qualunque oggetto che sia visibile, e fornisce un accesso unificato a Core Image, Core Video e altre tecnologie Quartz. Come altri modelli grafici, Core Animation può sfruttare l'accelerazione con un processore grafico (GPU).25 Le animazioni vengono eseguite in un thread indipendente dal programma, consentendo così l'esecuzione di processi simultanea a Core Animation. In questo modo le performance dell'applicazione non vengono diminuite, ed è possibile controllare, interrompere, invertire e ricostruire le animazioni stesse. Questo metodo era già disponibile in precedenti versioni di Mac OS X, ma le loro API non erano pubbliche, costringendo così gli sviluppatori di terze parti a tentare l'imitazione (a volte riuscita, altre no) delle belle animazioni Apple.26 Uno degli esempi più evidenti di Core Animation, è iChat, l'istant messenger di Apple. Le animazioni vengono utilizzate per effettivamente "buttare dentro" gli amici che hanno effettuato l'accesso nella tua lista contatti. OpenAL (Open Library Audio) è un’API per la piattaforma audio. È stata progettata per il rendering efficiente di audio posizionale a tre dimensioni.. Il suo stile e le convenzioni API deliberatamente assomigliano a quelle di OpenGL. 24 http://en.wikipedia.org/wiki/Pixlet 25 http://www.apple.com/it/macosx/technology/coreanimation.html 26 http://developer.apple.com/graphicsimaging/coreanimation/ 19 Il Sistema Operativo OS X 10.8 Mountain Lion OpenGL (Open Graphics Library) è una specifica che definisce un’API per più linguaggi e per più piattaforme per scrivere applicazioni che producono computer grafica 2D e 3D. L'interfaccia consiste in circa 250 diverse chiamate di funzione che si possono usare per disegnare complesse scene tridimensionali a partire da semplici primitive. Il framework AV Foundation fornisce servizi per l'acquisizione, la riproduzione, il controllo, la modifica e la ricodifica dei media audiovisivi basati sul tempo. Il framework include molte classi Objective-C, con la classe di base AVAsset; questa classe presenta un modello uniforme e un’interfaccia di controllo per tutte le forme e i font dei media audio-visivi. I servizi offerti da questo quadro sono i seguenti:27 Film o di acquisizione audio Film o riproduzione audio, compresa la sincronizzazione precisa e audio panning Media editing e gestione pista Supporto delle attività e la gestione dei metadati File di controllo audio (ad esempio, il formato dei dati, frequenza di campionamento e il numero di canali) Per la maggior parte delle registazioni audio e la loro riproduzione, è possibile utilizzare il AVAudioPlayer e le classi AVAudioRecorder. AV Foundation è il framework raccomandato per tutti i nuovi sviluppi che coinvolgono i media audiovisivi basati sul tempo ed è anche raccomandato per la transizione da applicazioni esistenti basate su QuickTime o QTKit.28 27 http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/MediaLa yer/MediaLayer.html#//apple_ref/doc/uid/TP40001067-CH273-SW1 28 http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/MediaLa yer/MediaLayer.html#//apple_ref/doc/uid/TP40001067-CH273-SW1 20 Il Sistema Operativo OS X 10.8 Mountain Lion 1.2 Core Services Core Services è un gruppo di API che forniscono i servizi essenziali per le applicazioni, non avendo però alcuna iterazione diretta con la GUI. Figura 1.2 Core Services è composto da più componenti, tra cui: Address Book Quick Look Social Security Webkit Core Data Core Foundation Foundation 21 Il Sistema Operativo OS X 10.8 Mountain Lion Address Book, o Contatti in italiano, è un programma nato per gestire i contatti dell'utente. Esso comprende varie funzionalità di sincronizzazione e si integra con le altre applicazioni e funzionalità di OS X.29 Quick Look consente ad applicazioni come Spotlight e Finder di visualizzare le immagini in miniatura e l’anteprima dei documenti. Se il formato dei documenti è diverso dai tipi supportati., è necessario fornire Quick Look di un generatore 30per questi formati. Social è un framework introdotto in OS X v10.8, e consente di integrare servizi dei social network supportate, fornendo un modello per la creazione di richieste HTTP e un'interfaccia generalizzata per la pubblicazione di richieste da parte dell'utente. È inoltre possibile utilizzare il framework Social per recuperare le informazioni per l'integrazione degli account dei social network in “app” esterne.31 Security è il framework sulla sicurezza che implementa uno strato di servizi di alto livello per semplificare le soluzioni sulla sicurezza. Questi servizi di alto livello forniscono una conveniente astrazione e rendono possibile sia alla Apple sia a terze parti di implementare nuove caratteristiche di sicurezza senza dover modificare le linee di codice. La sicurezza in OS X si basa su diverse tecnologie, tra cui BSD e Kerberos, ed aggiunge le proprie caratteristiche a tali tecnologie.32 29 http://developer.apple.com/library/mac/documentation/UserExperience/Reference/AddressBook/ObjC_classic/_index. html#//apple_ref/doc/uid/20001692 30 I Generatori sono plug-in che convertono i documenti dal loro formato nativo in un formato Quick Look in modo da poter essere visualizzato come miniatura o anteprima. 31 http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/CoreServ icesLayer/CoreServicesLayer.html#//apple_ref/doc/uid/TP40001067-CH270-TPXREF130 32 http://developer.apple.com/library/mac/#documentation/Security/Conceptual/Security_Overview/Introduction/Introdu ction.html#//apple_ref/doc/uid/TP30000976 22 Il Sistema Operativo OS X 10.8 Mountain Lion OS X fornisce interfacce di alto livello per le seguenti caratteristiche: Autenticazione Utente Certificato, Key e Trust Services Servizi di autorizzazione Secure Transport Servizi Keychain Security Transforms è una tecnologia che è stata introdotta in OS X v10.7 dopo il grave errore che fu commesso33, e fornisce un contesto universale per tutti i lavori di crittografia. Un'unità di crittografia a trasformazioni di sicurezza, noto anche come una trasformazione, può essere utilizzato per eseguire attività quali la crittografia, decrittografia, firma, la verifica, la digestione e la codifica. È inoltre possibile creare trasformazioni personalizzate. Trasformazioni si basano su GCD per definire un modello di flusso di dati per l'elaborazione dei dati che consente un throughput elevato su macchine multicore.34 WebKit è un framework per applicazioni ed è il motore di Safari e di altre applicazioni come Google Chrome. Esso permette agli sviluppatori di terze parti di includere con facilità nelle loro applicazioni molte delle funzioni proprie di Safari. 33 http://news.swzone.it/news/32283_Grave_bug_di_sicurezza_in_OS_X_Lion_10.7.3.html http://software.tuttogratis.it/news/mac-os-x-lion-bug-di-sicurezza-consente-di-cambiare-la-passwordutente/P102093/ http://www.hwfiles.it/news/una-falla-in-mac-os-x-107-lion-permette-di-cambiare-la-password-dellutente_38584.html 34 http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/CoreServ icesLayer/CoreServicesLayer.html#//apple_ref/doc/uid/TP40001067-CH270-TPXREF130 23 Il Sistema Operativo OS X 10.8 Mountain Lion WebKit è un progetto open source che nasce dalla combinazione di componenti del sistema grafico KDE e di tecnologie Apple. L'API in Objective C di WebKit può interagire con un server web, richiamare e visualizzare le pagine web, scaricare i file e gestire i plugin. WebKit include due framework di basso livello: WebCore, un parser HTML e un renderer basato su KHTML, e JavaScriptCore, un motore JavaScript basato su KJS. Core Data sono delle API Cocoa. Lo scopo di Core Data è permettere lo sviluppo di applicazioni che trattano i dati secondo una organizzazione Model-View-Controller senza doversi occupare di tutti gli aspetti implementativi derivati da questa scelta progettuale. Questi dati possono essere serializzati e salvati come XML, binario e SQLite. I dati vengono manipolati utilizzando degli oggetti ad alto livello che rappresentano le relazioni e gli attributi. Il framework gestisce la serializzazione, gestisce il ciclo di vita dei singoli oggetti garantendone la persistenza.35 Core Data si può interfacciare direttamente con SQLite slegando il programmatore dalla gestione a basso livello del database e dell'SQL. Internamente si appoggia per la gestione degli oggetti al modello entità relazione. Core Data si occupa della gestione su disco, della gestione dei cambiamenti, della minimizzazione della memoria occupata e delle query su disco. Il framework è molto utile per gestire strutture dati complesse, dove una buona organizzazione delle informazioni è essenziale. Core Data offre un sistema radicalmente diverso di gestire i dati: invece di mantenere un puntatore ad ogni oggetto a cui si è interessati, si esegue una query al database per ottenere tutti gli oggetti di una determinata classe, e si opera su di essi. 35 http://developer.apple.com/macosx/coredata.html 24 Il Sistema Operativo OS X 10.8 Mountain Lion Inoltre fornisce anche i metodi accessori per modificare le variabili d'istanza di un'entità attraverso il Key Value Coding, cioè basandosi sul nome della variabile. I Framework Foundation e Core Foundation sono essenziali per la maggior parte dei software sviluppati per OS X. Gli obiettivi di base per entrambi i framework sono gli stessi: Definire il comportamento di base per gli oggetti e introdurre convenzioni coerenti per la mutabilità dell’oggetto, oggetto per l’archiviazione, le notifiche, e comportamenti simili. Definire i tipi di oggetti di base che rappresentano stringhe, numeri, date, dati, collezioni, e così via. Sostenere l'internazionalizzazione con la tecnologia Bundle e per le stringhe Unicode. Sostenere la persistenza degli oggetti. Fornire classi di utilità per gli enti di accesso, l’astrazione del sistema e i servizi ai livelli più bassi del sistema, compresi le prote, i threads, i processi, i cicli di esecuzione, i file system e le pipes. La differenza tra Fondazione e Core Foundation è il linguaggio di programmazione con cui vengono sviluppati ed utilizzati. Foundation è un framework Objective-C ed è destinato ad essere utilizzato con tutti gli altri framework Objective-C che dichiarano i metodi che assumono tipi di classe Foundation come parametri o valori di ritorno che sono tipi di classe della Foundation. Insieme al AppKit e Core Data framework, Foundation è considerato un framework fondamentale per lo sviluppo delle applicazioni. 25 Il Sistema Operativo OS X 10.8 Mountain Lion Core Foundation36 (CF), invece, implementa interfacce di programmazione C-based, ed è destinato ad essere utilizzato con altri framework C-base, come Core Graphics. Anche se è possibile utilizzare gli oggetti di base della Fondazione e chiamare le funzioni di base della Fondazione in progetti Objective-C, raramente vi è una ragione seria per farlo. Nella sua implementazione, Foundation si basa su Core Foundation. Ma anche se è implementato in C, la progettazione dell’interfacce di Core Foundation è più simile all’implementazione Objects-C. Foundation and Core Foundation forniscono tipi di dati fondamentali e le funzioni per la gestione dei dati, tra cui i seguenti: Collezioni Pacchetti e plug-in Stringhe Grezzi blocchi di dati Date e orari Preferenze Streams URL Dati XML Locale informazioni Esegui loop Porte e prese 36 http://developer.apple.com/library/mac/#releasenotes/CoreFoundation/CoreFoundation.html#//apple_ref/doc/uid/TP40 000994 26 Il Sistema Operativo OS X 10.8 Mountain Lion A partire da OS X v10.8, il framework Foundation offre le seguenti caratteristiche e miglioramenti: Centro Notifica che interagisce con il nuovo “NSUserNotification” 37 nuove classi NSUserNotificationCenter. La possibilità di verificare se un utente è connesso in iCloud attraverso i miglioramenti della classe “NSFileManager”38. La creazione di stringhe UUID (Universally Unique Identifier) con la nuova classe “NSUUID”39. Esecuzione di script forniti dall'utente (al di fuori dell’applicazione sandbox) con la nuova classe “NSUserScriptTask”40. La semplificazione della comunicazione interprocesso (IPC) tra le applicazioni, i servizi XPC, i daemon, e gli agenti con la classe “NSXPCConnection”41. L’avanzata localizzazione per la formattazione dei numeri con i miglioramenti alla classe “NSString”42. Supporto per l’azzeramento dei riferimenti deboli con miglioramenti alle classi “NSMapTable”43, “NSHashTable”44 e “NSPointerArray”45. 37 http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/R eference.html#//apple_ref/occ/cl/NSUserNotification 38 http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/R eference/Reference.html#//apple_ref/occ/cl/NSFileManager 39 http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/Reference/Reference.ht ml#//apple_ref/occ/cl/NSUUID 40 http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserScriptTask_Class/Reference/Ref erence.html#//apple_ref/occ/cl/NSUserScriptTask 41 http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSXPCConnection_reference/translated _content/NSXPCConnection.html#//apple_ref/occ/cl/NSXPCConnection 42 http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Referen ce/NSString.html#//apple_ref/occ/cl/NSString 43 http://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSMapTable_class/Reference/NSMapTable. html#//apple_ref/occ/cl/NSMapTable 27 Il Sistema Operativo OS X 10.8 Mountain Lion Core Text è un’API di stile contenuto in Core Foundation. Esso sostituisce le capacità di rendering di testo di QuickDraw e il framework ATSUI.46 Secondo Apple, Core Text è "progettata per elevate prestazioni e facilità d'uso" e la sua API layout è "semplice, coerente e strettamente integrato con Core Foundation, Core Graphics, e Cocoa".47 Quelli elencati sono solo alcuni dei tantissimi nuovi frameworks introdotti in Core Services.48 44 http://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSHashTable_class/Introduction/Introductio n.html#//apple_ref/occ/cl/NSHashTable 45 http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSPointerArray_Class/I ntroduction/Introduction.html#//apple_ref/occ/cl/NSPointerArray 46 http://en.wikipedia.org/wiki/Core_Text 47 http://developer.apple.com/mac/library/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introdu ction/Introduction.html 48 Per ulteriori informazioni: http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/CoreServic esLayer/CoreServicesLayer.html#//apple_ref/doc/uid/TP40001067-CH270-SW4 28 Il Sistema Operativo OS X 10.8 Mountain Lion Capitolo 2 API & GUI Il primo strato del Sistema Operativo comprende la GUI e l’API. La GUI (Graphical User Interface) è un tipo di Interfaccia Utente che consente all’utente di interagire col Sistema Operativo attraverso oggetti grafici. L’API (Application Programming Interface) è un protocollo che consente al programmatore di interagire con un’interfaccia grafica, semplificando così le operazioni di scrittura e riuso del codice. 2.1 Application Programming Interface Col termine API si intendono principalmente le librerie software disponibili di un certo linguaggio di programmazione. Lo scopo è quello di ottenere un'astrazione, sia tra l'hardware e il programmatore sia tra i vari livelli del Sistema Operativo. Una buona API fornisce un livello di astrazione che evita al programmatore di sapere come funzionano le API che si trovano ad un livello più basso, ciò avviene per la tecnica di “riuso del codice”: il programmatore non deve riscrivere ogni volta alcune funzioni, ma può richiamarle tramite le librerie. 29 Il Sistema Operativo OS X 10.8 Mountain Lion Si ottiene così che il lavoro di programmazione viene ampiamente semplificato e permette al programmatore di riprogettare o migliorare le funzioni all'interno dell'API senza cambiare il codice che si affida ad essa. Esistono vari tipi di API, tra cui49: • L'interfaccia di chiamate al BIOS del PC • L'API Java 2 Enterprise Edition Java EE • Le API Carbon e Cocoa per il Macintosh OS • API e Web Services, il caso Istat • Java APIs for Integraed Networks (JAIN) Poiché esistono molte varianti di API, nel 1985 è stato creato un progetto finalizzato alla creazione di uno standard. La famiglia che racchiude questi standard prende il nome di POSIX, acronimo di Portable Operating System Interface for Unix, il cui nome è stato ideato da Richard Stallman dopo la richiesta da parte dell'IEEE di un nome di facile memorizzazione. Col termine POSIX si intendono quegli standard definiti dall’IEEE denominati formalmente IEEE 1003, il cui nome nello standard internazionale è ISO/IEC 994550. Il compito dello standard POSIX è quello di definire alcuni concetti base che vanno seguiti durante la realizzazione del Sistema Operativo. Questo insieme di regole è racchiuso in 15 documenti. Siccome l'IEEE richiedeva dei costi elevati per fornire la documentazione POSIX e non ne permetteva la pubblicazione on-line, è emerso uno standard aperto, chiamato "Single UNIX Specification", gestito da The Open Group. 49 http://it.wikipedia.org/wiki/Application_programming_interface#Esempi_di_API 50 http://it.wikipedia.org/wiki/Posix 30 Il Sistema Operativo OS X 10.8 Mountain Lion In MAC OS X, il livello che racchiude le API comprende molti sottolivelli51: • BSD • Carbon • Classic • Cocoa • Java APIs Le API comunicano con il Kernel Mac attraverso lo standard POSIX situato nel BSD. Carbon52 era uno dei 5 ambienti di programmazione messi a disposizione da Mac Il suo compito principale era quello di rendere compatibili programmi scritti per versioni antecedenti di Mac OS X con le nuove versioni attraverso piccole modifiche. Le API erano formate da header file per il linguaggio C e da librerie dinamiche che implementavano le funzioni. Le implementazioni delle librerie erano differenti a seconda dei sistemi operativi, ma questo non creava problemi all'eseguibile, dato che per esso il comportamento è identico. In OS X 10.8 Mountain Lion Carbon è stato abbandonato, e le sue librerie sono state spostate in Cocoa. Un altro dei 5 ambienti di programmazione era Classic. Classic aveva compito di emulare all’interno del Sistema Operativo Mac OS X la sua versione antecedente Mac OS 9, in modo da consentire alla vecchie applicazioni che non utilizzavano le librerie Carbon, di continuare a funzionare. Il sistema Classic è stato ufficialmente eliminato con la versione Mac OS X 10.5 Leopard, inoltre non è mai stato disponibile per computer dotati di processori Intel. 51 52 Vedi Figura I.1, pag 9 https://developer.apple.com/library/mac/navigation/index.html?filter=carbon 31 Il Sistema Operativo OS X 10.8 Mountain Lion Per quanto riguarda la Macchina Virtuale Java o JVM (Java Virtual Machine), le API Java53 raccolgono una gran quantità di componenti disponibili per scrivere applicazioni di qualsiasi genere. Per questo motivo la piattaforma Java è disponibile in tre configurazioni a seconda dell'uso che se ne vuole fare: • Standard Edition. Fornisce API per le esigenze più comuni, che permette di scrivere applicazioni stand-alone, applicazioni client e server in un contesto di reti di computer, applicazioni per accesso a database, applicazioni per il calcolo scientifico e di altro tipo. • Enterprise Edition. Permette di scrivere applicazioni distribuite. • Micro Edition. Permette di scrivere applicazioni per i terminali mobili e, più in generale, per i dispositivi dotati di poche risorse computazionali (telefoni cellulari, palmari, smart cards, ed altri). La JVM è contenuta nel Java SE Runtime Environment, il quale contiene anche le librerie standard (API Java) e un launcher per le applicazioni Java, che prende il nome di JDK (Java Development Kit). Il JDK costituisce un vero e proprio ambiente di sviluppo software e contiene tool di sviluppo (compilatori e/o debugger). Esso è fornito insieme al JRE (Java Runtime Environment), che è invece l’ambiente di esecuzione per programmi scritti in linguaggio Java. Nella versione di OS X 10.8 Mountain Lion anche la JVM e tutti i suoi componenti sono nativamente rimossi dal Sistema Operativo.54 E’ tuttavia possibile aggiungerli in un secondo momento, a seconda delle necessità. 53 http://it.wikipedia.org/wiki/Piattaforma_Java#Le_API_Java 54 http://developer.apple.com/library/mac/#technotes/tn2002/tn2110.html#//apple_ref/doc/uid/DTS10003202 32 Il Sistema Operativo OS X 10.8 Mountain Lion L’ultimo ambiente rimasto da esaminare è Cocoa55. Da quanto già lasciato intendere prima, sia Carbon che Classic sono stati abbandonati a vantaggio di Cocoa. Cocoa è l'ambiente di programmazione orientato agli oggetti per il sistema operativo Mac OS X. Supporta vari tipi di linguaggi di programmazione: l'Objective C, l'AppleScript, il C++, l'Objective C++, Java, il Perl, il Python e Ruby. L’ambiente di sviluppo per i primi linguaggi è Xcode (ex Project Builder). Per il Perl e il Python, che sono linguaggi minori, è presente il bridge PyObjC e Ruby è utilizzabile tramite RubyCocoa. Per gli utenti finali le applicazioni Cocoa sono facilmente riconoscibili dovendo aderire alle linee guida stabilite dall'Apple. L'ambiente Cocoa include molti servizi, ed essendo Cocoa un ambiente orientato agli oggetti, questi servizi vengono ereditati dalle applicazioni che si appoggiano a Cocoa. Il design di Cocoa è stato sempre considerato uno dei suoi punti di forza, fino al punto che le soluzioni architetturali che ha adottato hanno ispirato molti Design Patterns formalizzati. Un’altra delle parti di Cocoa è Cocoa Touch, ossia quella parte che include il riconoscimento dei gesti, l'animazione e una diversa libreria interfaccia-utente, ma è sviluppata sul sistema operativo iOS e sui dispositivi che lo supportano come l' iPhone, l'iPod Touch e l' iPad . Cocoa continua la stirpe di framework diversi (in primo luogo la App Kit e Foundation Kit) da NeXTSTEP e OpenStep, che sono ambienti di programmazione sviluppati da NeXT negli anni 1980 e 1990. La Apple acquisì la NeXT nel dicembre 1996, e cominciò a lavorare sul Sistema Operativo Rhapsody che avrebbe dovuto essere il diretto successore di OpenStep. 55 http://developer.apple.com/library/mac/navigation/#section=Frameworks&topic=Cocoa%20Layer 33 Il Sistema Operativo OS X 10.8 Mountain Lion OpenStep è un’API orientata agli oggetti, OPENSTEP (tutto in maiuscolo) è una specifica implementazione di l'API OpenStep sviluppato da NeXT. Le librerie software fornite con OPENSTEP sono un superset delle specifiche di OpenStep originale. La base di librerie di OpenStep prese il nome di Yellow Box . Rhapsody evolse in Mac OS X, e la Yellow Box divenne Cocoa. Di conseguenza, le classi di Cocoa che iniziano con la sigla "NS" sono le dirette discentendi di OpenStep. Una caratteristica peculiare dell'ambiente Cocoa è la sua possibilità di gestione della memoria allocata dinamicamente. La classe NSObject, da cui derivano la maggior parte delle classi di Cocoa, implementa uno schema di reference counting per la gestione della memoria. Col termine reference counting si intende una tecnica di memorizzazione di numero di riferimenti o puntatori ad un dato oggetto sia nella memoria virtuale che fisica. Ad essa è associata anche la tecnica del garbage collection che è un algoritmo che utilizza questa tecnica di memorizazione per deallocare oggetti che non sono più referenziati. Nel 2011, il compilatore LLVM (Low Level Virtual Machine) introduce ARC (Automatic Reference Counting), che sostituisce il convenzionale garbage collector effettuando un’analisi statica in Objective-C di codice sorgente e l'inserimento nel trattenere e rilasciare i messaggi, se necessario. Cocoa è composto da tre librerie di oggetti Objective-C chiamate frameworks56 . I Frameworks sono molto simili a librerie condivise, un oggetto compilato può essere caricato dinamicamente nello spazio di indirizzi di un programma in fase di esecuzione, ma i frameworks aggiungono le risorse associate, i file di intestazione e la documentazione. 56 http://en.wikipedia.org/wiki/Cocoa_(API)#Main_frameworks 34 Il Sistema Operativo OS X 10.8 Mountain Lion I frameworks di Cocoa sono implementati come un tipo di pacchetto di applicazione, il quale contiene gli elementi in posizioni standard, ad esempio: • Foundation Kit , o più comunemente soltanto Foundation, il quale compare la prima volta in OpenStep. In Mac OS X, si basa sul Core Foundation. Esso è una generica libreria orientata agli oggetti che fornisce le stringhe e i valori di manipolazione, containers and iteration, il calcolo distribuito,i run loop, e altre funzioni che non sono direttamente legate alla GUI. Usano il prefiso “NS” ereditato da NeXT.57 • Application Kit or AppKit è uno dei framework Cocoa principali, discende direttamente dal kit originale di applicazioni di NeXTSTEP. Fornisce funzionalità e le API associate per le applicazioni, inclusi gli oggetti per le GUI, meccanismi di gestione degli eventi, servizi applicativi, e disegno e strutture di composizione delle immagini. AppKit è costruito sulla base di Foundation, e utilizza lo stesso prefisso “NS”.58 • Core Data è il framework di persistenza dell'oggetto incluso in Foundation e Cocoa e si trova nella libreria Cocoa.h. Una parte fondamentale dell'architettura di Cocoa è il modello MVC (Model-ViewController)59. Questo è organizzato secondo linee convenzionali di un framework applicativo, ma si basa anche sul PDF modello di disegno fornito da Quartz. Questo permette la creazione del contenuto del disegno personalizzato utilizzando PostScript, come i comandi di disegno, e permette anche il supporto automatico della stampante e così via. Dal momento che il framework Cocoa gestisce tutto il ritaglio, lo scorrimento, il ridimensionamento e altre funzioni relative al disegno grafico, il programmatore è libero dall’implementazione delle infrastrutture di base e può concentrarsi solo sull’aspetto dei contenuti di un'applicazione. 57 Vedi Capitolo 1, pag 24 Per chi volesse approfondire: http://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html#//apple_ref/doc/uid/TP30000741 58 59 http://en.wikipedia.org/wiki/Cocoa_(API)#Model-view-controller 35 Il Sistema Operativo OS X 10.8 Mountain Lion Come già accennato, Cocoa usa la fisosofia progettuale del MVC. MVC è composto da tre parti interagenti tra di loro: • Model rappresentano dati grezzi, ad esempio documenti, impostazioni, file od oggetti in memoria. • View sono rappresentazioni visive dei dati nel modello. • Controller contiene la logica che collega i modelli per le loro view, e controlla lo stato per mantenerli sincronizzati. Il design di Cocoa è una rigorosa applicazione dei principi MVC. In OpenStep, la maggior parte delle classi che erano di alto livello erano classi View (contenute in AppKit) oppure erano una serie di classi di livello relativamente basso di Model note come NSString. Rispetto ad analoghi sistemi di MVC, OpenStep mancava un forte divisione interna. Durante la transizione a Cocoa, il livello di Model è stato ampliato enormemente, introducendo una serie di classi per fornire funzionalità comuni alle applicazioni desktop. Ha subito varie modifiche ed amplificazioni, fino a giungere alla versione OS X 10.8. In Mac OS X 10.3, Apple ha introdotto la famiglia di classi NSController, che prevedono il comportamento predefinito per il livello di Controller. In Mac OS X 10.4, Apple ha esteso questa fondazione ulteriormente introducendo il framework Core Data, che standardizza il rilevamento delle modifiche e la persistenza nel livello di modello. Grazie al supporto quadro di riferimento per tutti i tre strati MVC, l'obiettivo di Apple è quello di ridurre la quantità di boilerplate o codice "collante" che gli sviluppatori devono scrivere, liberando risorse per passare il tempo su applicazioni specifiche caratteristiche. 36 Il Sistema Operativo OS X 10.8 Mountain Lion Di seguito si elenca nvece una lista di differenze principali tra la versione Mac OS X 10.7 Lion e OS X 10.860: Accelerate Accounts (Aggiunta) AddressBook AGL AppKit AppleShareClientCore ApplicationServices AudioToolbox AudioUnit AudioVideoBridging (Aggiunta) AVFoundation CalendarStore Carbon CFNetwork (Aggiunta) CoreAudio CoreData CoreFoundation CoreGraphics (Aggiunta) CoreLocation CoreMedia CoreMediaIO CoreServices CoreText (Aggiunta) CoreVideo DiskArbitration 60 http://developer.apple.com/library/mac/#releasenotes/General/APIDiffsMacOSX10_8/index.html#//apple_ref/doc/uid/ TP40011748 37 Il Sistema Operativo OS X 10.8 Mountain Lion EventKit (Aggiunta) Foundation GameKit (Aggiunta) GLKit (Aggiunta) GLUT GSS ImageCaptureCore ImageIO (Aggiunta) IOBluetooth IOBluetoothUI IOKit JavaFrameEmbedding JavaScriptCore Kerberos Kernel LDAP (Aggiunta) NetFS OpenCL OpenDirectory OpenGL Python QTKit Quartz QuartzCore Ruby RubyCocoa SceneKit (Aggiunta) Security SecurityInterface 38 Il Sistema Operativo OS X 10.8 Mountain Lion ServerNotification Social (Aggiunta) StoreKit SystemConfiguration vecLib VideoToolbox (Aggiunta) WebKit XgridFoundation (Rimossa) 2.2 Graphical User Interface La GUI (Graphical User Interface) è un tipo di Interfaccia Utente che consente all’utente di interagire col Sistema Operativo attraverso oggetti grafici. La GUI usata dalla Apple prende il nome di “Aqua”. Aqua prende il suo nome dall’effetto “acquatico” che assume. I pulsanti sono principalmente di colore blu traslucido e l'interfaccia grafica fa un ampio utilizzo di semitrasparenze o di superfici che sembrano traslucide. Aqua originariamente nasce con il programma iMovie 261. Visto il successo riscosso dal tema Apple decise di renderlo il tema standard del Mac OS X Public Beta che venne presentato nell'autunno del 2000. Il tema fu molto apprezzato e quindi rimase come tema standard del Mac OS X. Le due caratteristiche principali di Aqua sono i pulsanti traslucidi usati per controllare le finestre (colorati rosso, giallo e verde) e il Dock utilizzato per facilitare la navigazione tra le applicazioni. 61 http://www.apple.com/pr/library/2000/jul/19imovie.html 39 Il Sistema Operativo OS X 10.8 Mountain Lion Figura 2.1 Il disegno del tema originale di Aqua è ispirato ai case traslucidi e semitrasparenti dei primi iMac e dei Power Macintosh G3. Quando Apple, nel 2003-2004 decise di abbandonare i case semitrasparenti e di optare invece per l'utilizzo di alluminio anodizzato (come negli Apple Cinema Display) o in plastica bianca, fu aggiornato anche il tema, incorporando un look più opaco e metallizzato e dando meno peso a trasparenze e sfondi rigati. 40 Il Sistema Operativo OS X 10.8 Mountain Lion Vi sono due stili di presentazione delle finestre inclusi in Aqua: Standard e Brushed Metal. Lo stile Standard contiene bottoni traslucenti, come se fossero fatti di vetro. I pulsanti vengono disposti nella parte superiore della finestra. Lo stile Brushed Metal utilizza una varietà del grigio che ricorda il case del Power Mac G5, i pulsanti sono disposti dentro la finestra. Inoltre a differenza dello stile precedente molti pulsanti sembrano fatti di plastica avendo un colore meno luminoso rispetto ai tasti dello stile Standard. Con l'uscita di Mac OS X 10.5 Leopard si è visto l'abbandono da parte di Apple dello stile Brushed Metal, a favore del Solid Metal, già visto dagli utenti in iTunes a partire dalla versione 5.0 e resterà tale fino alla versione 10.8 Mountain Lion. Aqua è gestito da Quartz Compositor, il motore alla base della rappresentazione grafica di tutti gli elementi sullo schermo di Mac OS X. Aqua viene utilizzato da tutte le applicazioni native per Mac OS X. Per scrivere un’interfaccia compatibile con Aqua, la Apple mette a disposizione un documento, con le linee guida per acquisire familiarità col proprio ambiente di sviluppo e garantire a qualsiasi applicazione un’interfaccia che sia “piacevole, snella, semplice e adattabile.”62 Tutti gli elementi dell'interfaccia utente standard e le icone del sistema sono disponibili in Interface Builder. 62 http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/Intro/Intro.htm l 41 Il Sistema Operativo OS X 10.8 Mountain Lion Interface Builder, che è un editor di per interfacce grafiche in Xcode, permette agli sviluppatori che usano Cocoa di disegnare interfacce grafiche per le applicazioni usando uno strumento grafico, senza la necessità di scrivere decine di righe di codice. L'interfaccia risultante è salvata in un file .nib (abbreviazione di NeXT Interface Builder), il quale fa dedurre che apparteneva anch’egli al gruppo NeXT. Xcode è un ambiente di sviluppo integrato (Integrated Development Environment, IDE) creato per agevolare lo sviluppo di software per Mac OS X e iOS. Interface Builder è la sua parte che si occupa della grafica di un’applicazione, Xcode invece aiuta a sviluppare tutto il codice sorgente. Fa anch’egli parte dell’eredità NeXT, dove aveva il nome di Project Builder. Xcode include GCC (GNU Compiler Collection), che è il compilatore per linguaggi codice C, C++, Objective C/C++ e Java. Supporta anche il framework Cocoa, oltre ad altri. Una delle caratteristiche tecnologicamente più avanzate di Xcode è che supporta la distribuzione in rete del lavoro di compilazione. Usando Bonjour e Xgrid è in grado di compilare un progetto su più computer riducendo i tempi. Supporta la compilazione incrementale, ed è in grado di compilare il codice mentre viene scritto, in modo da ridurre il tempo di compilazione. Xgrid consente lo sviluppo di applicazioni parallele che distribuiscono le operazioni da eseguire su più macchine collegate da una rete telematica riducendo i tempi necessari all'elaborazione. E’ stato rimosso nella versione OS X 10.8 Mountain Lion. Bonjour è una tecnologia generica nata per individuare automaticamente la presenza di servizi nelle LAN. Questa tecnologia viene usata in modo massiccio per consentire agli utenti di installare una rete senza bisogno di configurarla. 42 Il Sistema Operativo OS X 10.8 Mountain Lion Altre tecnologie appartenenti alla GUI contenute in Mac Os X sono: • Inkwell • Exposé • Apple Icon Image • Etichette • Smart Folder • Spotlight • Finder • Launchpad Inkwell è la tecnologia di riconoscimento della scrittura che è inclusa nei Mac che riconosce la scrittura. Inkwell è basato sulla tecnologia del PDA Apple Newton chiamata ‘Rosetta’ (emulatore rimosso dalla versione 10.7 Lion). Quando è attivo appare come un foglio semi-trasparente sul quale l'utente vede la sua apparire la sua scrittura. Quando l'utente smette di scrivere, la sua scrittura viene riconosciuta da Inkwell e inclusa nell'applicazione attiva (nel punto in cui è collocato il cursore), come se l'utente avesse semplicemente scritto le parole con la tastiera. L’utente può anche impostare Inkwell per non riconoscere la propria scrittura, ma includere direttamente nell'applicazione il suo scritto a mano. Nella versione 10.8 Mountain Lion è stata rinominata semplicemente ‘Ink’. Exposé è un tool per organizzare le finestre che consente all'utente di vedere, in modo molto rapido, tutte le finestre (o un insieme particolare) senza la necessità di doverle scorrere manualmente sul desktop. Apparso per la prima volta in Mac OS X versione 10.3 "Panther", Exposé è una comoda rivoluzione nel modo di organizzare le finestre nel proprio monitor. 43 Il Sistema Operativo OS X 10.8 Mountain Lion Exposé ha tre differenti metodi di organizzazione delle finestre: 1. Mostra tutte le finestre aperte in quel momento, riducendole a delle miniature. Poi l'utente potrà selezionare col cursore una specifica finestra per portarla in primo piano. Di norma questa modalità è associata al tasto F9. 2. Mostra tutte le finestre aperte associate al programma che in quel momento è in esecuzione in primo piano. Di norma questa modalità è associata al tasto F10. 3. Sposta a lato tutte le finestre, mostrando il desktop sgombro. Di norma associato al tasto F11.63 I tasti usati per attivare Exposé sono modificabili a piacere, così come si possono definire degli angoli attivi nel monitor sul quale portare il cursore del mouse per attivare una funzione Exposé; se si dispone di un mouse o trackball con più tasti si possono associare le funzionalità di Exposé agli altri tasti. Exposé fa largo uso del sottosistema grafico Quartz Extreme per realizzare l'animazione che riscala le finestre e che successivamente le ringrandisce. Dalla versione Mac OS X 10.7, e di conseguenza in OS X 10.8 è stato rinominato in “Mission Control”. Apple Icon Image, detto anche Icns, è il formato icona utilizzato da Mac OS X. Esso supporta icone 16×16, 32×32, 48×48, 128×128, 256×256, 512×512 e 1024×1024 pixel, il canale alfa e la sovrapposizione di più immagini (per esempio una cartella aperta e chiusa). Il formato è semplicemente composto da massimo 6 immagini TIFF sovrapposte, che spesso sono solo di grandezze diverse, e altre volte sono immagini diverse a seconda dello stato che l'icona deve assumere in relazione al programma che la gestisce. 63 http://it.wikipedia.org/wiki/Expos%C3%A9_(Mac_OS_X) 44 Il Sistema Operativo OS X 10.8 Mountain Lion Per convertire le immagine da formati standard esistono diversi programmi: Icon Composer è l'accessorio che fa parte dei developer tool, permette di creare immagini icns partendo da formati standard. Img2icns è un tool che converte le immagini in Icns e inoltre le adatta alla dimensione usata negli iPhone e iPod touch. FastIcns ha le stesse funzioni di Icon Composer ma ha una grafica molto particolare. GraphicConverter permette di salvare in molteplici formati immagine oltrea Icns e ha altre numerose funzioni di grafica. Le Etichette del sistema operativo Mac OS sono una tipologia di metadati, nello specifico sette distinti parametri colorati, che possono essere assegnati a file, cartelle e volumi nel sistema operativo. Questa funzione è stata introdotta con il System 7 e mantenuta in tutte le versioni del Mac OS "Classic". Con l'avvento di Mac OS X le etichette sono state eliminate dalle prime versioni del sistema operativo, per poi essere reintrodotte nella versione 10.3 Panther.64 Nel Mac OS "Classic" la scelta di un'etichetta portava interamente l'icona nel colore selezionato, portando ad una distinzione visiva molto efficace ma anche alla perdita di dettagli nelle icone. In OS X, la rivoluzione dell'interfaccia Aqua ha portato a valorizzare particolarmente le nuove icone più grandi e fotorealistiche, e dunque a dover ripensare il precedente approccio. In Mac OS X le etichette permettono di differenziare gli elementi colorandone il nome; l'evidenziazione viene mostrata in tutte le "viste" del Finder (a icone, elenco, colonne e Cover Flow). Ad ogni colore è associata una descrizione testuale (di default è il nome del colore). 64 http://arstechnica.com/apple/reviews/2003/11/macosx-10-3.ars/9#finder-labels 45 Il Sistema Operativo OS X 10.8 Mountain Lion I colori disponibili sono sette: Rosso, Arancio, Giallo, Verde, Blu, Viola e Grigio. Questi non sono modificabili senza alterare file di sistema, ma il nome associato ai colori è personalizzabile a piacere nelle preferenze del Finder. Le etichette, usate in congiunzione con le cartelle smart, permettono di organizzare facilmente i documenti sul proprio computer.65 La Smart Folder (o Cartella Smart) è una speciale cartella virtuale i cui contenuti vengono aggiornati dinamicamente in base a specifici criteri definiti dall'utente. Introdotte in OS X 10.4 Tiger, contengono i risultati di una ricerca effettuata dal motore Spotlight. Quando il file system viene modificato da un programma o dallo stesso sistema operativo, le smart folders vengono automaticamente aggiornate in modo da rispecchiare il contenuto del file system. Spotlight è una funzione di ricerca in tempo reale che usa un motore di ricerca basato sui metadati ed è progettato per ricercare una vasta gamma di elementi sul file system. Con Spotlight possono essere create le Smart Folder solo dalla finestra di ricerca del Finder. Il Finder è l'applicazione che si occupa di gestire file, cartelle, dischi e il lancio di altre applicazioni. Il Finder si comporta come la shell in altri sistemi operativi, ma usa una interfaccia grafica (GUI). Il Finder è la prima applicazione che interagisce con l'utente dopo l'avvio. Bisogna distinguerlo dalla GUI. Essa è un'applicazione come le altre, né più né meno. Visualizza il file system usando la metafora del desktop (desktop environment): per ogni cartella o disco c'è una relativa icona e c'è anche un cestino, dove mettere i file da eliminare. 65 http://www.maclife.com/article/howtos/how_use_mac_os_x%E2%80%99s_labels_organize_your_files 46 Il Sistema Operativo OS X 10.8 Mountain Lion Launchpad è un alto visualizzatore di icone di Mac OS X. La GUI Launchpad Fullscreen fornisce un modo alternativo per avviare i programmi per computer rispetto al Dock , Finder e Spotlight . Il Launchpad è stato progettato per assomigliare all’interfaccia SpringBoard in iOS . Inizialmente, la schermata di avvio viene popolata con i programmi elencati nella sezione "Applicazioni" cartella in Mac OS X . L'utente può aggiungere / rimuovere le icone delle applicazioni per Launchpad. Le applicazioni possono essere organizzate in cartelle denominate come in iOS. L'utente può quindi rimuovere applicazioni scaricate dal Mac App Store. Sebbene i programmi ottenuti con metodi non possono essere rimossi dal Launchpad, alcune opzioni con terzi. In Lion, il Launchpad ha otto icone per riga, in Mountain Lion invece ha sette icone per riga. 47 Il Sistema Operativo OS X 10.8 Mountain Lion Capitolo 3 Il Kernel Il cuore del Sistema Operativo è Darwin66. Darwin è un sistema operativo libero che costituisce il set di base dei componenti che caratterizzano la struttura del Mac OS X. Dopo che la Apple acquisì la NeXT nel 1996, cominciò a lavorare sul Sistema Operativo Rhapsody, partendo dal progetto di OPENSTEP. Nel 2000 il progetto Rhapsody venne conciliato in Darwin. Nel luglio 2003, Apple rilasciò la versione di Darwin 2.0 sotto la Apple Public Source License (APSL), che la Free Software Foundation (FSF) approvò come licenza per software libero. Le versioni che furono sviluppate antecedentemente non soddisfavano la definizione della FSF di software libero, anche se erano soddisfatti i requisiti per la definizione Open Source. Per consentire un funzionamento sicuro su macchine multiprocessore, l'accesso alle risorse condivise (file, strutture dati, ecc) è serializzato in modo da impedire ai processi di modificare contemporaneamente la stessa risorsa. 66 Certificato per la versione OS X 10.8 Mountain Lion: http://www.opengroup.org/openbrand/register/brand3591.htm 48 Il Sistema Operativo OS X 10.8 Mountain Lion Esso implementa sistemi a mutua esclusione (mutex) a grana fine per ottenere elevate prestazioni nei sistemi multiprocessore. Darwin non include molti degli elementi che definiscono Mac OS X, come Cocoa o il Quartz Compositor.67 Presenta tuttavia una serie di caratteristiche meno conosciute di Mac OS X. Ad esempio, mDNSResponder, che è il multicast DNS che è un componente fondamentale della tecnologia di rete Bonjour, e launchd , che è un avanzato servizio di gestione framework. E’ costruito attorno XNU, un kernel ibrido il quale è un compromesso di progettazione fra la flessibilità del microkernel Mach 3 e le prestazioni del kernel monolitico FreeBSD, vari elementi di BSD (Berkeley Software Distribution), tra cui il modello di processo, lo stack di rete , e i file system virtuali, un driver di periderica API object-oriented chiamata I/O Kit, un modulo di astrazione hardware chiamato Platform Expert, e altre estensioni del kernel. Dunque il kernel di Mac OS X non è solo XNU, ma l’unione di molteplici componenti. Per semplicità si intende con XNU sia la combinazione del codice di base (quello implementato nel package XNU di Darwin) sia tutte le altre estensioni del kernel. XNU è un acronimo ricorsivo che sta per XNU's Not Unix ("XNU Non è Unix"). Il nucleo del kernel XNU è Mach e fornisce la gestione dei processi, il passaggio dei messaggi (utilizzati nella comunicazione interprocesso), la memoria virtuale e la protezione della memoria, la gestione dei processi real-time, il supporto al debugging del kernel e I/O da console. Mach inoltre gestisce la presenza di più binari in modo da poter gestire nativamente la presenza di più architetture hardware come i processori PowerPC o i processori X86.68 67 Per approdonfire: http://developer.apple.com/darwin/ 68 http://it.wikipedia.org/wiki/DarwinOS#Mach 49 Il Sistema Operativo OS X 10.8 Mountain Lion Le porzioni di codice BSD integrate forniscono le API POSIX (BSD system calls) il modello di gestione dei processi, i livelli base di sicurezza e le relative policy, l'user id, la gestione dei permessi, la gestione della rete, il Virtual file system (incluso la strato di journaling), la crittografia, le UNIX System V IPC, molte primitive ed un gran numero di programmi scritti per vari altri sistemi simili a UNIX, che possono essere compilati su di esso senza modifiche del codice sorgente. Dentro XNU, la porzione BSD, l’I/O Kit ed il Mach risiedono nello stesso spazio degli indirizzi anche se hanno responsabilità ben definite che li separano in termini di funzioni ed implementazione. Figura 3.1 3.1 Mach Mach ebbe inizio, in gran parte, come un tentativo di creare un kernel pulito e altamente portabile basato su UNIX. Il risultato fu un breve elenco di concetti generici: 69 70 69 Tevanian, Avadis; Rashid, Richard F.; Golub, David B.; Black, David L.; Cooper, Eric; Young, Michael W. (1987). "Mach Threads and the Unix Kernel: The Battle for Control". Proceedings of the USENIX Summer Conference, USENIX Association. pp. 185–197. CiteSeerX: 10.1.1.41.3458. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.3458 50 Il Sistema Operativo OS X 10.8 Mountain Lion • un task, ossia un oggetto costituito da un insieme di risorse di sistema che abilitano i threads durante l’esecuzione. • un thread, ossia una singola unità in esecuzione, esiste all'interno di un contesto di task col compito di condividere le risorse. • una porta, ossia una coda di messaggi protetta per la comunicazione tra le varie attività; i task possono inviare e ricevere messaggi tramite esse. • i messaggi, che sono raccolte di oggetti di tipi di dato, e possono essere inviati solo con le porte. Mach è sviluppato coi concetti IPC (Inter-Process Communication) di Accent, ma ciò ha reso il sistema molto più UNIX-like, cioè è in grado di eseguire programmi UNIX con poca o nessuna modifica. Per fare questo, Mach introduce il concetto di “porta”, che rappresenta il punto di arrivo di una comunicazione IPC, ossia due processi per comunicare tra di loro hanno bisogno di una porta in comune per scambiarsi messaggi in modo protetto. Le porte aderiscono alle norme di sicurezza come i file in UNIX, rendendo il modello di protezione UNIX-like. Inoltre, Mach permette a qualsiasi programma la gestione dei privilegi, operazione che in genere è data solo al sistema operativo, al fine di consentire ai programmi user space la gestione delle proprie operazioni, come l’iterazione con l'hardware. Sotto Mach il sistema operativo diventa di nuovo principalmente una raccolta di “utilities”. Come con UNIX, Mach mantiene il concetto di un driver per gestire l'hardware. Pertanto tutti i driver per l'hardware presenti devono essere inclusi nel microkernel. 70 Accetta, Mike; Baron, Robert; Bolosky, William; Golub, David; Rashid, Richard; Tevanian, Avadis; Young, Michael (1986). "Mach: A New Kernel Foundation for UNIX Development". Technical Conference - USENIX. http://www.cs.toronto.edu/~demke/469F.06/Handouts/mach_usenix86.pdf 51 Il Sistema Operativo OS X 10.8 Mountain Lion Altre architetture basate su Hardware Abstraction Layer o exokernels potrebbero spostare i drivers fuori dal microkernel. La differenza principale che ha con UNIX è sulla gestione di file, i quali possono gestire qualsiasi task. Altre linee di codice del sistema operativo è sono state spostato fuori dal kernel nello spazio utente, in modo da avere un kernel molto più piccolo e leggero che giustifica così il nome microkernel . Un’importante differenza coi sistemi tradizionali è che sotto Mach un task può essere composto da threads. Questa caratteristica che è molto comune nei sistemi moderni, è stata possibile proprio grazie a Mach, il quale è stato il primo sistema a definire i task e i threads in questo modo. Il lavoro del kernel è stato ridotto in modo da avere semplicemente le operazioni per la gestione delle utilities ela gestione dello scheduling per la comunicazione tra software e hardware. L'esistenza delle porte e l'uso di IPC è probabilmente la differenza principale tra il kernel Mach e i kernel tradizionali. Sotto UNIX, la chiamata del kernel consiste in un’operazione nota come syscall o trap. Il programma usa una libreria per inserire i dati in una posizione ben nota in memoria e quindi genera un tipo di errore che prende il nome di eccezione. Quando il sistema viene avviato, il kernel è impostato per essere la gestione di tutte le eccezione, in modo che quando un programma ne invoca una, il kernel esamina le informazioni in suo possesso e poi esegue le istruzioni. Sotto Mach, la gestione delle eccezioni viene gestita tramite il sistema IPC. Per richiamare la funzionalità del sistema, un programma chiede al kernel l'accesso ad una porta, e quindi utilizza il sistema IPC per comunicare con essa. Anche se i messaggi sono stati innescati da system call, la gestione della richiesta effettiva può arrivare a qualche altro programma. 52 Il Sistema Operativo OS X 10.8 Mountain Lion L'uso di IPC per lo scambio di messaggi beneficia del supporto sia dei threads che della concorrenza. Dato che i task sono multi-thread e che i threads utilizzano il meccanismo IPC, Mach è in grado di bloccare e sbloccare i threds, mentre il messaggio viene gestito. Questo consente al sistema di essere distribuito su più processori, utilizzando sia la memoria condivisa direttamente, come nella maggior parte dei messaggi Mach, sia aggiungendo codice per copiare il messaggio su un altro processore, se necessario. In un kernel tradizionale questa gestione è difficile da implementare, il sistema deve essere sicuro che i diversi programmi non cerchino di scrivere sulla stessa porzione di memoria da diversi processori. In Mach questo è ben definito e più facile da implementare, in quanto è il processo stesso a chiedere l’accesso a quell’area di memoria grazie alle porte. Il sistema IPC inizialmente ebbe problemi prestazionali, quindi alcune strategie furono sviluppate per minimizzare l'impatto. Come il suo predecessore, Accent, Mach utilizza un singolo meccanismo per la gestione della memoria condivisa, per passare fisicamente il messaggio da un programma all'altro. Fisicamente, la copia del messaggio sarebbe troppo lenta, così Mach si basa sulla Memory Management Unit (MMU) per mappare rapidamente i dati da un programma all'altro. I messaggi sono stati controllati dal kernel, per evitare che i dati errati corrompano uno dei molti programmi che compongono il sistema. Le porte sono state volutamente modellate sul concetto di file system UNIX. Questo permette agli utenti di trovare le porte utilizzando i concetti di navigazione dei file system esistenti, nonché i diritti e le autorizzazioni di assegnazione come farebbero sul file system. Con un monokernel, un bug nel nuovo codice avrebbe generato un kernel panic, ossia avrebbe compromesso la macchina intera e richiesto un riavvio, mentre con Mach è necessario solo che sia il programma che ha causato l’errore ad essere riavviato. 53 Il Sistema Operativo OS X 10.8 Mountain Lion Inoltre l'utente può personalizzare il sistema per includere o escludere qualunque funzionalità richiesta. Dal momento che il sistema operativo è semplicemente una raccolta di programmi, si potrebbe aggiungere o rimuovere parti semplicemente avviandoli o “killandoli” come farebbero con qualsiasi altro programma. Nella versione OS X 10.8 un kernel panic riavvia sempre immediatamente, inizia un backup dei dati, mostra un avviso sulla riavviattivazione del computer a causa di un problema per alcuni secondi, poi il computer si riavvia. E’ stata anche aggiunta una traduzione cinese. 3.2 I/O Kit I/O Kit è il framework che gestisce i driver di periferica, scritti in un linguaggio derivato dal C++ basato su Embedded C++.71 Utilizzando il suo desig object-oriented, caratteristica comune a tutte le classi del driver all’interno del framework stesso, si aiutano i driver di periferica in modo da essere scritti più velocemente e con meno linee di codice. L'I/O Kit è multi-thread, multiprocessing simmetrico (SMP), e permette una configurazione per i dispositivi automatica e dinamica. Molti driver possono essere scritti per funzionare nella user-zone, ciò migliora ulteriormente la stabilità del sistema, in quanto se in tale zona c’è un crash del dispositivo non si blocca il kernel. Infatti tutti i driver nel kernel space rischiano di bloccare tutto il sistema. Esempi di driver kernel-space includono l'adattatore del disco e i driver della scheda di rete, i driver grafici, i driver per le porte USB e anche i driver per le virtual-machine come Parallels Desktop. 71 http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html 54 Il Sistema Operativo OS X 10.8 Mountain Lion Le radici di I/O Kit sono in DriverKit di NeXTSTEP. Esso è in gran parte un ambiente autonomo, cioè gli sviluppatori possono codificare e fare affidamento esclusivamente sulla I/O Kit senza dover per forza conoscere gli strati di Mach e BSD. I/O Kit offre anche il proprio set di API, l'I/O Kit Framework, che fornisce funzioni avanzate come le notifiche per la comunicazione kernel-space/user-space (e viceversa).72 3.3 BSD BSD (Berkeley Software Distribution) è un Sistema Operativo Unix derivato, sviluppato e distribuito dalla Computer Systems Research Group (CSRG) della University of California in Berkeley, dal 1977 al 1995. Oggi il termine “BSD” è spesso usato in modo non specifico per riferirsi a qualsiasi dei discendenti BSD i quali insieme formano un ramo della famiglia dei Sistemi Operativi Unix-like. I sistemi operativi derivati da BSD originale codice restano attivamente sviluppati e ampiamente utilizzati. Nello Unix di Berkeley sono stati implementati protocolli, librerie e strumenti che hanno dato un grande contributo allo sviluppo dell'informatica moderna. La porzione del kernel BSD fornisce le POSIX API73, il modello di processo Unix in cima ai tasks Mach, le politiche di sicurezza di base, gli ID utente e gli ID di gruppo, le autorizzazioni, lo stack di rete, i codici dei file system virtuali, alcuni file system locali, come HFS/HFS+, il Network File System (NFS) client e server, i frameworks crittografici, 72 Jonathan Levin, Mac OS X and iOS Internals To the Apple’s Core, Novembre 2012. 73 Vedi Capitolo 2, pag 29 55 Il Sistema Operativo OS X 10.8 Mountain Lion il UNIX System V per la gestione della comunicazione tra processi (IPC), un sottosistema di audit, il controllo di accesso obbligatorio, e alcune delle primitive bloccanti.74 Molto del codice BSD in XNU provieniene dal kernel FreeBSD. Anche se gran parte di di essa è stata modificata in modo significativo, la condivisione del codice si verifica ancora tra la Apple e il FreeBSD Project.75 Un derivato di BSD è FreeBSD. Grazie alle sue condizioni di licenza permissiva, gran parte della base di codice di FreeBSD è diventata parte integrante di sistemi operativi come Apple OS X , che sono stati successivamente certificati come UNIX-compatibili e hanno formalmente ricevuto il marchio UNIX.76 Con l'eccezione del proprietario OS X, FreeBSD è il più utilizzato tra i derivati di BSD ed è il più utilizzato sotto licenza libera, open-source di distribuzione BSD, che rappresentano più di tre quarti dei sistemi free installati.77 FreeBSD supporta diverse caratteristiche relative alla sicurezza come Access Control List (ACLs), la verifica di eventi, gli attributi estesi del file system e Mandatory Access Control (MAC). Queste caratteristiche furono sviluppate dal progetto TrustedBSD78 il quale fu fondato da Robert Watson con l'obiettivo di implementare i concetti dal Common Criteria e quelli del TCSEC. Questo progetto procede ancora e molte delle sue estensioni sono state integrate nelle distribuzioni FreeBSD. 74 http://lists.freebsd.org/pipermail/freebsd-advocacy/2008-August/003674.html 75 http://www.freebsd.org/news/status/report-2009-04-2009-09.html#Grand-Central-Dispatch---FreeBSD-port 76 Pohlmann, Frank. "Why FreeBSD". ibm.com. Retrieved 2013-01-13. http://www128.ibm.com/developerworks/opensource/library/os-freebsd/ 77 BSD Certification Group (31 October 2005) (PDF). The BSD Certification Group. http://www.bsdcertification.org/downloads/pr_20051031_usage_survey_en_en.pdf 78 http://www.trustedbsd.org/mac.html 56 Il Sistema Operativo OS X 10.8 Mountain Lion Questo progetto ha pure adattato l'implementazione della National Security Agency dal SELinux a FreeBSD. Altri lavori incusi nello sviluppo di OpenBSM, un'implementazione open source delle API (BSM) della Sun e del supporto del formato dei file log, i quali aggiungono maggiore sicurezza al sistema. Mentre molti componenti del progetto TrustedBSD sono stati inclusi nei sorgenti per FreeBSD, molte caratteristiche, ormai pienamente maturate, trovano la loro collocazione in altri sistemi operativi, come ad esempio: OpenPAM e UFS2 sono stati adottati in NetBSD. Il framework TrustedBSD MAC è stato adottato dalla Apple per il proprio sistema operativo Mac OS X.79 Le API del kernel sono fatte per essere accessibili alle estensioni del kernel di rete (NKEs), e Network Kernel Extensions Programming Guide80 della Apple lo documenta al meglio.81 Nel FreeBSD è presente una tecnologia per l’ottimizzazione del supporto delle applicazioni per sistemi con multi-core di processori e di altri multiprocessing simmetrico sistemi e prende il nome di Grand Central Dispatch (GCD)82. 3.3.1 File System Un File System è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei 79 Robert Watson's PhD Dissertation http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-818.html 80 https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/NKEConceptual/NKEConceptual.pdf 81 Jonathan Levin, Mac OS X and iOS Internals To the Apple’s Core, Novembre 2012. 82 http://www.apple.com/pr/library/2008/06/09snowleopard.html 57 Il Sistema Operativo OS X 10.8 Mountain Lion dati. Di fatto, alcuni file system (come NFS) non interagiscono direttamente con i dispositivi di archiviazione. I file system possono essere rappresentati sia graficamente tramite file browser sia testualmente tramite shell testuale. Nella rappresentazione grafica è generalmente utilizzata la metafora delle cartelle che contengono documenti (i file) ed altre sottocartelle. Mac OS X utilizza un file system che ha ereditato dal classico Mac OS chiamato HFS Plus (HFS+), talvolta chiamato Mac OS Esteso. HFS Plus è un metadato ricco e case-preserving , ma di solito i file system sono caseinsensitive. A causa delle radici Unix di OS X, sono stati aggiunti a HFS Plus permessi Unix. Le versioni successive di HFS Plus aggiungono journaling per prevenire la corruzione della struttura del file system e introducono una serie di ottimizzazioni agli algoritmi di allocazione, nel tentativo di deframmentare i file automaticamente senza la necessità di un programma di deframmentazione esterna. I nomi dei file possono contenere fino a 255 caratteri. HFS Plus utilizza Unicode per la memorizzare dei nomi dei file. Su OS X, il tipo di file può venire dal tipo di codice, memorizzato nei metadati del file, o l' estensione del file . HFS Plus dispone di tre tipi di collegamento: Unix-style hard links, Unix-style symbolic links and aliases. Gli aliases sono progettati per mantenere un collegamento al file originale, anche se vengono spostati o rinominati, non verranno interpretati dal file system in sé, ma dal codice File Manager in spazio utente. Mac OS X supporta anche l' UFS file system, derivato dal BSD Unix Fast File System da NeXTSTEP . Tuttavia, a partire da Mac OS X 10.5 (Leopard), OS X non può più essere 58 Il Sistema Operativo OS X 10.8 Mountain Lion installato su un volume UFS, né un sistema di pre-Leopard installato su un volume UFS essere aggiornato a Leopard.83 Le versioni più recenti di OS X sono in grado di leggere e scrivere sui file system FAT (16 e 32) comuni in Windows. Essi sono anche in grado di leggere i più recenti NTFS file system per Windows. Per scrivere ai file system NTFS su OS X versioni precedenti 10.6 (Snow Leopard) è necessario un software di terze parti. Mac OS X 10.6 (Snow Leopard) e versioni successive, quindi anche la 10.8, consentono la scrittura di file system NTFS, ma solo dopo una non banale modifica delle impostazioni di sistema. 3.3.2 Networking La gestione delle schede di rete in un Sistema Operativo Mac OS X affidato a Bonjour. Bonjour è un marchio registrato usato da Apple per denominare la sua implementazione del protocollo Zeroconf dell'IETF, una tecnologia basata sulle reti locali introdotta dalla versione 10.2 di Mac OS X. Zeroconf o Zero Configuration Networking è un protocollo standard dell'IETF per la configurazione dinamica dei nodi di una rete utilizzante il protocollo IP. Lo standard non è ancora definitivo, infatti non esiste ancora nessun documento RFC sul protocollo Zeroconf sebbene esistano già diverse implementazioni del protocollo che vengono utilizzate quotidianamente da moltissimi utenti essendo incluse nei sistemi operativi. La tecnologia Bonjour usa il pacchetto standard DNS in un modo nuovo, sviluppa cioè dei nuovi servizi utilizzando una tecnologia relativamente vecchia come quella del DNS over IP. 83 http://docs.info.apple.com/article.html?artnum=306516 59 Il Sistema Operativo OS X 10.8 Mountain Lion Inizialmente la tecnologia sviluppata da Apple utilizzava il nome Rendezvous ma in seguito Apple ha subìto una causa legale poiché il nome Rendezvous era già utilizzato da una azienda produttrice di software; nel 2004 le due parti hanno raggiunto un accordo in cui Apple si impegnava a cambiare il nome. Con la versione 10.4 del suo sistema operativo, Apple ha rinominato la tecnologia Bonjour. Bonjour è una tecnologia generica nata per individuare automaticamente la presenza di servizi nelle LAN. Questa tecnologia viene usata in modo massiccio da Mac OS X per consentire agli utenti di installare una rete senza bisogno di configurarla. Attualmente Bonjour viene utilizzato: • da Mac OS X per rilevare stampanti di rete o file server • da iTunes per cercare musica condivisa • da iChat per cercare altri utenti di iChat locali • dal browser Safari per cercare web server locali, che possono essere per esempio le pagine di configurazione di molti dispositivi in rete. • da iPhoto per individuare cartelle fotografiche condivise • da programmi di terze parti per implementare software collaborativi, di chat, ecc.. Senza speciali configurazioni al DNS, Bonjour lavora nella singola sottorete. Non si tratta di una limitazione ma di una caratteristica del servizio. Bonjour non è nato per fornire servizi su internet o su reti geografiche ma è nato per permettere ai milioni di utilizzatori di reti locali di non doversi preoccupare della configurazione della rete. Dall'8 agosto 2006 Apple ha rilasciato i sorgenti del progetto sotto Apache License. I sorgenti sono stati posti nel sito www.macosforge.org, un sito creato da Apple per gestire i progetti open-source legati alla sua piattaforma. 60 Il Sistema Operativo OS X 10.8 Mountain Lion Conclusione Come spero di aver evidenziato in questo elaborato di tesi, le novità introdotte da OS X 10.8 Mountain Lion sono moltissime: questo nuovo Sistema Operativo spalanca le porte al futuro, introducendo un nuovo modo di concepire l'OS. Figura C.1 Il presente grafico, frutto di un’analisi di Net Applications, dimostra che a pochi mesi dal lancio, OS X 10.8 Mountain Lion è diventato il sistema Mac più utilizzato. 61 Il Sistema Operativo OS X 10.8 Mountain Lion Essendo il Sistema Operativo relativamente recente, il materiale reperibile è perlopiù parziale e, soprattutto, molto dispersivo. Il rapporto inversamente proporzionale tra quota di mercato e disponibilità di informazioni su Mountain Lion è quantomeno insolito: è probabile che queste due variabili, una ritrovata empiricamente e l'altra statisticamente, portino alla necessità di una documentazione più dettagliata sul tema. Attraverso questo elaborato ho cercato di dare il mio contributo alla delucidazione degli aspetti tecnici più interessanti di Mac OS 10.8, cercando di creare una sorta di guida sul funzionamento e sulla praticità dei suoi molteplici componenti, in modo da tracciare sia il percorso che ha portato allo sviluppo di questo Sistema Operativo sia la possibilità di usarlo appieno sfruttando le mille possibilità che la Apple offre ai suoi utenti. 62 Il Sistema Operativo OS X 10.8 Mountain Lion Bibliografia [1] The Apple Museum 2006 “History” URL: www.theapplemuseum.com/index.php?id=53 [2] Amit Singh 2006 “Mac OS X Internals: A System Approach” Ed. Addison Wesley URL: www.osxbook.com [3] Apple Developer Connection 2013 “Guides – Mac OS X” URL: https://developer.apple.com/library/mac/navigation/ [4] Apple Developer Connection 2013 “Mac Technology Overview” URL:http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_ Technology_Overview/About/About.html#//apple_ref/doc/uid/TP40001067 [5] Massimiliano Di Cesare 2007 “Il sistema operativo Mac OS X” URL: http://www.mobilab.unina.it/tesi/tesiDiCesare-IlsistemaoperativoMacOSX.pdf [6] Apple 2012 “OS X Mountain Lion” URL:http://movies.apple.com/media/us/osx/2012/docs/OSX_MountainLion_Core_Techno logies_Overview.pdf 63 Il Sistema Operativo OS X 10.8 Mountain Lion Ringraziamenti Ringrazio la mia famiglia, che ha finanziato questa laurea. Ringrazio il mio Capitano, che è stata la prima a credere in me. Ringrazio i miei amici, tutti e nessuno escluso, che mi hanno sopportato e supportato nei momenti più bui. Ringrazio i miei colleghi, che adesso sono i miei amici, e che sono divenuti la mia seconda famiglia. Ringrazio chi c’è stato, anche se per poco, e chi ancora è qui a darmi il proprio sostegno. Ringrazio chi mi ha permesso di arrivare a questo traguardo, donandomi un piccolo pezzo di sè. Ringrazio chi non ha mai smesso di credere in me, anche quando ero a non crederci più. E ringrazio chi, seppur inconsapevolmente, mi fa sorridere ogni qual volta ne abbia bisogno. Grazie a tutti. 64