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.
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.
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.
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.
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.
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à:
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.
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.
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.