# Unity (software)

Unity è una shell (interfaccia) per l'ambiente desktop GNOME sviluppata da Canonical per il suo sistema operativo Ubuntu, ha debuttato per la prima volta nella versione 10.10 di Ubuntu Netbook Edition.
La prima versione alpha venne pubblicata nel 2010.

## Storia

Ubuntu ha tradizionalmente utilizzato il completo ambiente desktop fornito da GNOME. Tuttavia, a partire dalla versione 11.04, Mark Shuttleworth, il fondatore di Canonical, ha scelto di sviluppare ed utilizzare un ambiente diverso da GNOME Shell a causa di divergenze sulle scelte tecniche prese dal gruppo di sviluppatori a capo del progetto GNOME. Unity, essendo basata su GNOME, supporta tutti i programmi per questo ambiente.
A partire dalla versione 11.04, Unity è diventata l'interfaccia predefinita di Ubuntu, riscontrando un controverso successo: pur essendo tra le interfacce più diffuse nel mondo Linux, e pur rimanendo possibile comunque installare Gnome 3, sono fiorite diverse distribuzioni (come Linux Mint) volte a riportare l'esperienza "classica" di Gnome 2, nelle quali, al posto dei DE disponibili su Ubuntu, vengono utilizzate altre interfacce grafiche come Cinnamon o MATE. Il 4 marzo 2013 è stato annunciato Unity Next, la nuova versione di Unity successivamente rinominata Unity 8, che consisteva in una nuova riscrittura utilizzando il toolkit Qt ed nuovo server grafico Mir. Il 5 aprile 2017 è stato annunciato da Mark Shuttleworth che a partire dalla versione 18.04 di Ubuntu la shell predefinita torna ad essere la shell di default di GNOME, chiamata GNOME Shell.
Subito dopo l'annuncio dell'abbandono da parte di Canonical , lo sviluppo di unity 8 è stato portato avanti inizialmente dal progetto Yunit e, dal febbraio 2018, dal progetto UBports. Lo sviluppo è tuttora in corso, sotto il nuovo nome "Lomiri", e nel prossimo futuro, grazie ai progressi di Mir, il cui sviluppo continua ad essere portato avanti da Canonical e da alcuni sviluppatori del progetto UBports, Lomiri dovrebbe diventare compatibile con il protocollo Wayland.
Anni dopo l'abbandono di Unity in favore di GNOME da parte di Canonical, la shell nella sua versione 7, cioè la più sviluppata e completa per l'utilizzo sul desktop, viene mantenuta da una comunità di sviluppatori che provvede affinché il software mantenga la compatibilità con le nuove versioni di Ubuntu. Lo sviluppo è più lento e più concentrato sulla manutenzione del codice piuttosto che sull'introduzione di nuove funzionalità.
In un sondaggio effettuato da Canonical nel dicembre 2019, che ha visto quasi 21900 partecipanti, alla domanda sul Desktop Enviroment da utilizzare o le caratteristiche da integrare nella versione 20.04 di Ubuntu, circa il 30% delle risposte aperte auspicava il ritorno di Unity, pur non essendo questa l'interfaccia predefinita sulla distro ormai da anni.

## Caratteristiche generali

Utilizza le librerie nux (un toolkit basato su OpenGL) e in Ubuntu è implementata con diverse applicazioni di GNOME, utilizzando anche molte dipendenze di tale ambiente desktop. Concepita inizialmente per l'ultilizzo sui netbook (Ubuntu Netbook Remix), si è successivamente notato che funzionalità ritenute inizialmente utili solo per i piccoli schermi fossero adatte anche all'utilizzo in ambito desktop.
Dalla versione di Ubuntu 11.04 le due distribuzioni (quella desktop e quella per netbook) sono state così unificate.
Utilizza Compiz come gestore di finestre. La maggiore velocità di Compiz è stato uno dei motivi principali che ha spinto Canonical a scegliere Unity rispetto a GNOME 3 (che utilizza il compositing Mutter).

## Descrizione tecnica

L'ambiente desktop Unity è composto da tre componenti principali: il lanciatore, il pannello superiore e la Dash.

### Lanciatore

Il lanciatore (launcher) è una barra che permette di lanciare direttamente le applicazioni impostate dall'utente come preferite sia visualizzare le applicazioni in esecuzione e le memorie esterne collegate.
Inizialmente la barra era fissa verticale posta a sinistra lungo tutta l'altezza dello schermo ma con successivi sviluppi del DE la si è potuta rendere a scomparsa e/o posizionarla orizzontalmente sul bordo inferiore dello schermo.
L'unico componente non rimovibile è il lanciatore della dash, mentre il resto degli applicativi che vi rimangono visualizzati, anche se non attivi, possono essere scelti dagli utenti, sebbene una raccolta di software sia preimpostato come preferito all'atto della prima installazione. Tramite le impostazioni del sistema è possibile attivare il lanciatore del cestino come anche quello per selezionare gli spazi di lavoro.
Il lanciatore mostra a fianco di ogni icona se e quante istanze sono in esecuzione del corrispondente applicativo. Per alcuni software compatibili, o resi tali tramite estensioni come nel caso di firefox, compaiono sovrimpresse, in caso di operazioni lunghe, una barra di avanzamento e, nel caso di eventi, una bolla con indicato il numero di notifiche.
Per alcuni software è supportata, in maniera predefinita o integrabile facilmente dall'utente, la possibilità di aprire l'applicativo in particolari modalità tramite un menù a comparsa (chiamata Quicklist o Jumplist) in caso di click con il pulsante destro del mouse; per esempio il file manager può essere aperto con il tasto sinistro nella cartella dell'utente mentre con il tasto destro si può selezionare direttamente dalla quicklist una delle cartelle principali interne alla cartella utente.
Il lanciatore è utilizzabile anche tramite tastiera dopo aver schiacciato il tasto SUPER che attiva la possibilità di scorrere con i tasti freccia tra gli applicativi elencati o lanciare direttamente l'applicativo con un tasto numerico.
Una funzionalità non presente è la possibilità di iconizzare un applicativo aperto schiacciando sulla relativa icona nel lanciatore.

### Pannello superiore

Il pannello superiore invece mostra il titolo della finestra attiva e il menù della stessa, nascosto a meno che non vi si porti sopra il mouse. Nel pannello trovano posto anche i cosiddetti "indicatori", generalmente icone per la gestione della sessione, dei messaggi email, delle chat senza risposta, del volume del suono e della eventuale batteria.

### Dash

La Dash è una interfaccia per cercare e avviare le applicazioni e file presenti nel sistema e, se desiderato dall'utente, anche contenuti online. Questa interfaccia, richiamabile dalla prima icona del lanciatore, è estendibile tramite le Lens, dei contesti nella quale effettuare la ricerca, un esempio può essere la lens relativa alla ricerca di musica presente nel sistema o alla ricerca di video presenti su YouTube.
Attraverso la pressione del tasto alt di default, viene richiamata un'interfaccia detta HUD (Head-Up Display), che consente di effettuare delle ricerche all'interno del menù dell'applicazione in esecuzione e degli indicatori del pannello, permettendo di effettuare alcune operazioni con una maggiore rapidità.
È anche possibile installare delle applicazioni online, che potranno essere lanciate dal launcher, si interfacceranno con la dash, col menù di messaggistica, col menù del suono, con l'HUD e con altre applicazioni all'interno del sistema; per esempio installando Flickr come applicazione online, compariranno le foto del proprio account fra i risultati della dash e in Shotwell, il programma di default per la gestione delle foto, sarà presente l'opzione per caricare le foto direttamente sul proprio account di Flickr.

## Unity 2D

Il 14 gennaio 2011, Canonical ha pubblicato un'anteprima di una versione 2D (quindi senza la necessità di un compositing window manager) di Unity basata su Qt e scritta in QML, questo per permettere anche a chi ha schede video datate o non supportate di usufruire della shell grafica Unity. Una particolarità di Unity 2D rispetto alla controparte 3D, era la possibilità di utilizzare anche solo alcuni dei suoi componenti (come il lanciatore o il pannello superiore) con altri ambienti desktop.

## Unity 8 / Lomiri

Per raggiungere l'obiettivo della così detta "convergenza" del sistema operativo Ubuntu, cioè la possibilità di poterlo usare su più tipologie di dispositivo oltre al tradizionale desktop, Canonical ha deciso di avviare il progetto Unity Next, successivamente chiamato Unity 8, per dotare il proprio sistema operativo di un'interfaccia grafica utile allo scopo. Unity 8 è stato pertanto sviluppato con l'obiettivo di:
* non richiedere modifiche del codice tra una tipologia di dispositivo e l'altro
* in grado di adattare, anche dinamicamente, il proprio aspetto in funzione del I/O
La possibilità di dover sviluppare e manutenere un solo codice per più tipologie di I/O, seppur sul lungo termine avrebbe potuto comportare un'elevata efficienza di sviluppo, nell'immediato ha determinato notevoli ritardi dovuti all'aumento della complessità del codice. Lo sviluppo, inizialmente concentrato sulla modalità desktop dell'interfaccia, vista l'intenzione di Canonical, nel 2013, di rilasciare alcuni dispositivi smartphone con Ubuntu Touch, per diversi anni è stato spostato sulla modalità Touch dell'interfaccia, adatta cioè ai piccoli schermi degli smartphone. Il rallentamento nello sviluppo della modalità desktop, dove pure è concentrata l'utenza di Ubuntu, e il basso numero di dispositivi smartphone messi in vendita, ha rallentato la crescita di una comunità che sostenesse il progetto. Tutto questo, unito alla difficoltà di utilizzare in Ubuntu Touch con nuovi e più moderni kernel (a causa delle limitazioni imposte dai driver usati dai dispositivi ARM), ad un generale scarso interesse da parte dei produttori di dispositivi e all'aumentato interesse di Canonical per gli ambiti Cloud e IoT, ha causato un sempre minore interesse da parte di Canonical nel progetto, decretandone l'abbandono nell'aprile 2017. Subito dopo l'annuncio da parte di Canonical si è fatto un fork del codice, rinominato yunit e portato avanti dall'omonima comunità, e successivamente ripreso, con il suo vecchio nome, dal progetto UBports che fino ad allora ne aveva curato lo sviluppo unicamente per gli smartphone. Nel 2020 il progetto ha cambiato nome per evitare vari disguidi di omonimia e migliorare la compatibilità tra sistemi