Mozilla porta JPEG XL in Firefox: il motivo è un decoder scritto in Rust

Mozilla prepara il supporto JPEG XL in Firefox 157 usando jxl-rs, decoder Rust nato per ridurre la superficie d'attacco del vecchio codice C++. Anche Chromium lo adotterà, mentre Safari supporta già il formato.

JPEG XL non è un formato nuovo. Lo standard nasce dal lavoro avviato dal JPEG Committee nel 2017 ed è già supportato da diversi software e sistemi operativi. Anche Windows 11 può gestire i file JXL attraverso l’estensione ufficiale pubblicata da Microsoft. Sul web, però, mancava ancora un tassello decisivo: il supporto stabile e generalizzato da parte dei browser.

Mozilla ha annunciato l’intenzione di abilitare JPEG XL in Firefox su tutte le piattaforme, mentre anche Chromium si prepara a fare altrettanto. Safari supporta il formato già dal 2023. Se i piani annunciati saranno rispettati, JPEG XL passerà quindi da formato tecnicamente maturo ma difficile da distribuire sul web a soluzione utilizzabile attraverso tutti i principali motori di rendering.

La parte più interessante, però, è il motivo per cui Mozilla ha atteso così a lungo. Firefox disponeva di un decoder JPEG XL sperimentale già nel 2021, ma gli sviluppatori giudicavano troppo ampia la superficie d’attacco introdotta da circa 100.000 righe di C++ multithread, destinate a elaborare immagini provenienti da fonti non affidabili.

Mozilla pose allora una condizione piuttosto netta al team JPEG XL di Google Research: realizzare un decoder più compatto, veloce e soprattutto memory-safe. La risposta è jxl-rs, un’implementazione scritta in Rust che oggi costituisce il cuore del supporto JPEG XL di Firefox.

jxl-rs: il decoder Rust che ha cambiato la posizione di Firefox

JPEG XL non conquista Firefox soltanto perché comprime bene le immagini, supporta HDR, lossless e caricamento progressivo. Ci arriva perché uno dei componenti più delicati, quello che interpreta dati potenzialmente ostili provenienti dalla rete, è stato ripensato con un linguaggio progettato per eliminare alla radice molte classi di vulnerabilità legate alla gestione della memoria.

La soluzione jxl-rs, sviluppata da Google Research, permette quindi di disporre l’attivazione di JPEG XL per tutti a partire da Firefox 157, su ciascuna delle piattaforme supportate.

Prima dell’attivazione generalizzata, la funzione rimane collegata alla preferenza image.jxl.enabled: al momento dell’annuncio risulta attiva di default in Firefox Nightly e disponibile tramite Firefox Labs sugli altri canali a partire da Firefox 152.

Mozilla non si è limitata alla decodifica di immagini statiche. L’implementazione prevista comprende animazioni, visualizzazione progressiva, gestione dei profili colore, alpha, scala di grigi, CMYK, orientamento e differenti profondità di colore. Per l’HDR c’è invece una limitazione: le immagini JPEG XL HDR risultano visualizzate in SDR. Mozilla sostiene comunque che il tone mapping utilizzato per JPEG XL sia migliore di quello applicato agli altri formati attualmente gestiti dal browser.

Il progressive rendering è uno dei vantaggi più interessanti

Mozilla insiste molto sul concetto di progressive rendering: il browser può produrre rapidamente una rappresentazione iniziale dell’immagine e migliorarla mentre arrivano altri dati.

Nella dimostrazione pubblicata da Mozilla, il file completo pesa 135 kB. Con una frazione molto piccola dei dati disponibili appare già una rappresentazione sfocata; intorno al 15% del download il soggetto risulta riconoscibile e, proseguendo, aumentano progressivamente dettaglio e risoluzione.

JPEG XL: progressive rendering

Fonte dell’immagine: Mozilla

Per l’utente significa ridurre la sensazione di attesa sulle immagini molto grandi. Il file non è necessariamente più piccolo rispetto a ogni alternativa, ma il contenuto utile può comparire prima. Su una pagina web contenente foto ad alta risoluzione, con una connessione mobile instabile o una galleria con immagini pesanti, la differenza percettiva può contare più di qualche kilobyte risparmiato.

JPEG XL o AVIF? Non esiste un vincitore assoluto

Con JPEG XL disponibile nei browser, gli sviluppatori si troveranno davanti a due formati moderni molto competitivi: AVIF, che Firefox supporta dal 2021, e JPEG XL.

Mozilla mette però in guardia da confronti troppo semplicistici perché il risultato cambia parecchio in funzione dell’immagine, del livello qualitativo e della modalità lossless o lossy.

Il test mostrato nel post Mozilla è utile proprio per questo. Nel caso di una foto di qualità, AVIF produce un file più piccolo rispetto a JPEG XL. Tuttavia, la situazione si ribalta nella compressione senza perdite (lossless): la stessa immagine occupa meno spazio con JPEG XL non solo rispetto ad AVIF ma anche effettuando un confronto con WebP.

AVIF tende a essere più competitivo sulle immagini lossy destinate al web, mentre JPEG XL mostra vantaggi interessanti nel lossless, nel caricamento progressivo e nella ricompressione reversibile dei JPEG preesistenti. Su immagini molto grandi si può persino accettare un file JPEG XL leggermente più pesante se la visualizzazione progressiva migliora sensibilmente il caricamento percepito.

JPEG XL può ricomprimere un JPEG senza perdere il file originale

Una delle caratteristiche meno intuitive di JPEG XL riguarda il rapporto con il formato JPEG classico: come accennato in precedenza, il primo può conservare le informazioni necessarie alla ricostruzione lossless del bitstream JPEG originale.

In pratica, un utente può trasformare i propri JPEG in file JPEG XL più piccoli, memorizzarli e, quando serve compatibilità con software legacy, ottenere nuovamente lo stesso JPEG di partenza. Non si tratta di una copia visivamente equivalente: il file originale può essere ricostruito senza perdite.

Il JPEG Committee vede proprio questa possibilità come uno degli strumenti per migrare grandi archivi: un server potrebbe mantenere una rappresentazione JPEG XL e generare il file JPEG legacy quando necessario, evitando di conservare permanentemente due versioni complete. Naturalmente il vantaggio reale dipende da infrastruttura, frequenza delle richieste, costi CPU e politiche di caching.

Ti consigliamo anche

Link copiato negli appunti