Giuseppe Parrello

 

Sblocco del bootloader - Pro e contro


Premessa

Sin da quando nel 2014 ho pubblicato un post su XDA per il mio smartphone Oppo Find 7, riguardante lo sblocco del bootloader e il ripartizionamento di alcune partizioni del suddetto smartphone Android, ho maturato la convinzione che lo sblocco del bootloader è un’arma a doppio taglio, ovvero se è ben usato può portare benefici, se mal usato può portare solo tanti guai. In questa pagina cercherò di descrivere i pro e i contro della procedura di sblocco del bootloader, sia da programmatore, sia da utente finale. Prima di addentrarci nella procedura di sblocco del bootloader, diamo uno sguardo allo storage di un dispositivo smartphone Android e ai comandi ADB/Fastboot, a cui dedico i due seguenti paragrafi. Questo perché, sembrerà strano, molti utenti che si accingono a sbloccare il bootloader, non hanno minimamente un’idea di quello che stanno per fare, semplicemente usano le procedure di sblocco del bootloader per il proprio dispositivo Android prendendole da Internet, senza sapere cosa fanno e come lo fanno, con tutto ciò che ne consegue.


Storage e relativo partizionamento

Per capire come funziona un dispositivo Android, dobbiamo avere una infarinatura di base sullo storage interno del suddetto dispositivo. Lo storage interno di un dispositivo Android, a livello commerciale chiamato impropriamente ROM (impropriamente perché l’acronimo ROM sta per "Read Only Memory", ovvero memoria di sola lettura – lo storage interno invece è anche una memoria scrivibile oltre che leggibile – inoltre si fa confusione con il termine ROM usato al posto del termine firmware), è costituito da una unità disco a stato solido, chiamata eMMC (Embedded MultiMediaCard) o, nei dispositivi più recenti o costosi, UFS (Universal Flash Storage) e rappresenta l’unica unità di archiviazione interna di un dispositivo Android. Quindi è l’equivalente, come prestazioni, di un disco SSD (Solid State Drive) che viene usato come storage dei computer, dei NAS e di altri dispositivi elettronici. In un dispositivo Android questo storage è partizionato, ovvero su di esso vengono create varie partizioni, ognuna con un nome ben definito, le quali definiscono buona parte del sistema software/hardware di Android. Come vedremo più avanti, parte dei fattori negativi dello sblocco del bootloader ha a che fare proprio con il partizionamento dello storage. La cura e preservazione delle partizioni di uno storage interno, in un dispositivo Android, sono affidate alle aziende produttrici (se il bootloader rimane bloccato) o all’utente finale (se il bootloader viene sbloccato).
Come dispositivo Android di esempio, prendo il vecchio OnePlus One, più per semplicità che per altro, i dispositivi più moderni presentano molte più partizioni, se non addirittura la divisione dello storage in più parti (ogni parte verrà vista come unità logica/fisica, all’interno di ogni unità verrà comunque effettuata la suddivisione in partizioni).
Per vedere l’elenco delle partizioni, si usano due metodi che vanno poi messi assieme a mo’ di puzzle. Il primo metodo consiste di visualizzare il file "/proc/partitions" all’interno di un terminale, usando la Shell di ADB (vedere il prossimo paragrafo per i comandi ADB/Fastboot). Questo file non sempre è raggiungibile all’utente finale, ma ne fornisco comunque un esempio per capire come viene partizionato lo storage interno. Segue l’output del comando "cat /proc/partitions" del mio dispositivo OnePlus One:

major minor  #blocks  name

 179        0   61071360 mmcblk0
 179        1      65536 mmcblk0p1
 179        2        512 mmcblk0p2
 179        3         32 mmcblk0p3
 179        4         32 mmcblk0p4
 179        5       1024 mmcblk0p5
 179        6        500 mmcblk0p6
 179        7      16384 mmcblk0p7
 179        8        500 mmcblk0p8
 179        9       1024 mmcblk0p9
 179       10       1536 mmcblk0p10
 179       11       1536 mmcblk0p11
 179       12      10240 mmcblk0p12
 179       13      10240 mmcblk0p13
 179       14    1355776 mmcblk0p14
 179       15      32768 mmcblk0p15
 179       16     524288 mmcblk0p16
 179       17      16384 mmcblk0p17
 179       18       1536 mmcblk0p18
 179       19          1 mmcblk0p19
 179       20          8 mmcblk0p20
 179       21       1024 mmcblk0p21
 179       22      16384 mmcblk0p22
 179       23      32768 mmcblk0p23
 179       24      32768 mmcblk0p24
 179       25      16384 mmcblk0p25
 179       26       8192 mmcblk0p26
 179       27      65536 mmcblk0p27
 179       28   58510540 mmcblk0p28
 179       29     294895 mmcblk0p29
 179       32       4096 mmcblk0rpmb

Il secondo metodo è quello di visualizzare il contenuto della cartella "/dev/block/by-name", questa cartella dovrebbe essere visibile da qualunque utente. Segue l’output del comando "ls -l /dev/block/by-name":

total 0
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 DDR -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 DRIVER -> /dev/block/mmcblk0p23
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 LOGO -> /dev/block/mmcblk0p22
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 aboot -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 boot -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 cache -> /dev/block/mmcblk0p16
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 dbi -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 fsc -> /dev/block/mmcblk0p19
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 fsg -> /dev/block/mmcblk0p18
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 grow -> /dev/block/mmcblk0p29
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 misc -> /dev/block/mmcblk0p21
lrwxrwxrwx 1 root root 18 1970-02-09 03:31 mmcblk0 -> /dev/block/mmcblk0
lrwxrwxrwx 1 root root 22 1970-02-09 03:31 mmcblk0rpmb -> /dev/block/mmcblk0rpmb
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 modem -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 modemst1 -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 modemst2 -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 oppodycnvbk -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 oppostanvbk -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 pad -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 persist -> /dev/block/mmcblk0p15
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 recovery -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 reserve1 -> /dev/block/mmcblk0p24
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 reserve2 -> /dev/block/mmcblk0p25
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 reserve3 -> /dev/block/mmcblk0p26
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 reserve4 -> /dev/block/mmcblk0p27
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 rpm -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 ssd -> /dev/block/mmcblk0p20
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 system -> /dev/block/mmcblk0p14
lrwxrwxrwx 1 root root 20 1970-02-09 03:31 tz -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root 21 1970-02-09 03:31 userdata -> /dev/block/mmcblk0p28

Una volta che abbiamo questi due output, li mettiamo assieme per capire quante sono le partizioni e come vengono chiamate. Dando quindi per scontato che "mmcblk0" è tutto lo storage (nel gergo di Linux viene chiamato "block device", ovvero "dispositivo a blocchi"), al suo interno avremo N partizioni, che nel caso di OnePlus One sono 29, ognuna di essa ha un numero – si parte da "mmcblk0p1" e si arriva a "mmcblk0p29". Questo usando solo il primo output. Usando anche il secondo output, avremo anche il nome di ogni partizione. Quindi la partizione "mmcblk0p1" viene chiamata "modem", la partizione "mmcblk0p2" viene chiamata "sbl1", e così via. Tenete ben presente questa disposizione/denominazione delle partizioni, poiché verrà usata nei prossimi paragrafi.
Nota importante: fin quando il bootloader è bloccato, non è possibile modificare la struttura delle partizioni, ma è possibile modificare soltanto il contenuto di alcune partizioni – tale modifica non è effettuabile direttamente dall’utente, ma soltanto dal produttore tramite apposite procedure di aggiornamento. Lo sblocco del bootloader invece fornisce direttamente all’utente anche la possibilità di modificare la struttura delle partizioni, oltre al loro contenuto, con tutto ciò che comporta sia in positivo sia in negativo.


Comandi ADB/Fastboot

Una parte importante per chi si accinge a sbloccare il bootloader, è la buona conoscenza e padronanza di due comandi fondamentali, ovvero "adb" e "fastboot" (li scrivo in minuscolo poiché così vanno digitati all’interno di un sistema operativo ospite). Questi due comandi rappresentano la vera e propria interfaccia di collegamento tra un dispositivo Android e un dispositivo ospite, che può essere Windows o Linux. Con questi comandi si effettuano varie operazioni, nel caso specifico dello sblocco del bootloader è soprattutto il comando "fastboot" quello più importante. Ovviamente entrambi i comandi non vengono forniti con il sistema operativo ospite, poiché sono di proprietà di Google, e rappresentano quello che Google stessa chiama "SDK Platform Tools" ("SDK" sta per "Software Development Kit", ovvero "kit di sviluppo del software"), poiché vengono forniti da Google con "Android Studio" (il compilatore di Google per creare app Android). Una copia di "SDK Platform Tools" si può comunque recuperare sul sito di Google al seguente indirizzo.
Il mio consiglio, prima di usare questi comandi su un dispositivo Android reale, persino costoso, è quello di fare pratica su una macchina virtuale Android, ad esempio un emulatore software. Ce ne sono di vari tipi, ad esempio Genymotion (per utenti privati), o lo stesso emulatore incluso nel suddetto "Android Studio" di Google. Questi strumenti permettono di creare macchine virtuali Android, perfettamente funzionanti, con il vantaggio di non fare danni su dispositivi reali Android. Con le macchine virtuali ovviamente si può fare pratica con il comando "adb", purtroppo il comando "fastboot" è più legato alle partizioni e allo sblocco del bootloader vero e proprio.


Modalità di accesso ad un dispositivo Android

Ad un dispositivo Android si può accedere usando tre modalità.

Come detto nel paragrafo "Storage e relativo partizionamento ", fin quando il bootloader è bloccato, non c’è modo per l’utente di modificare in maniera diretta la struttura delle partizioni dello storage interno, pertanto vi è l’assoluta certezza per l’utente di accedere al dispositivo Android usando una delle tre suddette modalità. Invece se il bootloader viene sbloccato, non solo è possibile per l’utente modificare il contenuto delle partizioni dello storage interno, ma è possibile modificare la struttura delle partizioni; nel caso peggiore le tre suddette partizioni di accesso al dispositivo potrebbero non essere più accessibili. In questo caso accedere al dispositivo è praticamente impossibile, l’utente sarà obbligato a ricorrere alla riparazione del dispositivo.
In realtà esiste una quarta modalità di accesso, la possiamo chiamare "di emergenza" (ogni produttore fornisce un nome diverso per questa procedura), ed è quella usata dal produttore del dispositivo non solo quando il dispositivo viene fabbricato, ma anche quando il dispositivo viene inviato dall’utente ai centri di assistenza per la riparazione del dispositivo stesso. In questa modalità al dispositivo si accede mediante il cavo USB e con un opportuno software viene passato, tramite il suddetto cavo USB, il codice di programmazione dello storage interno, in modo tale da creare la struttura delle partizioni e modificare il contenuto delle partizioni. Questo permette al dispositivo di uscire dalla fabbrica appositamente programmato in modo tale da poter essere usato dall’utente finale. Questo tipo di software, per chi è appassionato di elettronica, è simile, come concetto, ai programmatori di EEPROM, con la differenza che non si usa un cavo seriale per programmare una EEPROM (fisicamente accessibile all’utente), ma si usa un cavo USB (che comunque è un cavo seriale a tutti gli effetti) per programmare un disco a stato solido integrato in un dispositivo Android (in questo caso il disco non è fisicamente accessibile all’utente).
Ovviamente il produttore non è obbligato a fornire il suddetto software di programmazione dello storage interno, il produttore ha solo l’obbligo di fornire un prodotto appositamente costruito e di fornire all’utente questo prodotto in maniera tale da poterlo utilizzare nel miglior modo possibile, senza la possibilità di fare danni al prodotto, entrambi rispettando i termini della garanzia (ne riparliamo nei prossimi paragrafi).
Quando ho messo mani al mio Oppo Find 7 nel lontano 2014, prima mi sono accertato che esistesse questo software di programmazione dello storage interno, poiché il codice da me pubblicato alterava pesantemente la struttura delle partizioni, eliminando partizioni di accesso al dispositivo e ricreandole ex novo - questo avrebbe comportato, se il codice fosse stato scritto erroneamente, l’impossibilità per me di accedere nuovamente al dispositivo. Quindi l’immediata possibilità di avere un software per l’accesso diretto allo storage interno permette all’utente finale di avere una quarta possibilità di accesso nel caso in cui le prime tre modalità non siano più utilizzabili.
Il mio consiglio è ovviamente quello di informarvi preventivamente se esiste una modalità di emergenza, ovviamente non dal produttore (ripeto non è compito suo fornirvela), ma sui forum di discussione su Internet. Questa modalità di emergenza vi permette di effettuare la procedura di sblocco del bootloader in maniera più tranquilla e sicura.


Garanzia e implicazioni legali

Lo sblocco del bootloader di un dispositivo Android non solo è oggetto di discussione su Internet a livello tecnico, ma soprattutto è oggetto di discussione in ambito puramente legale. La situazione sembrerebbe ingarbugliata quanto basta per renderla caotica, in realtà bisogna partire dal cosiddetto "agreement", ovvero il contratto tra produttore e utente finale. Qui entra in gioco il concetto di "garanzia". In Europa e in alcuni altri Stati extraeuropei la garanzia è di 2 anni, mentre in America, in Cina e in altri Stati la garanzia è di un solo anno. Il produttore, tramite il contratto, fornisce all’utente cosa l’utente può fare con il dispositivo (ovvero il "prodotto"), e cosa non può fare durante il periodo di garanzia. La procedura di sblocco del bootloader normalmente non rientra in quello che l’utente può fare con quel prodotto durante il periodo di garanzia. Pertanto l’utente, ancora prima di acquistare un dispositivo Android, deve accertarsi, tramite il contratto, se può effettuare la procedura di sblocco del bootloader senza che questa procedura debba invalidare la garanzia. I casi sono due:

La discussione in questo ambito finisce qui poiché non sono un avvocato. Il mio consiglio è quello di approfondire la questione a livello legale, con avvocati veri e propri, meglio se esperti in contratti e nel campo digitale. Le implicazioni legali sullo sblocco del bootloader potrebbero rendere in futuro questa pratica sempre più ostacolata dai produttori, poiché rappresenta uno dei principali motivi di malfunzionamento dei dispositivi, soprattutto se questa pratica viene effettuata da persone poco esperte o, come si usa dire su Internet ultimamente, da persone poco (o non) consapevoli.


Procedura di sblocco del bootloader

La procedura di sblocco del bootloader dipende dal dispositivo Android. In ogni caso la procedura di sblocco del bootloader cancellerà tutti i dati all’interno del dispositivo, l’utente è obbligato ad effettuare un backup (copia di riserva) di tutti i dati presenti all’interno del dispositivo ancor prima di effettuare la suddetta procedura di sblocco. Inoltre l’utente dovrà ovviamente fare riferimento ai gruppi di discussione su Internet, per avere maggiori informazioni su come effettuare la procedura di sblocco del bootloader in maniera sicura ed efficace. Ad esempio in alcuni dispositivi si dovrà:

  1. effettuare un backup (copia di riserva) di tutti i dati presenti all’interno del dispositivo;
  2. andare in modalità "bootloader/fastboot" e digitare il comando "fastboot oem unlock", il dispositivo si dovrebbe riavviare cancellando tutti i dati dell’utente presenti all’interno del dispositivo stesso;
  3. andare in modalità "bootloader/fastboot" e flashare una recovery alternativa, usando il comando "fastboot flash recovery recovery.img" dove "recovery.img" è il file della recovery alternativa;
  4. andare nella modalità "recovery" e da lì flashare la custom ROM ed eventualmente effettuare la procedura di "root".

Tenete presente che la procedura di sblocco del bootloader è malvista non solo da tanti produttori di dispositivi Android (come da precedente paragrafo "Garanzia e implicazioni legali"), ma anche da tanti produttori di app Android, ad esempio è malvista dalle app delle banche, dalle app dei fornitori di carte di credito virtuali e può dare problemi anche alla app "Google Pay" di Google.
Inoltre la procedura di sblocco del bootloader rende il dispositivo non più certificato – ciò sarà chiaramente visibile all’interno delle impostazioni della app "Google Store". La mancanza di certificazione è collegata anch’essa al pagamento con carte virtuali (anche alla app "Google Pay" di Google), pagamento non più disponibile fin quando il dispositivo non viene nuovamente certificato.
Accertatevi, sempre all’interno dei gruppi di discussione su Internet, se ci sono metodi alternativi per ovviare a tutti i suddetti problemi, poiché i forum su Internet sono pieni di rimostranze da parte di utenti inferociti i quali, dopo aver effettuato la procedura di sblocco del bootloader, non possono più pagare, ad esempio facendo shopping nei negozi fisici, usando il dispositivo come carta virtuale e/o tramite NFC.


Efficacia, pro e contro

In passato la procedura di sblocco del bootloader era effettuata per "spremere" i componenti hardware interni di un dispositivo Android, ad esempio overcloccando il processore - considerando che i processori qualche anno fa, in ambito Android, erano decisamente più lenti di quelli moderni. Inoltre tale procedura veniva effettuata per avere una versione di Android più efficiente, con più opzioni, più versatile, oppure, nel caso di dispositivi non più supportati dal produttore, avere versioni di Android aggiornate e più al passo con i tempi. Inoltre lo sblocco del bootloader, ancora oggi, è una pratica obbligatoria se si vogliono ottenere i privilegi di "root" del dispositivo Android.
Oggi bisogna valutarne l’efficacia, ma anche i pro e contro. Le ROM (il firmware) fornite dal produttore sono a tutti gli effetti delle "custom ROM", con molte più funzionalità rispetto alla versione "stock" di Android fornita da Google. Come sempre accade in ambito informatico, ci sono scuole di pensiero ben diverse. Ci sono utenti che non vogliono una "custom ROM", spesso pesante e piena di funzionalità non volute, ma vogliono invece una ROM "stock", basilare, veloce ed efficiente. D’altro canto vale anche l’opposto. Sul mercato dei dispositivi Android esistono sia dispositivi con ROM personalizzate dai produttori, sia ROM "stock" sempre fornite dai produttori con il supporto diretto di Google (ovvero i dispositivi "Android One"). A priori l’utente deve effettuare una scelta poiché il blocco del bootloader, fin quando il dispositivo è in garanzia, porta l’utente a non poter mettere mani sul dispositivo. Le cose cambiano se, dopo la scadenza della garanzia, l’utente decide di passare ad un'altra ROM, allora lo sblocco del bootloader diventa l’unica soluzione e permette all’utente di non restare più vincolato alla scelta fatta in precedenza.
Bisogna inoltre considerare l’impressionante progresso tecnologico dei moderni smartphone, che in alcuni casi possono rivaleggiare con computer – non ci dimentichiamo che uno smartphone è a tutti gli effetti un computer portatile. Processori (CPU e GPU) velocissimi, funzionalità Wi-Fi/NFC/Bluetooth evolute, fotocamere sempre più evolute, più tutte le funzionalità hardware aggiuntive fornite dai produttori e supportate solo dalle proprie ROM personalizzate, rendono spesso la procedura dello sblocco del bootloader inutile e persino controproducente – questo senza considerare le implicazioni legali di cui abbiamo discusso in un precedente paragrafo.
La procedura di sblocco del bootloader porta però anche cose positive. Penso all’incredibile quantità di appassionati ed esperti in materia, forum di appassionati sempre più presenti su Internet, sempre più Custom ROM disponibili e sempre più persone coinvolte nel loro sviluppo, mantenimento e supporto. Inoltre sempre più aziende lavorano a stretto contatto con questi appassionati, lavorando assieme si ottengono più risultati e l’utente finale è sempre più contento e produttivo, questo porta vantaggi sia ai produttori di dispositivi, sia all’utente finale che è sempre più fidelizzato. Inoltre le stesse aziende sanno che anche dopo la fine del loro supporto sui loro dispositivi, l’utente più smaliziato e consapevole non dovrà cambiare dispositivo ma potrà aggiornarlo semplicemente effettuando la procedura di sblocco del bootloader e mettendo una ROM alternativa, comunque efficace e all’altezza di quella fornita in precedenza dal produttore. Questo particolare non porterà più ad una rapida obsolescenza dei prodotti, che vivranno quindi più a lungo, con tutte le ripercussioni positive sia in ambito ambientalista, sia in ambito sociale/economico - in tempi di ristrettezze economiche questo è un vero e proprio toccasana.


Conclusioni

Dopo aver esaminato nei precedenti paragrafi tutto ciò che serve a livello tecnico e a livello legale per effettuare la procedura di sblocco del bootloader e avendo valutato la sua efficacia ma anche i suoi pro e contro, possiamo trarne le conclusioni. I miei consigli sono sempre i soliti; da appassionato di tecnologia sin dagli anni 80 consiglio di effettuare la procedura di sblocco del bootloader solo se strettamente necessario (e comunque dopo la scadenza della garanzia), avere un’ottima conoscenza del proprio dispositivo e avere un’ottima conoscenza degli strumenti per effettuare la suddetta procedura – vale sempre la regola "se non sapete cosa state facendo, non lo fate". E soprattutto ragionate con la vostra testa, evitando di ascoltare i consigli di chi la fa sempre così facile, senza quindi considerare le ripercussioni possibili e immaginabili sull’effettuare una procedura di questo tipo. Ricordatevi che ogni prodotto ha un suo valore; se avete speso così tanti soldi per un prodotto, chiedetevi sempre se ne vale la pena danneggiarlo e per quale motivo dovreste farlo. Oggi i tempi sono maturi, hardware e software diventano sempre più completi e complessi, oggi l’utente finale, in ambito di dispositivi Android, ha ampia scelta, e può scegliere il miglior prodotto in base al proprio budget e alle proprie esigenze.