Durante l’ultimo WWDC è stato presentato Bitcode, un servizio Apple di riottimizzazione delle applicazioni già presenti nell’App Store. I media hanno ignorato la novità e Apple fa la misteriosa. Cerchiamo di capirci qualcosa.
Ogniqualvolta uno sviluppatore vuole creare una applicazione per iOS lo deve fare attraverso la suite Xcode o più generalmente per mezzo degli strumenti forniti all’interno del Software Development Kit per iOS, che viene distribuito unitamente alla relativa versione di Xcode. La coppia costituisce cantiere navale e porto per il varo di qualsiasi app.
Compilare l’applicazione è solo uno degli step necessari alla creazione di un archivio pronto ad essere sottoposto al giudizio della Apple. All’interno dell’archivio formato ipa – quello che viene effettivamente inviato – troviamo, oltre al codice compilato, anche i file dati binari necessari all’app per funzionare come voluto. Parliamo di multimedia (immagini/suoni/video), database (SQLite) e qualsiasi altro file proprietario che vogliamo manipolare durante l’esecuzione della nostra nuova app.
Contestualizziamo il processo di sviluppo e soprattutto mantenimento dell’app nel tempo: abbiamo rilasciato l’app nell’anno X coi canoni di compatibilità per iPhone Y ed iPad Z, ma nell’anno X+1 vogliamo modificare l’app per mantenerci al passo coi tempi coi nuovi iPhone Y+1 ed iPad Z+1.
Perché lo vogliamo fare?
Forse perché non dispiacerebbe fornire una grafica Retina alla nostra app, oppure abbiamo migliorato le performance del codice e pertanto riteniamo giusto fornire un servizio migliore ai nostri clienti, oppure semplicemente il vecchio codice non è più compatibile e quindi non è fisicamente valido/ottimo per le versioni successive dell’hardware/software sul mercato. Ricordate quando venne rilasciato il primo dispositivo iOS a 64bit?
Bitcode vuole agire proprio in quest’ultimo caso, quando il codice compilato dal compilatore Apple nell’anno X non è più in linea con il codice che il compilatore Apple compilerebbe nell’anno X+1. Su questo nuovo scioglilingua gli ingegneri Apple hanno inventato un nuovo servizio totalmente server-side (o forse meglio dire service-side) che comporta la libertà di Apple di ricompilare la nostra app già presente nello store secondo i nuovi criteri di compatibilità e/o ottimizzazione. Apple si prende la libertà di modificare il nostro prodotto promettendo di operare solo con l’obiettivo di migliorare prestazioni e compatibilità, poi richiude il pacchetto e lo rimette sullo store a nostro nome, ringraziandoci. Sta forse decompilando il nostro lavoro?
La documentazione sul Developer Center non aggiunge molto a riguardo, anzi, comunica talmente poco che è possibile riportare integralmente la voce riguardo Bitcode:
Bitcode è una rappresentazione intermedia di un programma compilato. Le app caricate contenenti bitcode caricate su iTunes Connect verranno compilate e linkate su App Store. Includere bitcode permetterà ad Apple di riottimizzare in futuro il file binario della app senza bisogno che ne venga inviata allo store una nuova versione.
Bitcode non è quindi solo il nome del nuovo servizio offerto ma – in linea col nome – anche la tecnologia utilizzata. Si potrebbe qui entrare nei dettagli della libreria LLVM sulla quale sono stati costruiti il compilatore per iOS ed il conseguente servizio Bitcode, tuttavia ci limiteremo ad evidenziare il cuore della procedura e relativi pro e contro.
Con Bitcode il processo di compilazione dei file binari viene separato in due fasi: la prima si svolge sulla macchina dello sviluppatore, dove il codice dell’app viene compilato in un formato intermedio (bytecode) molto simile al codice macchina (assembly) ma non ancora sufficiente per essere eseguito dall’architettura sulla quale vorrebbe essere avviato. Alla consegna dell’archivio ipa quest’ultimo conterrà il codice bytecode invece del file binario eseguibile. La conversione da Bitcode a codice macchina (ed operazioni conseguenti) verrà effettuata da Apple sui suoi server in secondo momento, e possibilmente a più riprese nel tempo secondo le esigenze del distributore.
- Un pro immediato, enorme: Apple non temerà più i cambi di architettura. Dal momento in cui una parte importante del parco app sarà consegnata in formato Bitcode, Apple potrebbe ipoteticamente cambiare achitettura ai dispositivi iOS preferendo ad esempio processori Intel. Ma dovrà farlo gradualmente; infatti per il momento Bitcode è opzionale per applicazioni generazione A9 ma nulla preclude all’A10 o ancor più probabilmente A11 di utilizzare una architettura alleggerita, magari proprio dalla compatibilità ABI.
- Un contro: il bytecode non è codice macchina. Quando convertito per una architettura non inizialmente prevista dallo sviluppatore potrebbe esporre comportamenti e contesti non testati, ma qui il cruccio è in mano agli ingegneri di Cupertino.
Non ci resta che aspettare il momento in cui Bitcode verrà reso obbligatorio per tutte le nuove app iOS: sarà il segnale di un nuovo major change sotto il cofano dei dispositivi portatili Apple.