ChromeOS (e FydeOS): architettura funzionale di sistema

Leggendo e partecipando alle discussioni attorno a ChromeOS sui più svariati blog “tecnologici” italiani mi sono reso conto di una cosa sconcertante: praticamente nessuno sa cos’è ChromeOS!
O meglio, se ne ha una vaga conoscenza, ma più basata su quello che fu il sistema operativo che Google mise sul mercato tanti anni fa indirizzandolo ai piccoli sistemi didattici che a quello che ChromeOS è oggi, un ottimo sistema operativo rivolto più al mondo business che a quello originario.
Ho detto tante volte che Google commise un errore imperdonabile non cambiando nome al prodotto quando dette inizio a questa mutazione, e la percezione attuale che il pubblico ha del sistema operativo nella sua versione attuale mi dà in pieno ragione.

Il bruco e la farfalla

Tutti conoscono sia gli animali chiamati bruchi che quelli chiamati farfalle, ma a nessuno privo di conoscenze specifiche verrebbe in mente che essi sono in realtà lo stesso animale; la farfalla origina dal bruco, ma noi chiamiamo bruchi i bruchi e farfalle le farfalle. Giusto? sebbene siano il medesimo animale a differenti stadi evolutivi assegniamo loro due nomi differenti perchè i due stadi evolutivi sono talmente diversi che dare il medesimo nome creerebbe una grande confusione.
Bene, Il ChromeOS originario è una farfalla a livello di bruco, è piuttosto brutto e striscia lentamente; l’attuale è una farfalla coloratissima che vola libera nell’aria. Ma per Google hanno lo stesso nome. E questo genera incredibili problemi di comprensione!

Inadeguatezza del materiale disponibile

Prima di decidermi a scrivere questo articolo ho cercato a lungo su Internet qualche buon articolo introduttivo cui rimandare i miei interlocutori, ma ho scoperto che non ne esiste neppure uno adatto!
O meglio, di articoli ce ne sono molti (tutti in inglese) ma o sono troppo tecnici, quindi incomprensibili per i più, o semplici da capire… ma sbagliati nel contenuto.
Quello che mi accingo a scrivere è un giusto mezzo, un articolo spero comprensibile, che illustri in modo corretto ChromeOS sotto il profilo funzionale, ossia come viene visto dal software che su di esso viene eseguito e dal suo utente. Per farlo ho tralasciato alcuni moduli la cui esistenza è trasparente a software ed utente, ossia essi esistono, hanno un compito, ma non vengono percepiti.
Ho anche semplificato un po’ la posizione dei vari layer, che nella realtà si integrano parzialmente uno nell’altro ma la cui rappresentazione grafica reale non sarebbe comprensibile.

I quindici elementi fondamentali di ChromeOS

Nella mia opera di semplificazione ho ridotto una macchina ChromeOS moderna a soli quindici elementi, più che sufficienti a darne una rappresentazione corretta e completa.
Mi scuso per la qualità del disegno… la grafica non è mai stata il mio forte.

Rappresentazione funzionale di ChromeOS, click per ingrandire

Nella rappresentazione grafica è visibile evidenziato sulla sinistra lo “stack” su cui era basato ChromeOS nelle intenzioni iniziali di Google (in realtà a quell’epoca non c’era Wayland), fondamentalmente solo un browser in grado di navigare sul Web ed eseguire semplici WebApp, e nel complesso dell’immagine cosè ChromeOS oggi, un sistema operativo adatto a sistemi Desktop di ogni genere basato contemporaneamente su:

  • WebApp, che lo rendono compatibile con il passato (alcuni dicono anche con il futuro).
  • Android, che lo lega sia al mondo del Mobile (smartphone, dispositivi indossabili), alla IoT e ad ogni genere di servizio (banche, assicurazioni, messaggistica, app di ogni tipo). Da notare che tutto il software in vostro possesso su cellulare può essere eseguito sul moderno ChromeOS (senza necessità di riacquisto). ChromeOS (volendo) condivide il vostro account Google e questa parte di sistema operativo dal Play Store viene vista come un comune dispositivo Android.
  • Linux (in due versioni), che fornisce un’impressionante quantitativo di software Desktop, in maggior  parte gratuito, adatto ad ogni genere di utilizzo.

Analisi per livelli

Prima di iniziare la descrizione dettagliata è importante far capire che dal punto di vista dell’utente tutto quello che vedete rappresenta un’esperienza d’uso omogenea. A differenza di Linux, su cui pure basa il suo funzionamento, ChromeOS è pensato per utenti finali non “tecnici”; ciò significa che dal punto di vista del suo utente tutto il software è uguale, non c’è modo di distinguere una finestra contenente una WebApp, un’app Android o on pacchetto applicativo del Linux principale (al secondo, potentissimo ma poco conosciuto anche dagli utenti ChromeOS, dedicherò un articolo apposito).

  1. Macchina fisica: beh, qui c’è poco da dire… si tratta del computer vero e proprio e delle sue periferiche (processore, dischi, tastiera, display etc etc). I computer ChromeOS non hanno proprio niente di speciale, sono computer come tutti gli altri.
  2. Drivers: sono i moduli software che consentono al sistema operativo di gestire la macchina fisica. Qui qualcosa da dire c’è, perchè nel caso di ChromeOS “per macchine generiche” (ad es. FydeOS) è la possibile assenza di uno o più di questi moduli a generare l’incompatibilità di alcuni hardware, ed è veramente difficile aggiungere dei moduli mancanti proprio perchè, a differenza dei comuni Linux, ChromeOS non è pensato per utenti “smanettoni”.
  3. HAL: è lo strato software che fornisce ai sistemi operativi un ambiente fisico virtuale omogeneo indipendentemente dalla reale composizione fisica della macchina ( e quindi dei driver utilizzati). Il suo nome è un acronimo di Hardware Abstraction Layer, uno strato software che dal lato fisico vede la macchina concreta ed i suoi driver e dall’altro restituisce al kernel una macchina astratta così che il kernel stesso non debba preoccuparsi dei dettagli necessari alla sua gestione.
  4. Kernel: La traduzione in lingua italiana di questo termine, nocciolo, dovrebbe essere già sufficiente a comprendere cosa fa questo strato software: tutto!
    Gestione delle periferiche, assegnazione della memoria, esecuzione e uccisione dei processi, lettura e scrittura di file, comunicazioni e qualsiasi altra cosa vi venga in mente riguardo a quello che può fare un computer… nelle moderne macchine tutto passa per il kernel.
    Esistono infinite tipologie di kernel, ma tutte riconducibili a tre gruppi fondamentali: microkernel, kernel monolitici e kernel misti.
    Linux utilizza un kernel monolitico, e tutti quelli con cui ho avuto discussioni sull’argomento sanno che non provo alcuna simpatia per questo tipo di architettura. Però questo non è un articolo sulle architetture dei kernel, quindi andiamo avanti che la strada è lunga.
  5. Wayland: Si tratta del “gestore delle finestre”, ma più generalmente il gestore degli elementi grafici usato da CheomeOS. Tutto quello che l’utente vede sullo schermo viene gestito da wayland.
    Il ChromeOS arcaico non aveva Wayland, semplicemente non ne aveva bisogno perchè era semplicemente un “Browser autosufficiente”, mentre nel moderno ChromeOS Wayland è un elemento essenziale che rende uniforme il comportamento del software usato dall’utente indipendentemente dal sistema operativo su cui è in esecuzione.
  6. Browser Chrome: possiamo dire che su ChromeOS il Chrome sta al sistema operativo come Internet Explorer sta alle macchine basate su Win32, ossia serve contemporaneamente a navigare sul web, gestire la macchina e navigare fra file e cartelle.
    Sia su Windows che su ChromeOS il browser è il perno dell’esperienza utente senza browser non funzionerebbero nè ChromeOS nè Windows (e questa è la ragione per cui è pressochè impossibile “estirpare” l’ormai obsoleto Internet Explorer dal più moderno Windows 10).
  7. Navigazione e WebbApp: Vabbè, la navigazione… è la navigazione. Ovviamente c’è Chrome nell’ultima versione e tutto il mondo web è compatibile con Chrome. Fine delle cose da dire sulla navigazione.
    Diverso il discorso attorno alle WebApp, perchè se è vero che rappresentano il trait d’union con il ChromeOS originario è altrettanto vero che alcune scuole di pensiero indicano le WebApp come il futuro del software.
    Quanto a me… beh consentitemi di essere scettico. Ammetto che sono stati trasformati in WebApp diversi pacchetti software ed anche molti importanti siti web, ma trovo difficile credere che le WebApp possano diventare il futoro del software Desktop così come non poteva esserlo la tecnologia UWP di Microsoft.
    Comunque ora non ci interessa, ChromeOS è in grado di eseguie tutte le WebApp che volete e questa è l’unica cosa che conta.
  8. ARC: Qui le cose si fanno interessanti. ARC è un container, ossia uno strato software che gestisce “un qualcosa” sul kernel sottostante (4). Un container è banalmente uno spazio isolato ricavato all’interno del sistema operativo, al quale possono essere messe a disposizione, o negate, una o più risorse (ad es. file, connessioni ri rete etc etc)
  9. Android: contrariamemte a ciò che molti pensano è che è comune dire per semplicità Android non è un sistema operativo ma un middleware, ossia  uno strato software eseguito su un qualsiasi kernel (generalmente Linux, ma ne sono esistiti per Neutrino, BSD ed altri) che consente l’esecuzione di suo software specifico mettendo a disposizione risorse, gestione della grafica e qualsiasi altra cosa ci si possa aspettare da un sistema operativo, ma a differenza dei veri sistemi operativi manca di qualcosa di suo: il kernel (4), ma si limita ad usarne uno fornito da terze parti.
    Facile a capirsi guardando il disegno, nel caso di ChromeOS il middleware Android viene eseguito su kernel Linux in ambiente isolato garantito dal container ARC.
    Nota: visto che in praticamente tutte le versioni esistenti Android viene eseguito su Kernel Linux è corretto affermare che Android è (di gran lunga) la principale “distro” Linux della storia.
  10. App Android: qui è veramente semplice, tutto quello che può essere eseguito sul vostro cellulare funzionerà anche su ChromeOS e tutto quello che potete fare con il vostro cellulare potrete farlo anche con ChromeOS. E’ abbastanza corretto dire che al di là del diverso formato di visualizzazione l’utente non trova alcuna differenza fra l’usare (e configurare) un telefono Android e l’Android di Chrome OS.
  11. KVM: Avere Android e Play Store fa fare ai moderni ChromeOS un netto salto in avanti rispetto al modesto sistemino didattico delle origini; tuttavia il software Android è storicamente meno potente rispetto a quello pensato per le potenti macchine Desktop (a dire il vero il gap va chiudendosi); per questa ragione Google ha pensato di offrire anche un pieno supporto a Linux, dove certo non manca software di grande potenza.
    Ci sarebbero stati molti metodi per implementare questo supporto (e difatti ChromeOS ne offre ben tre), ma quello scelto in via ufficiale è la Virtual Machine (d’ora in avanti VM).
    Una VM è un ambiente virtuale che simula la presenza di una o più macchine reali sulle quali è possibile installare sistemi operativi completi; a differenza degli ambienti container (8), che vengono eseguiti sul medesimo kernel ospitante (4) i sistemi operativi installati nelle macchine virtuali sono completi di kernel proprio.
  12. VM Linux: sul KVM possono essere installate molte distribuzioni Linux complete; di default viene fornita una Debian 10 “Buster” ed il mio suggerimento è quello di non cambiarla, sia per ragioni di uniformità fra le varie installazioni di ChromeOS che di affidabilità e supporto nel tempo. Debian è un’ottima distribuzione pensata per la solidità e ricchissima di software nel proprio repository, quindi proprio nessun motivo concreto per complicarsi la vita scegliendone una diversa.
  13. Software Linux: qui l’argomento va scisso in due parti, perchè se è vero che ChromeOS nella sua VM può eseguire qualsiasi software Linux, è anche vero che non ha un “desktop” come generalmente siamo abituati a vederlo… quindi OK per qualsiasi software applicativo, ma niente “desktop manager” personalizzati.
    Il software Linux viene posto nello Shelf al pari di WebApp ed app Android, e come per tutto il resto le icone possono essere spostate, raggruppate in cartelle (se lo si desidera contenenti software di sistemi operativi eterogenei) e fissate sulla barra di lancio).
  14. e 15. Crouton: a questi due capitoli dedicherò un articolo indipendente. Crouton è poco conosciuto e poco utilizzato, ma è di gran lunga più potente del Linux “ufficiale” (12).
    Indubbiamente è un pochino più complesso da utilizzare ed anche un po’ più “pericoloso” perchè eseguito in chroot sul kernel principale, ma è in grado di fare cose straordinarie… tanto per fare un esempio si può avere un intero Desktop Debian in esecuzione esclusiva, in finestra e… su un tab del browser Chrome!
    Ne riparleremo.

Articolo lunghissimo, ma proprio non sarebbe stato possibile condensarlo.

L’esperienza utente di ChromeOS (o FydeOS) è così diversa ed innovativa rispetto a quella offerta dai tradizionali ambienti Desktop che risulta pressochè impossibile spiegarlo a parole; per rendersi conto di “cosa fa” esiste un unico modo: provarlo.

Se qualcuno è veramente riuscito ad arrivare fino a questo punto, lo aspetto per domande e critiche nei commenti.

Federico.

Nota: è stata pubblicata la seconda parte dell’articolo.