ALMA MATER STUDIORUM - UNIVERSITÀ DI BOLOGNA

SCUOLA DI INGEGNERIA E ARCHITETTURA

DISI

LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA

TESI DI LAUREA in Ingegneria dei Sistemi Software

Ubuntu Phone - Un Sistema Operativo convergente per Desktop e Cellulari

CANDIDATO RELATORE Leonardo IANNACONE Chiar.mo Prof. Antonio NATALI

Anno Accademico 2014/2015

Sessione III Indice

1 Introduzione 5 1.1 Lo stato attuale del mercato ...... 7 1.2 Ubuntu Touch ...... 9 1.3 L’esigenza di unire Desktop e Smartphone ...... 10 1.4 Il primo dispositivo con Ubuntu Touch ...... 12 1.5 Ubuntu Core nell’Internet of Things ...... 14 1.5.1 Architettura Snappy ...... 14 1.6 Outline ...... 15

2 La piattaforma 17 2.1 Il server grafico Mir ...... 18 2.1.1 Struttura interna ...... 18 2.2 Unity ...... 20 2.2.1 Propriet`ae requisiti ...... 20 2.2.2 Architettura di sistema ...... 21 2.2.3 Tecnologie usate e integrazione nel sistema ...... 23 2.2.4 Personalizzazioni e punti di estensioni ...... 24 2.2.5 Modello base dell’interfaccia ...... 25 2.3 Click - un nuovo formato dei pacchetti ...... 25 2.3.1 Il file control ...... 27 2.3.2 Il file manifest ...... 27

3 Le applicazioni 31 3.1 Ciclo di vita delle applicazioni ...... 32

1 INDICE INDICE

3.2 Accesso alle risorse e scambio di contenuti tramite Content Hub 33 3.2.1 Scenario di un’applicazione che importa contenuti . . . 34 3.2.2 Scenario di un’applicazione che esporta contenuti . . . 35 3.2.3 Registrare un’applicazione come sorgente o destinazione 35 3.3 Applicazioni in HTML5 ...... 37 3.3.1 Esecuzione e debug ...... 37 3.3.2 Descrizione dei file principali ...... 38 3.3.3 Struttura dell’HTML5 in Ubuntu ...... 40 3.4 Applicazioni native in QML ...... 44 3.4.1 Oggetti e tipi base ...... 45 3.4.2 Il sistema di eventi ...... 47 3.5 Gli Scope ...... 50 3.5.1 L’architettura degli Scope ...... 52 3.5.2 Comportamento e data flow ...... 53 3.5.3 Separazione fra dati e visualizzazione ...... 53

4 Aggiornamenti di sistema 55 4.1 Caratteristiche principali ...... 55 4.2 I canali ...... 57 4.2.1 La promozione delle immagini ...... 57 4.2.2 Lo schema dei nomi ...... 58 4.3 L’implementazione del server ...... 58 4.3.1 Il file channels.json ...... 59 4.3.2 Il file index.json ...... 60 4.3.3 Sicurezza ...... 63 4.4 L’implementazione del client ...... 63 4.4.1 Caratteristiche principali ...... 64 4.4.2 Esempio di aggiornamento ...... 64 4.5 L’implementazione dell’upgrader ...... 65 4.5.1 L’interazione con il client ...... 65

2 INDICE 3

5 Sviluppare in Ubuntu 67 5.1 Installazione del sistema ...... 67 5.1.1 Preparazione del Desktop ...... 68 5.1.2 Backup del dispositivo ...... 69 5.1.3 Sbloccare il dispositivo ...... 71 5.1.4 Installare Ubuntu sul dispositivo ...... 72 5.1.5 Aggiornare il sistema ...... 73 5.2 Ubuntu SDK - Software Development Kit ...... 73 5.2.1 Installazione di Ubuntu SDK ...... 74 5.3 Creare uno Scope ...... 74 5.3.1 Sviluppo del Server Web ...... 75 5.3.2 Creazione del progetto in Ubuntu SDK ...... 78 5.3.3 Pulizia del codice base ...... 79 5.3.4 Inserimento del nuovo codice ...... 81 5.3.5 Esecuzione e anteprima ...... 86

6 Conclusioni 89

3 INDICE INDICE

4 Capitolo 1

Introduzione

In un mercato per smartphone, dove la suddivisione degli utenti e dei si- stemi operativi sembra gi`aben delineata ormai da diversi anni, Ubuntu, il si- stema operativo supportato da Canonical e mantenuto insieme alla comunit`a Open Source, fa il suo debutto con la versione Touch. Si tratta di un sistema rivoluzionario, che sfrutta a pieno la potenza computazionale dei dispositivi moderni, oggi pari quasi a quella dei laptop. E` da questa visione di insieme da cui `enata l’esigenza di unire Desktop e Smartphone in un unico device, aggiungendo un livello di convergenza fra due mondi oggi ancora divisi. Si tratta di un cambiamento non solo doveroso, ma anche necessario. Un primo passo verso un futuro dove tutti saremo dotati di un mini-computer portatile, appunto uno smartdevice, che porteremo sempre con noi. Poco importa se sar`aun dispositivo in grado di effettuare chiamate (smartphone) o pi`usemplicemente un orologio (smartwatch). L’evoluzione dei dispositivi si muove nella direzione degli oggetti intelligenti, in grado anche di comunicare fra di loro, di scambiare informazioni e di adattarsi a condizioni esterne, sono gli smartdevice che costituiscono la Internet of Things, o Internet delle cose. Secondo le stime di Gartner1, nel 2015 ci saranno 4,9 miliardi di oggetti

14.9 Billion Connected ”Things” Will Be in Use in 2015 http://www.gartner.com/newsroom/id/2905717

5 1. Introduzione connessi a livello globale, circa il 30% in pi`urispetto al 2014, una proiezione che indica cambiamenti radicali nel nostro modo di vivere. La presenza di oggetti con capacit`adecisionali e in grado di automatizzare azioni ci regaler`a scenari oggi impensabili, come ad esempio il risparmio energetico intelligente, sia a livello individuale (domotica e smart-home) sia a livello macroscopico (smart-city e smart grid). Ubuntu, negli ultimi anni, ha guardato con particolare attenzione all’e- voluzione di questo campo e ha fortemente influenzato lo sviluppo dei propri componenti sulla base delle analisi degli scenari futuri. A conferma di questa tendenza, ha da poco annunciato una nuova versione del sistema operativo chiamata Ubuntu Core, studiata e dedicata appunto all’Internet delle cose.

Informazioni su Ubuntu e Canonical

Ubuntu `euna distribuzione GNU/ nata nel 20042 dalla volont`a del fondatore e imprenditore Mark Shuttleworth. Pensata per il mercato Desktop e Server, con milioni di installazioni ogni anno, ha successivamente conquistato il Cloud con una presenza di quasi il 64% nelle istanze OpenStack in produzione3. Ha negli ultimi anni dedicato il suo sviluppo verso dispositivi di prossima generazione, rilasciando prima una versione per smartphone e tablet, chiamata Touch, e poi una per l’Internet of Things chiamata Core o Snappy. Canonical Ltd `el’azienda che supporta attivamente lo sviluppo di Ubuntu e offre soluzioni tecnologiche infrastrutturali e supporto tecnico professionale per i clienti che intendono adottare Ubuntu come sistema operativo a livello aziendale, amministrativo e governativo.

2The Ubuntu Story http://www.ubuntu.com/about/about-ubuntu 3OpenStack User Survey Insights: November 2014 http://superuser.openstack.org/articles/openstack-user-survey-insights-november-2014

6 1. Introduzione 7

1.1 Lo stato attuale del mercato

L’intero mercato mondiale degli smartphone `ecresciuto anno dopo anno fino a raggiungere vette impensabili, circa 335 milioni di unit`aspedite nel solo terzo quadrimestre del 20144. Per la fine del 2014 si sono stimati circa 1,3 miliardi di dispositivi spediti in tutto il mondo. Il mercato `ein forte aumento, si parla di una crescita costante di circa il 30% annuo su unit`avendute, un trend che non accenna ad invertire. Alla fine del 2014 si `eprevisto che il numero delle vendite sia considerevolmente aumentato con l’uscita dei dispositivi iPhone 6 e iPhone 6 Plus e, soprattutto, per l’arrivo dei nuovi venditori cinesi che, espandendosi sempre di pi`uoltre oceano, hanno ormai raggiunto e conquistato i mercati europei e statunitensi con le proprie vantaggiose e attrattive offerte di dispositivi low-cost sotto i 200 Euro. Android con circa 283 milioni di unit`aspedite e circa l’84% del market share, `eil leader indiscusso a livello mondiale dei sistemi operativi. L’en- trata in gioco di nuovi venditori cinesi, come Xiaomi e Lenovo, ha costretto Samsung, il leader hardware del mercato, ad abbassare il costo dei propri di- spositivi per far fronte alla concorrenza. Di conseguenza, la media dei prezzi di vendita dei device che montano questo sistema operativo si `eabbassata nell’ultimo anno di circa il 20%, e ci`oha permesso di mantenere un livello di crescita positivo delle vendite globali. iOS perde circa un punto percentuale in un solo anno. Una perdita che corrisponde alla richiesta sempre pi`uforte da parte degli utenti di nuovi dispositivi low-cost. Il lancio dell’iPhone 6 e 6 Plus tuttavia potrebbe aver diminuito leggermente la perdita complessiva, facendo aumentare le vendite specialmente nel quarto quadrimestre durante le vacanze natalizie. Tuttavia, i dati di questo periodo non sono ancora disponibili. Windows Phone con circa il 2,9% del market share non ha mai preoc- cupato i propri avversari negli ultimi anni. Un trend in stallo dovuto princi-

4Fonte IDC International Data Corporation http://www.idc.com/prodserv/smartphone- os-market-share.jsp

7 1.1 Lo stato attuale del mercato 1. Introduzione

Figura 1.1: Smartphone OS Market Share, Q3 2014

palmente alla limitata gamma di modelli, ad oggi quasi il 90% dei dispositivi venduti con questo sistema operativo sono solo i modelli Nokia Lumia. Tut- tavia sono state annunciate delle nuove partnership con venditori importanti come Samsung e HTC che potrebbero portare ad un incremento delle vendite nei prossimi anni.

8 1. Introduzione 9

1.2 Ubuntu Touch

Nel gennaio del 2013 `estato annunciato da Canonical Ubuntu Touch, il sistema operativo Open Source per smartphone e tablet. In realt`anon si tratta di una modifica ad-hoc per dispositivi mobili, quanto di un vero e proprio sistema operativo convergente fra sistemi eterogenei.

Figura 1.2: La convergenza di Ubuntu fra dispositivi eterogenei

Ubuntu Touch si colloca in un mercato gi`asaturo, ormai da anni conqui- stato da Android e da iOS, tuttavia nei suoi primi mesi di vita ha conquistato una curiosit`aglobale che, secondo i dipendenti Canonical, ha gi`aportato pi`u di 10.000 utenti unici ad installare Ubuntu Phone prima del rilascio ufficiale5. Di fatto, la curiosit`a`epi`uche legittima in quanto Ubuntu Touch non `eun adattamento di un sistema conosciuto verso dispositivi nuovi, ma una nuova piattaforma che parte da una nuova idea di convergenza, portando un unico sistema su pi`udispositivi, dallo smartphone al Desktop, dalla TV all’auto intelligente.

510,000 Users of Ubuntu Phone http://discourse.ubuntu.com/t/10-000-users-of- ubuntu-phone/1729

9 1.3 L’esigenza di unire Desktop e Smartphone 1. Introduzione

Questa astrazione `epossibile grazie ad Unity, l’interfaccia utente di Ubun- tu, che venne rilasciata per la prima volta nel 2010 e che, fin dai primi mo- menti, venne pensata e sviluppata con il concetto di mobile-devices-in-mind. Dopo circa quattro anni di sviluppo, messa appunto e refactory, Unity con la versione 8 `efinalmente pronta per la produzione. Non solo un’interfaccia per sistemi Desktop, quindi, ma soprattutto per sistemi mobili, grazie soprattut- to all’introduzione del touch e di nuovi widget che hanno reso le applicazioni portabili e completamente interscambiabili fra diversi dispositivi grafici, in maniera del tutto trasparente, appunto convergenti. Diversamente dalle altre piattaforme in commercio, Ubuntu Touch segue un sistema di sviluppo e di rilascio aggiornamenti diverso, sfruttando le tem- pistiche in uso gi`aora per il sistema operativo di casa Canonical e pi`uin generale dell’Open Source: gli aggiornamenti arrivano non appena disponi- bili, non solo a livello applicativo, ma anche di sistema. Nella maggior parte dei casi, chi acquister`auno smartphone con sistema operativo Ubuntu non soffrir`aquindi dei ritardi degli aggiornamenti che caratterizzano oggi i pi`u famosi produttori di dispositivi.

1.3 L’esigenza di unire Desktop e Smartpho- ne

When we began developing Unity a few years ago, the aim was to create a single family of interfaces that work the same way on different devices. This means that unlike most of our rivals, we are able to use a single underlying OS across all the devices which people use, be they PCs, phones or any other device.

Jane Silber, CEO di Canonical, 2 gennaio 20136

6It’s official: Ubuntu now fits phones http://blog.canonical.com/2013/01/02/its- official-ubuntu-now-fits-phones/

10 1. Introduzione 11

Nella vision di Unity `esempre stata presente l’integrazione fra Desktop e smartphone, dispositivi mobili che oggi sono sempre pi`upotenti e con pre- stazioni hardware che ormai assomigliano quasi a quelle di laptop. Quasi tutti gli sviluppatori di sistemi per smartphone hanno tentanto questo approccio di convergenza, ma ad oggi nessuno `eancora riuscito a presentare un prodotto pronto per il mercato, nessuno tranne Ubuntu e Canonical. Unity 8, attra- verso Mir7 (il nuovo server grafico di Ubuntu che sostituir`ail pluridecennale X8) `epronto per rendere quest’integrazione reale. Nella vision di Unity c’`eil completo interscambio fra ambiente Desktop e smartphone, un caso d’uso possibile tramite l’utilizzo di una docking station che collega il dispositivo mobile ad un monitor esterno.

Figura 1.3: Convergenza fra Desktop e Smartphone

Questo permette all’utente non solo di avere gli stessi dati sempre a di- sposizione, senza l’utilizzo di software di terze parti per la sincronizzazione (cloud, ad esempio), ma soprattutto permette l’utilizzo delle stesse applica- zioni che, grazie al livello di astrazione offerto dall’interfaccia, si adeguano automaticamente alla grandezza del display e ai nuovi dispositivi di input. Questo risultato `estato possibile abbandonando le librerie grafiche GTK+9, sulle quali `ebasato il Desktop Environment GNOME10 finora utilizzato da

7Mir, the next generation display server http://unity.ubuntu.com/mir/ 8X Widnows System http://www.x.org/wiki/ 9The GTK+ Project http://www.gtk.org/ 10GNOME Project Homepage http://www.gnome.org/

11 1.4 Il primo dispositivo con Ubuntu Touch 1. Introduzione

Ubuntu, in favore delle librerie Qt11, framework assai pi`umoderno e pensato per velocizzare lo sviluppo di codice operativo in ambienti eterogenei. Lo sviluppatore che sceglie Ubuntu come piattaforma per la propria appli- cazione `equindi doppiamente invogliato: se da una parte ha un framework grafico nuovo e potente, dall’altra ha la possibilit`adi scrivere una singola applicazione che viene resa automaticamente disponibile sia per la versione Desktop che per quella smartphone, in maniera trasparente e direttamente dal sistema, abbattendo quindi i costi di produzione e di manutenzione del codice di progetti semi-cloni.

1.4 Il primo dispositivo con Ubuntu Touch

Dopo quasi un anno dall’annuncio della collaborazione fra Canonical e Bq12, nel febbraio del 201513 `estato messo in vendita il primo smartphone con Ubuntu Touch pre-installato: il BQ Aquaris E4.514. Il dispositivo ha dimesioni 137 x 68 x 9 mm e un peso di soli 123 grammi. E` dotato di due slot per l’inserimento di micro-SIM per poter usufruire di pi`u numeri telefonici contemporaneamente. Ha una fotocamera da 8 megapixel Full HD 1080p con autofocus e doppio flash. Il display `eda 4.5 pollici. Monta un processore Quad Core Cortex A7 da 1.3 GHz e RAM da 1 GB. Una memoria interna da 8 GB con uno slot esterno per inserire MicroSD fino a 32 GB. Il prezzo attuale `epari a 170 Euro ed `evenduto solo nel mercato europeo. Ulteriori dispositivi sono attesi nell’immediato futuro.

11Qt Project homepage http://qt-project.org/ 12Canonical announces first partners to ship Ubuntu phones https://insights.ubuntu.com/?p=5224 13BQ’s new Aquaris E4.5 Ubuntu Edition – the smartphone that puts content and services at your fingertips https://insights.ubuntu.com/?p=9567 14Aquaris E4.5 Ubuntu Edition http://www.bq.com/gb/ubuntu.html#aquaris-e4-5

12 1. Introduzione 13

Figura 1.4: Anteprima di Bq Aquaris E4.5 Ubuntu Edition

Informazioni su Bq

Bq `eun’azienda spagnola che produce componenti elettronici e sviluppa software. E` fra le principali aziende a livello europeo nell’ambito tecnologico, con una presenza in circa 40 Paesi. Opera principalmente nel settore dei dispositivi multimediali, stampanti 3D e robotica per l’educazione, annove- rata per essere una delle compagnie pi`uvicine alla filosofia del DIY (Do It Yourself) e dell’Open Source.

13 1.5 Ubuntu Core nell’Internet of Things 1. Introduzione

1.5 Ubuntu Core nell’Internet of Things

Il fondatore di Canonical, Mark Shuttleworth, nel dicembre del 2014 ha annunciato Ubuntu Core15, una nuova versione di completa rottura con la tradizione di Ubuntu. Ubuntu Core16 si allontana completamente dall’architettura base che negli ultimi 10 anni ha caratterizzato questo sistema operativo, e introduce un nuo- vo concetto di applicazioni chiamate Snappy che operano in contesti isolati, aumentando quindi la sicurezza e la modularit`adell’intera distribuzione. Dal punto di vista del codice e delle librerie messe a disposizione, Ubuntu Core risulta essere nient’altro che un’immagine notevolmente ridotta della versione Server17 e richiede pochissimo spazio per l’installazione, dal pun- to di vista architetturale corrisponde invece ad una naturale evoluzione di Ubuntu Touch, pi`ulontana dal concetto di telefonino e pi`uvicina a quella di smartdevice. Proprio grazie alla sua limitata dimensione, alla grande modularit`ae alla astrazione del dispositivo fisico introdotta dalla nuova architettura, Ubuntu Core si presta bene alle esigenze dell’Internet of Things.

1.5.1 Architettura Snappy

L’architettura Snappy `ecostituita da tre livelli principali: il livello di Sistema Operativo (insieme dei driver e dell’astrazione hardware del dispo- sitivo), il livello Framework (l’ambiente applicativo e l’insieme delle librerie disponibili per un applicazione) e il livello Application (livello applicativo, comunemente accorciato in App) . Le applicazioni sono eseguite quindi su un ambiente personalizzato e di- sgiunto dal resto del sistema. In questo modo `epossibile eseguire la stessa applicazione in configurazioni di dispositivo diverse e/o con librerie diverse

15Announcing Ubuntu Core, with snappy transactional updates! http://www.markshuttleworth.com/archives/1434 16Snappy Ubuntu https://developer.ubuntu.com/en/snappy/ 17Ubuntu Server http://www.ubuntu.com/server

14 1. Introduzione 15

Figura 1.5: Architettura delle applicazioni Snappy per testarne a pieno il funzionamento, e anche avere sullo stesso dispositivo applicazioni che altrimenti fra loro sarebbero completamente incompatibili. La suddivisione in livelli aumenta anche la sicurezza dell’intero sistema, un’applicazione maligna non pu`oattaccare il funzionamento di altre se non sono nel proprio Framework, perch´ecompletamente confinata. Anche l’ag- giornamento del sistema si rivoluziona completamente, con la possibilit`adi creare dei framework di transizione dove applicare i cambiamenti prima di inserirli nel sistema, cosicch´ese qualcosa non va a buon fine il sistema non `e mai in uno stato inconsistente.

1.6 Outline

In questo documento si studier`alo stato dell’arte di Ubuntu Touch, se ne analizzer`ala piattaforma e i suoi componenti principali come il nuovo server grafico, l’interfaccia utente Unity e il nuovo formato dei pacchetti Click. Si discuteranno la struttura, il comportamento e l’interazione delle ap- plicazioni, sia quelle sviluppate utilizzando il linguaggio QML, sia quelle in HTML5 e degli Scope, i motori di ricerca innovativi di Ubuntu. Si stenderanno informazioni dettagliate di come vengono gestiti gli ag- giornamenti di sistema, con particolare attenzione all’implementazione dei vari componenti, come ad esempio il server, il client e di come sono gestiti i canali e la promozione delle immagini.

15 1.6 Outline 1. Introduzione

Infine, si mostrer`aquanto semplice sia installare il sistema operativo su uno dei dispositivi ufficialmente supportati e quanto veloce sia la produzione di nuovo codice e di applicazioni attraverso Ubuntu SDK. Per dimostrare ci`o si `esviluppato un nuovo Scope, una delle tecnologie innovative di Ubuntu Touch, che effettua ricerche e verifica la disponibilit`adei volumi nel database della Biblioteca Universitaria Dore della Facolt`adi Ingegneria di Bologna.

16 Capitolo 2

La piattaforma

Ubuntu Touch `e,come tutte le piattaforme moderne, suddiviso in due super blocchi concettuali, uno per il kernel e uno per lo userspace.

Figura 2.1: Schema della piattaforma di Ubuntu Touch

A livello kernel si distinguono due blocchi interessanti, l’Hardware Ab- straction Layer (HAL) e l’Ubuntu Middleware che offrono alle strutture di

17 2.1 Il server grafico Mir 2. La piattaforma

pi`ualto livello un astrazione del dispositivo fisico e delle sue periferiche. E` utile far notare che nell’Ubuntu Middleware sono presenti parti di codice Android per l’accesso ai vari device. A livello userspace si trovano invece tutti le parti che contraddistinguono Ubuntu Touch:

ˆ Mir - il server grafico sviluppato ad-hoc per gestire nuovi tipi di input

ˆ Unity - l’interfaccia grafica, detta anche Shell

ˆ Ubuntu Platform SDK - che offre, attraverso API, l’accesso ai servizi di sistema e alle periferiche hardware

ˆ Scopes - servizi per la ricerca di contenuti

ˆ Apps - le applicazioni standard

2.1 Il server grafico Mir

Mir `eun componente a livello di sistema sviluppato per sostituire il vecchio server grafico X in dispositivi mobili e Desktop. L’intero progetto si divide in due grandi librerie:

ˆ libmiserver - contiene i componenti lato server di Mir, usata per imple- mentare un compositor e per far comunicare il sistema con la scheda video e i display

ˆ libmirclient - contiene le API per far comunicare le applicazioni con i server Mir, usata dai toolkit grafici

2.1.1 Struttura interna

Ad oggi la struttura interna di Mir `eformata dai seguenti componenti1:

1Mir specifiche https://wiki.ubuntu.com/Mir/Spec

18 2. La piattaforma 19

Figura 2.2: Struttura interna di Mir

ˆ Compositor Genera il buffer finale da mostrare a display e applica le trasformazioni (geometriche, ombre) alle surface (finestre) conosciute.

ˆ Input managment Inoltra gli eventi dai dispositivi di input al display server e alle applicazioni/client in ascolto.

ˆ Inter-app data exchange Si occupa della gestione della clipboard e delle funzionalit`adi drag’n’drop.

ˆ Application managment Associa ad ogni surface/finestra l’applica- zione relativa.

ˆ Ouput managment Gestisce i monitor.

ˆ Shell Implementa le funzionalit`adi gestione delle finestre, disegna gli elementi dell’interfaccia utente (dash, launcher, ...) e gestisce gli eventi di sistema dei dispositivi di input.

19 2.2 Unity 2. La piattaforma

2.2 Unity

Sin dal 2010, quando Unity venne creata, uno dei requisiti principali del progetto era la convergenza fra sistemi eterogenei, affinch´el’interfaccia fosse in grado di auto adattamento su display di diverse dimensioni. Questo concetto, con il passare del tempo, `ediventato sempre pi`uforte, fino a ad essere considerato la parte chiave del progetto con l’annuncio di Ubuntu Touch.

Figura 2.3: Diagramma concettuale della Shell, l’interfaccia utente di Unity

Per questo motivo, il codice `estato completamente rivisto ed `estato creato un progetto parallelo chiamato Unity8 che rappresenta l’evoluzione logica di Unity, creata prima per i Desktop, adattata (per un breve periodo di tempo) alla TV ed infine propagata ai display di smartphone e tablet.

2.2.1 Propriet`ae requisiti

Fra i requisiti ultimi di Unity8, che si sono poi trasformati in codice e quindi propriet`auniche di Unity, troviamo2:

2Specifiche di Unity8 https://wiki.ubuntu.com/UnityNextSpec

20 2. La piattaforma 21

ˆ Facilit`adi adattamento a diverse forme e grandezze di monitor, con ottimizzazione dell’interfaccia in base alle propriet`adel dispositivo

ˆ Continuit`adi design attraverso dispositivi diversi, presentando all’u- tente sempre la stessa consistente interfaccia

ˆ Efficienza e utilizzo del minimo numero di risorse, per far fronte alla povert`adi risorse e di potenza di calcolo degli attuali dispositivi mobili

ˆ Essere indipendente dal dispositivo utilizzato, e non dipendere da spe- cifiche propriet`ahardware di un dispositivo, come periferiche di in- put particolari (ad esempio touchscreen) cos`ıda garantire una facile transizione fra ambienti di esecuzione diversi

2.2.2 Architettura di sistema

Unity `eessenzialmente un controllore di applicazioni e gestore di even- ti. Gli eventi esterni possono essere originati da periferiche, temporizzatori, animazioni o da altre parti del sistema.

Gestione delle applicazioni

Unity estende la nozione classica di gestore di finestre, elevandolo ad concetto di contenitore di istanze di applicazioni, le quali possono avere zero o pi`ufinestre contemporaneamente. Ridefinisce anche il concetto di finestra, come surface (superficie) sullo schermo, capace di ricevere eventi di input. Unity si trasforma e diventa pertanto un gestore di applicazioni, pi`uche di finestre. Per permettere questo, Unity implementa nuove funzionalit`aper:

ˆ rimuovere e assegnare il focus alle applicazioni

ˆ terminare un’istanza di un’applicazione

ˆ avviare una nuova istanza di un’applicazione

21 2.2 Unity 2. La piattaforma

Figura 2.4: Architettura di Unity

Eventi di input

Unity intercetta gli stream di eventi prima che questi vengano inoltrar- ti alle applicazioni, li gestisce al meglio per avere il totale controllo dei componenti a livello di sistema.

Gestione del Display

Unity `eresponsabile della gestione dei monitor (singoli, multipli, cloni, ...). Il componente che se ne `eoccupa `echiamato DisplayManager ed `e responsabile di rilevare cambiamenti di stato nella configurazione dei monitor, in modo da permetter l’auto adattamento della Shell.

Tic unificato e tempo interno

Unity fa pesante uso di animazioni e transizioni di stato per creare una piacevole e reattiva interfaccia utente. Per assicurarsi che le animazioni siano

22 2. La piattaforma 23 perfettamente sincronizzate con il resto del sistema `estato introdotto un tic o tempo interno condiviso in tutto il sistema.

2.2.3 Tecnologie usate e integrazione nel sistema

Unity `estata sviluppata utilizzando Qt (librerie grafiche) e QML (linguag- gio di programmazione dichiarativo basato su JavaScript) 3 per la creazione degli effetti grafici, le quali utilizzano a loro volta lo stack OpenGL4.

Figura 2.5: Integrazione di Unity in Ubuntu Touch

Per la gestione degli eventi invece si `escelto Mir, il server grafico, che si comporta come un abstraction layer con l’hardware sottostante, permettendo a Unity di adattarsi facilmente a dispositivi diversi.

3Qt Modeling Language http://doc.qt.io/qt-5/qmlapplications.html 4OpenGL homepage https://www.opengl.org/

23 2.2 Unity 2. La piattaforma

2.2.4 Personalizzazioni e punti di estensioni

Unity offre due principali punti di estensione per sviluppatori:

ˆ indicatori personalizzati per permettere accesso a particolari funziona- lit`adel sistema

ˆ Scope personalizzati per mostrare contenuti specifici e custom all’utente

Figura 2.6: Punti di estensione in Unity

API per gli indicator

Gli indicator in Unity sono delle entit`agrafiche che rappresentano gli stati di un applicazione o di un sottosistema (ad esempio, lo stato della rete). Gli indicator possono essere sia icone che etichette, e possono avare un menu associato. Il menu presenta delle voci che danno informazioni sullo stato dell’applicazione o offrono azioni per cambiarne lo stato (ad esempio, selezionare una rete WiFi a cui connettersi). Per questo motivo, la logica di un indicator risiede direttamente nella sua applicazione. E` utile far notare

24 2. La piattaforma 25 che, a seconda del display in uso, gli indicator potrebbero occupare posizioni diverse in Unity.

API per gli Scope

Uno Scope in Unity `eun entit`ache rende determinati dati sia ricercabili che accessibili direttamente dalla Dash. Questi dati possono essere di natura diversa, come musica, video, fotografie, applicazioni, condizioni meteorologi- che, sia presenti fisicamente sul proprio dispositivo, sia disponibili in Internet. Per questo motivo, l’interfaccia di uno Scope `epensata per essere in grado sia di accettare una stringa come parametro di ricerca, sia di restituire il risultato sotto forma di una struttura dati conosciuta a Unity. E` utile far notare che pi`uScope possono essere attivi contemporaneamente durante una ricerca.

2.2.5 Modello base dell’interfaccia

Un’anteprima del modello base dell’interfaccia utente `eriportata in Figu- ra 2.7. Gli indicator e la barra del menu sono accessibili dal lato superiore. Fare swipe sul lato destro del dispositivo riporta in primo piano l’applica- zione precedente. I controlli dell’applicazione si trovano sul lato inferiore del dispositivo. Per lanciare le applicazioni o visualizzare la Dash `esufficiente fare swipe sul lato sinistro.

2.3 Click - un nuovo formato dei pacchetti

In Ubuntu Touch `estato sviluppato un nuovo formato per i pacchetti con il nome di Click5. Questo formato specifica come le applicazioni sono scaricate sui dispositivi, come vengono pacchettizzate e come si installano attraverso i .

5Click documentazione ufficiale https://click.readthedocs.org/en/latest/

25 2.3 Click - un nuovo formato dei pacchetti 2. La piattaforma

Figura 2.7: Modello base dell’interfaccia utente

Click `estato sviluppato per facilitare la creazione di pacchetti e per sem- plificare la gestione degli archivi, in modo da garantire facile scalabilit`adei server principali. Click controlla anche che durante la fase di installazione il pacchetto non esegui, con i privilegi di root, operazioni non verificate sul sistema ospitante. Nella versione 0.4 le specifiche aggiungono la possibilit`a di includere nel pacchetto del codice di terze parti. Click `ebasato su dpkg6, per ulteriori informazioni sulla creazione di pacchetti si rimanda alla documentazione ufficiale di Debian7. Il pacchetto risultante dalla compilazione `eun archivio di tipo ar8 che a

6Debian Package http://it.wikipedia.org/wiki/Dpkg 7Debian - Guida per il nuovo Maintainer https://www.debian.org/doc/manuals/maint- guide/ 8ar command line http://unixhelp.ed.ac.uk/CGI/man-cgi?ar

26 2. La piattaforma 27 sua volta contiene archivi di tipo tar con file di controllo e di dati.

2.3.1 Il file control

Essendo basato su , click estende i file di controllo di quest’ultimo. In aggiunta al file control classico di Debian, `enecessario specificare ulteriori informazioni utili alla compilazione del pacchetto in Click, come il campo Click-Version che dichiara la versione di Click compatibile con il file. Altri campi sono automaticamente copiati dal file manifest per facilitare l’interoperabilit`ae la retro-compatibilit`acon vecchi package manager basati su dpkg.

2.3.2 Il file manifest

Il file manifest `eun nuovo file (JSON UTF-8) aggiunto all’architettura dpkg nelle specifiche di Click.

Campi obbiligatori

Il file manifest.json `eobbligatorio nei pacchetti sorgenti e deve includere necessariamente le seguenti chiavi:

ˆ name: nome unico dell’applicazione

ˆ version: numero di versione dell’applicazione

ˆ framework: la piattaforma di sistema per il qualche il pacchetto `e stato compilato

ˆ installed-size: la grandezza del pacchetto dopo la decompressione (questo campo viene generato automaticamente durante la compilazio- ne)

Sono considerati pacchetti corrotti tutti quelli che non presentano una di queste voci o che ne hanno valore incompatibile.

27 2.3 Click - un nuovo formato dei pacchetti 2. La piattaforma

L’implementazione dei package manager deve rifiutarsi di processare pac- chetti che dichiarano un framework diverso da quello del sistema in esecu- zione. Esempi di framework validi sono “ubuntu-sdk-14.10-qml” o “ubuntu- sdk-15.04-html”. Il valore del nome identifica univocamente l’applicazione e segue le regole dei nomi nei pacchetti Debian9. Il nome `eunico in tutto l’ecosistema Ubuntu e per la sua scelta `esuggerita la convezione usata per i pacchetti Java, ad esempio “com.miodominio.miaapp”. Il valore della versione fornisce un numero di versione unico per l’appli- cazione e segue le regole di versioning di Debian, per maggiori informazioni si rimanda alla documentazione ufficiale10.

Campi opzionali

Il file manifest pu`ocontenere campi opzionali, utili alla descrizione del pacchetto:

ˆ title: breve titolo (su una riga) dell’applicazione.

ˆ description: descrizione estesa (multi riga) dell’applicazione.

ˆ maintainer: nome e indirizzo email del mantenitore del pacchetto.

ˆ architecture: una stringa (sono permessi valori multipli) per l’archi- tettura con cui l’applicazione `ecompatibile. Il valore “all” indica tutte le architetture.

ˆ hooks: routine di sistema necessari in fase di installazione, aggiorna- mento e rimozione del pacchetto, per maggiori informazioni si rimanda alla documentazione ufficiale11.

9Policy dei nomi dei pacchetti Debian https://www.debian.org/doc/debian-policy/ch- controlfields.html#s-f-Source 10Policy delle versioni dei pacchetti Debian https://www.debian.org/doc/debian- policy/ch-controlfields.html#s-f-Version 11Hooks in Click https://click.readthedocs.org/en/latest/hooks.html

28 2. La piattaforma 29

ˆ icon: nome dell’icona o percorso al file da usare per mostrare il pac- chetto nei package manager.

29 2.3 Click - un nuovo formato dei pacchetti 2. La piattaforma

30 Capitolo 3

Le applicazioni

L’ecosistema applicativo di Ubuntu Touch `ein costante crescita. Gior- no dopo giorno, un numero sempre maggiore di nuove applicazioni viene sviluppato e reso pubblico agli utenti. Ubuntu `egi`acompleto di tutte le applicazioni basi, necessarie all’utilizzo quotidiano del sistema, applicazioni sviluppate (interamente o sotto la supervisione) dagli ingegneri Canonicali e testate dalla comunit`ainternazionale. In Ubuntu esistono applicazioni di due tipi, HTML5 o native. Le ap- plicazioni HTML5 sfruttano le diffusissime tecnologie web per creare soft- ware completi e si inseriscono perfettamente nel design della piattaforma Ubuntu. Le applicazioni native sono invece sviluppate in QML, un nuovo meta-linguaggio di programmazione, e hanno il vantaggio di avere un totale controllo dell’interfaccia grafica e dell’accesso al sistema rivelandosi la scelta ideale ad esempio per giochi e applicazioni ad-hoc.

Guide linea per lo stile A chi sceglie di sviluppare in Ubuntu `echiesto di seguire le principali linee guide1 per il Design e lo stile, questo per garantire continuit`agrafica fra il sistema base e le applicazioni di terze parti.

1Ubuntu App Design Vision https://design.ubuntu.com/apps/get-started/ui-model

31 3.1 Ciclo di vita delle applicazioni 3. Le applicazioni

Pubblicare il proprio lavoro Tutte le applicazioni sono pubblicate e rese disponibili agli utenti tramite il Software Store di Ubuntu. Per maggiori informazioni sulla pubblicazione di nuovi programmi si rimanda alla guida ufficiale2.

3.1 Ciclo di vita delle applicazioni

Il ciclo di vita delle applicazioni in Ubuntu `estato pensato per essere semplice, sicuro ed efficiente a fronte di una migliore gestione dei consumi energetici.

Figura 3.1: Ciclo di vita di un’applicazione in Ubuntu Touch

Gli stati in cui un’applicazione pu`otrovarsi sono:

Focused L’applicazione `ecertamente in esecuzione, visibile all’utente e ha accesso a tutte le risorse necessarie.

2Pubblicare Applicazioni su Ubuntu https://developer.ubuntu.com/en/publish/

32 3. Le applicazioni 33

Unfocused L’applicazione pu`onon essere in esecuzione (ad esempio, `ein at- tesa che gli venga assegnata la CPU). Nello scenario di dispositivi smartphone, l’applicazione non `evisibile all’utente.

Killed Il processo dell’applicazione `estato rimosso dalla memoria prin- cipale.

Stopped L’applicazione ha ricevuto un segnale di SIGSTOP ed `ein pausa.

Stateless L’applicazione `ein attesa di rimozione o di un reset dopo aver ricevuto un segnale di SIGKILL e il suo processo non `epi`uin un stato consistente.

Per ulteriori informazioni sulla gestione dei consumi energetici e sul ciclo di vita delle applicazioni si rimanda al Blueprint relativo3.

3.2 Accesso alle risorse e scambio di contenu- ti tramite Content Hub

Tutte le applicazioni accedono al sistema utilizzando AppArmor4, un modulo di sicurezza che confina le applicazioni ad un limitato set di risorse. AppArmor `eun sistema di Mandatory Access Control (MAC) inserito nel kernel di Linux con una gestione dello controllo degli accessi pi`uorientata ai programmi che agli a utenti (in Apple viene usato un modulo simile chiamato XNU Sandbox5). Ogni applicazione dichiara un profilo di configurazione per AppArmor basato sulle impostazione del proprio Manifest (per ulteriori informazioni si rimanda alla pagina Wiki dedicata6).

3Add app-model and -lifecycle to platform api https://blueprints.launchpad.net/ubuntu/+spec/client- 1303-add-app-model-and-lifecycle-to-platform-api 4AppArmor homepage http://apparmor.net/ 5Douglas Comer, Operating System Design – The XINU approach, Prentice-Hall, 1984, ISBN 0-13-637539-1, https://www.cs.purdue.edu/homes/dec/osbooks.html 6Manifest file - security https://wiki.ubuntu.com/SecurityTeam/Specifications/ApplicationConfinement/Manifest

33 3.2 Accesso alle risorse e scambio di contenuti tramite Content3. Le Hub applicazioni

Le applicazioni hanno diritto di lettura e scrittura solo nelle proprie car- telle. Per permettere lo scambio e la condivisione di contenuti fra applicazioni diverse si fa uso di un servizio chiamato Content Hub7. In Ubuntu for Phone, ogni singolo contenuto ha uno e un solo proprietario, non esiste ad esempio un applicazione che ha diritto di possesso su tutte le im- magini della galleria, e ogni tipo di contenuto ha un’applicazione predefinita che lo gestisce, ad esempio l’applicazione di default per gestire le fotografie del dispositivo `eGalleria. Le applicazioni si registrano per gestire un tipo di contenuto, in questo modo il sistema riesce a visualizzare all’utente una lista di applicazioni da scegliere per portare a termine la propria azione, co- me ad esempio al modifica di una fotografia. A livello implementativo, il contenuto trasferito da un’applicazione all’altra `e un oggetto che mantiene in memoria l’applicazione sorgente, l’applicazione destinazione, il contenuto e un’informazione di stato. Per salvare un contenuto modificato si fa uso di ContentStore, un servizio offerto dalle API del Content Hub. E` utile far notare che ad oggi Content Hub non risulta ancora completo.

3.2.1 Scenario di un’applicazione che importa conte- nuti

1. L’applicazione destinazione, attraverso le API di Content Hub, fa ri- chiesta di importo del contenuto.

2. Il Content Hub crea l’oggetto di trasferimento e lo ritorna all’appli- cazione richiedente, connettendola all’applicazione sorgente; il Content Hub avvia ed esegue l’applicazione sorgente in modalit`atrasferimento.

3. L’utente attraverso l’applicazione sorgente seleziona il contenuto da importare (ad esempio, le immagini delle galleria). L’applicazione sorgente cambia lo stato dell’oggetto trasferimento a Pronto.

7Content Hub Guide https://developer.ubuntu.com/en/apps/platform/guides/content- hub-guide/

34 3. Le applicazioni 35

4. L’applicazione destinazione rileva lo stato Pronto del trasferimento e importa il contenuto.

5. L’utente modifica, eventualmente, il contenuto importato e fa uso del ContentStore per salvarlo in maniera persistente.

3.2.2 Scenario di un’applicazione che esporta contenu- ti

1. L’applicazione sorgente si registra presso il Content Hub come sorgente per un determinato tipo di contenuto.

2. L’applicazione sorgente implementa la modalit`atrasferimento che il Content Hub invoca per effettuare lo scambio.

3. La modalit`adi trasferimento deve permette all’utente di selezionare il contenuto da importare.

4. L’applicazione deve cambiare lo stato dell’oggetto trasferimento indi- cando che il contenuto `epronto.

3.2.3 Registrare un’applicazione come sorgente o de- stinazione

Per registrare un’applicazione come sorgente o destinazione si fa uso degli hooks di Click nel file manifest.json. Segue un esempio:

{ ... "hooks":{ "APPNAME":{ "apparmor": "APPNAME.apparmor", "content-hub": "APPNAME.content.json", "desktop": "APPNAME.desktop"

35 3.2 Accesso alle risorse e scambio di contenuti tramite Content3. Le Hub applicazioni

}, ... } ... }

Gli hooks sono quindi una lista di dizionari che specificano le varie infor- mazioni sulle applicazioni con cui si vuole scambiare contenuti. Se un’appli- cazione vuole registrarsi come sorgente per un determinato tipo di contenuto deve aggiungere le proprie informazioni alla lista. Segue un esempio del file APPNAME.content.json di un’applicazione che si registra come destinazione e sorgente per i contenuti di tipo pictures e video:

{ "destination":[ "pictures", "videos" ], "source":[ "pictures", "videos" ] }

Ecco un esempio del file APPNAME.apparmor della stessa applicazione:

{ "policy_groups":[ "networking", "content_exchange_source", "content_exchange" ],

36 3. Le applicazioni 37

"policy_version":1 }

In questo esempio content exchange `eil policy group di AppArmor che permettere all’applicazione sia di ricevere che di inviare contenuti, content exchange source `einvece necessaria solo nelle applicazioni sorgenti.

3.3 Applicazioni in HTML5

Le applicazioni scritte in HTML5 vengono eseguite in web container e sono completamente integrate nel sistema come un qualsiasi altro software. Il container web fornisce l’accesso ad una serie di API JavaScript8 che per- mettono l’accesso al sistema. Queste includono le API della piattaforma di Ubuntu (come il Content Hub, gli Account OnLine, le notifiche, etc ...) e le API Cordova9 che forniscono accesso al sistema e alle periferiche del dispositivo come fotocamera e accelerometri.

3.3.1 Esecuzione e debug

Le applicazioni scritte in HTML5 possono essere create attraverso Ubuntu SDK, che offre lo scheletro applicativo per un progetto base. Solitamente i file interessanti risiedono, all’interno del progetto, in cartella di nome www, per lanciare una di queste applicazioni `esufficiente digitare da terminale:

ubuntu-html5-app-launcher --www=www

Il container web `ebasato su WebKit10, un browser engine Open Source, e offre i medesimi tool di sviluppo di quest’ultimo. Aggiungendo infatti l’op- zione --inspector al comando precedente, il container web avvia l’Inspector

8HTML5 Ubuntu API https://developer.ubuntu.com/en/apps/html-5/api/ 9Apache Cordova homepage http://cordova.apache.org/ 10The WebKit Open Source Project https://www.webkit.org/

37 3.3 Applicazioni in HTML5 3. Le applicazioni

Figura 3.2: Anteprima dell’applicazione HTML5 base in Ubuntu SDK

server, il servizio predefinito di debug, e ne stampa a video l’URL. Aprendo l’URL con un browser basato su WebKit (come Chrome11 o Chromium12) `e possibile accedere alla modalit`adi debug. Ecco un esempio dell’output:

Inspector server started successfully. Try pointing a WebKit browser to http://192.168.0.3:9221

3.3.2 Descrizione dei file principali

Creando un nuovo progetto per un’applicazione HTML5 in Ubuntu SDK, molti file vengono auto generati. Nella cartella www si trovano tutti i file relativi all’applicazione (CSS, JavaScript, immagini) e il file index.hml, che importa tutto il necessario per l’esecuzione e definisce la struttura grafica dell’applicazione.

11Google Chrome https://www.google.com/chrome/ 12The Chromium browser web http://www.chromium.org/Home

38 3. Le applicazioni 39

Figura 3.3: Vista della modalit`adi debug in Chromium

Il file www/js/app.js `eil JavaScript base per un applicazione HTML5, nel quale va aggiunto il comportamento e il controllo del software. In esso si trova l’inizializzazione dell’interfaccia utente tramite uso delle API: window.onload= function(){ var UI= new UbuntuUI(); UI.init(); ... }

Nell’esempio mostrato, l’interfaccia `einizializzata all’interno di una fun- zione anonima che fa da event handler per l’evento window.onload, un evento generato quando il Document Object Model (DOM)13 `ecompleta- mente caricato in memoria. Il framework grafico viene successivamente ini- zializzato tramite la chiamata a funzione UI.init(). Segue la descrizione di altri file importanti per il progetto:

ˆ APPNAME.desktop: Il file utilizzato dal sistema per gestire e lan- ciare l’applicazione. Le specifiche di questo file sono dettate dal pro-

13Document Object Model (DOM) http://www.w3.org/DOM/

39 3.3 Applicazioni in HTML5 3. Le applicazioni

getto freedesktop.org 14. Qui si nota il campo Exec, che dichiara il comando di esecuzione dell’applicazione (come riportato precedente- mente), e i campi Name e Icon che specificano il nome dell’applica- zione il path dell’icona (di solito locale all’applicazione) che il sistema visualizza all’utente.

ˆ APPNAME.ubuntuhtmlproject: file utilizzato da Ubuntu SDK per gestire il progetto dell’applicazione.

ˆ APPNAME.apparmor: il file con le specifiche per la configurazione di AppArmor, qui sono dichiarati i gruppo di accesso per i permessi.

ˆ manifest.json: file con le specifiche per la compilazione dell’applica- zione con Click.

3.3.3 Struttura dell’HTML5 in Ubuntu

Ubuntu HTML5 `el’insieme di tutti i markup (tag o etichette) che sono aggiunti all’HTML5 base per sviluppare a pieno l’interfaccia utente delle applicazioni in modo che siano completamente integrate nel sistema. E` utile subito definire i layout disponibili per le applicazioni. In Ubuntu ne troviamo due principali:

ˆ Un header con tabitems quando un utente clicca su un tabitem, la GUI ne mostra il contenuto. E` di solito chiamato anche layout “Flat” navigation, perch´ele tab sono tutte sullo stesso livello e l’utente le naviga orizzontalmente, facendo clic sull’header.

ˆ Un pagestack di pagine: l’utente naviga le pagine in maniere verticale e utilizza di solito un pulsante di “Indietro” per tornare al contenuto precedente. E` anche chiamato layout “Deep” navigation.

14Desktop Entry Specification http://standards.freedesktop.org/desktop-entry- spec/latest/

40 3. Le applicazioni 41

I widget pi`uimportanti sono quelli classici di una normale interfaccia utente: tab, pagestack/page, button, dialog, list, shape, popover, footers, etc... e sono dichiarati nel file index.html sotto forma di elementi HTML. Nessun nuovo elemento `estato introdotto nello standard, i widget sono infatti dichiarati attraverso l’uso dell’attributo data-role, che ne specifica il tipo. Ecco alcuni esempi: lista

dialog
pulsante