La nuova versione del browser open source di Mozilla non può essere considerata semplicemente come parte dei miglioramenti incrementali che contraddistinguono il tipico ciclo di sviluppo di Firefox. C’è infatti da registrare l’introduzione della funzionalità di separazione dei processi, nome in codice Electrolysis (E10S), e delle prime porzioni del browser scritte in Rust, il linguaggio di programmazione orientato alla sicurezza sviluppato da Mozilla in collaborazione con la comunità open source.
Il progetto Electrolysis rende Firefox un’applicazione multiprocesso, separando il processo responsabile dell’interfaccia grafica del browser da quello del motore di rendering Gecko (e, in futuro, Servo ) che gestisce il contenuto web. I vantaggi di questa soluzione sono essenzialmente tre: maggiore stabilità (un crash causato da una pagina web non si ripercuote su tutto il browser), reattività (un sito particolarmente pesante non costringe a rimandare l’elaborazione degli eventi UI) e sicurezza (ogni processo può essere eseguito con permessi più limitati). L’intensità di questi benefici sarà tanto maggiore quanto lo sarà il livello di separazione tra i processi, un aspetto sul quale Mozilla ora potrà concentrarsi, dopo aver posto le basi in questa release.
I principali concorrenti, Google Chrome e Internet Explorer, sono multiprocesso dal 2009 , anno nel quale venne avviato lo sviluppo di Electrolysis. Il ritardo di sette anni accumulato da Mozilla è dipeso da fattori molto diversi tra loro. Innanzitutto, riassetti aziendali e cambi di priorità piuttosto frequenti, combinati con le risorse ridotte rispetto a Google e Microsoft hanno provocato il completo stop allo sviluppo di Electrolysis tra il 2011 e il 2013. Il più grande ostacolo tecnologico a Electrolysis è l’ architettura per le estensioni di Firefox, di gran lunga più complessa (e potente) che negli altri browser e che permette agli add-on di modificare intimamente, fino anche a stravolgere, il comportamento e la UI. Un livello di accesso che mal si sposa con la separazione dei processi e una delle principali ragioni dietro la decisione di transitare ad una nuova API per le estensioni ispirata a Chrome, WebExtension , che invece è immediatamente compatibile con Elecrolysis.
In Firefox 48 Electrolysis è dichiarato stabile e sarà attivato, ma con cautela e non per tutti . “È un progetto immenso che impiegherà ancora svariate altre release per essere completato, ma siamo molto soddisfatti delle fondamenta su cui baseremo il tutto e che sono incluse nella versione 48”, ha dichiarato il team di sviluppo. La classe di utenti che al momento non potrà godere della nuova funzionalità è composta dagli utenti di Windows XP (ancora 11 per cento dei PC Windows), da chi utilizza linguaggi da destra verso sinistra, e da chi ha installato estensioni, per un totale di circa metà degli utenti complessivi . Della rimanente metà, solo l’uno per cento avrà Electrolysis attivo da subito. Un approccio molto cauto, perché nelle parole del team pubblicate sul blog di sviluppo , Electrolysis “è il più grande cambiamento mai introdotto in Firefox”. Se tutto andrà bene nelle prossime settimane i server Mozilla segnaleranno alle installazioni di Firefox 48 di attivare progressivamente la funzionalità per un numero sempre maggiore di utenti fino a raggiungere la totalità degli attivabili.
Anche a quel punto però Electrolysis non sarà a livello della separazione raggiunta da Chrome e Internet Explorer, che utilizzano un processo diverso per ognuna delle singole schede aperte, mentre Electrolysis sarà inizialmente limitato ad una semplice separazione biprocesso. Mozilla prevede di colmare questo gap per la prima metà del 2017 . Un processo per tab aumenta la stabilità (ogni scheda può causare un crash senza bloccarne nessun’altra) e la sicurezza, limitando le comunicazioni tra tab allo stretto indispensabile grazie alle tecniche di sandboxing , la cui introduzione in Firefox è invece prevista entro il 2016. Per quanto riguarda invece gli utilizzatori di estensioni, l’attivazione di Electrolysis passerà attraverso varie fasi: in Firefox 49 sarà attivo solo per poche estensioni dalla compatibilità accertata mentre in Firefox 50 potrà invece essere attivo per le estensioni marcate come compatibili dagli sviluppatori e per quelle che utilizzano la nuova API. L’ultimo pezzo del puzzle, quando tutte le dipendenze saranno state risolte, sarà quello di far girare ogni estensione nel suo processo dedicato .
Un deploy lento, quasi estenuante, per cui però il Vicepresidente della sezione Firefox Nick Nguyen sostiene valga la pena attendere: “La separazione dei processi è una soluzione che innalza l’utilizzo di memoria rispetto al monoprocesso, ma l’approccio multiprocesso seguito in Firefox utilizza la metà della memoria utilizzata da Chrome con gli stessi siti web caricati. Ci aspettiamo che questo vantaggio rimarrà inalterato nella versione finale”.
Firefox 48 è anche la prima versione del browser di Mozilla a introdurre in produzione del codice Rust , sostituendo il parser dei formati multimedia precedentemente implementato in C++. Rust è un linguaggio di programmazione progettato da Mozilla per essere memory-safe e dunque privo di tutta quella classe di bug che comportano accesso non autorizzato a porzioni di memoria, come ad esempio i buffer overflow , e che costituiscono la base di migliaia di vulnerabilità scoperte ogni anno.
C’è spazio anche per qualche cambiamento di minore rilevanza in una milestone come questa. Da Firefox 48, come già annunciato, gli add-on sono installabili solo se firmati digitalmente da Mozilla. Gli utenti Linux godranno di prestazioni dell’interfaccia accelerate (fino a 3 volte) dalla libreria 2D Skia . Infine la sezione download integrerà segnalazioni per il software potenzialmente dannoso : un punto esclamativo rosso segnalerà se il file è stato rilevato come un pericolo per il sistema, mentre un altro di colore giallo verrà utilizzato quando il file in esame risulterà poco comunemente scaricato e quindi con meno segnalazioni in un senso o nell’altro. Questi controlli saranno attivi di default, ma bypassabili per ogni singolo file o disattivabili completamente nelle preferenze.
Stefano De Carlo