Eseguire applicazioni Linux grafiche su Android senza root: ora c'è tawc

Eseguire applicazioni Linux grafiche su Android senza root: ora c'è tawc

  • Linux

Far girare applicazioni Linux complete su uno smartphone Android senza ottenere i permessi di root non è un’idea nuova. Termux ha dimostrato da tempo quanto si possa fare dentro i limiti imposti dal sistema operativo di Google; PRoot ha poi reso possibile simulare senza privilegi di root operazioni normalmente riservate all’amministratore, come chroot e bind mount: invece di modificare realmente il filesystem o creare nuovi punti di montaggio nel kernel, intercetta le chiamate di sistema dei programmi e presenta loro una vista differente di file e directory, interamente dallo spazio utente.

La parte difficile arriva quando si vuole andare oltre il terminale: eseguire Firefox, terminali grafici e programmi Wayland o X11 sfruttando davvero la GPU del telefono, senza trasformare ogni frame in un costoso trasferimento attraverso la CPU.

TAWC, acronimo di “Tess’s Android Wayland Compositor“, è un progetto che nasce con un obiettivo ambizioso: installare una normale distribuzione Linux, eseguire i suoi programmi e il relativo package manager senza root, integrare le finestre Linux nell’interfaccia Android e usare lo stack grafico nativo dello smartphone per l’accelerazione hardware.

Google porta Linux grafico su Android, ma sceglie la virtualizzazione

L’idea di trasformare Android in una piattaforma capace di eseguire software Linux tradizionale non appartiene soltanto a TAWC. Google sta lavorando da tempo a un proprio Linux Development Environment, comparso inizialmente in forma sperimentale con Android 15 QPR1 e successivamente ampliato. Android 16 QPR2 ha poi introdotto il supporto per le applicazioni Linux dotate di interfaccia grafica: non più, quindi, soltanto una shell Debian accessibile dal Terminale.

Dal punto di vista dell’utente il risultato può sembrare molto vicino a quello perseguito da TAWC, ma sotto il cofano cambia quasi tutto. L’app Terminal di Google utilizza Android Virtualization Framework, AVF, per creare e gestire una vera macchina virtuale. Se necessario scarica l’immagine del sistema operativo Linux, quindi AVF la avvia come guest separato.

Google descrive esplicitamente Terminal come un’app Android che si collega ai servizi in esecuzione nella VM; non si tratta quindi di programmi Debian eseguiti direttamente sopra il kernel Android come avviene nell’approccio scelto da TAWC.

Uno dei componenti fondamentali di AVF è pKVM, una variante di KVM progettata per creare ambienti maggiormente isolati dall’host Android.

Nel caso di TAWC, i programmi Linux continuano a utilizzare il kernel già in esecuzione sullo smartphone, mentre tawcroot modifica ciò che esse vedono del filesystem e intercetta alcune operazioni che richiederebbero normalmente privilegi maggiori. È un’impostazione più vicina a PRoot che a una macchina virtuale, anche se con un’implementazione differente pensata per ridurre l’overhead.

TAWC non è Termux con un desktop Linux sopra

Termux porta su Android un ambiente Unix con programmi compilati specificamente per Bionic, la libreria C utilizzata dal sistema operativo Google. I pacchetti Termux non sono semplicemente quelli di Debian o Ubuntu copiati dentro lo smartphone: devono adattarsi alle particolarità della piattaforma Android e lavorano normalmente all’interno della sandbox dell’applicazione.

TAWC si comporta diversamente: scarica ed estrae il filesystem root di una vera distribuzione Linux e tenta di far funzionare direttamente i suoi binari, compreso il package manager nativo. Al momento il progetto considera Arch Linux ARM e Debian sid le distribuzioni destinate agli utenti; Manjaro ARM, Void Linux e alcune configurazioni x86-64 rimangono invece opzioni sperimentali o dedicate allo sviluppo.

Il fatto è che un programma compilato per una normale distribuzione Linux si aspetta generalmente glibc, percorsi, chiamate di sistema e comportamenti che Android non espone nello stesso modo.

La sandbox di TAWC, tuttavia, non va trattata come un contenitore che isola completamente le applicazioni in esecuzione. I programmi Linux restano comunque racchiusi nei limiti imposti da Android all’app TAWC, ma non bisogna trattare la distribuzione installata come un contenitore ostile nel quale eseguire software non affidabile aspettandosi una separazione robusta.

Come provare TAWC su uno smartphone Android

Dal punto di vista pratico, TAWC è ancora un progetto giovane, ma l’autrice ha già pubblicato una prima release utilizzabile sotto forma di pacchetto APK.

La versione v1 indica requisiti piuttosto semplici: serve Android 10 o versione successiva e, per le build ufficiali, uno smartphone con architettura ARM64. Il codice può essere compilato anche per x86, ma il percorso grafico basato su libhybris sfrutta tecniche che dipendono dall’architettura ARM, quindi il supporto ufficiale resta concentrato sui dispositivi fisici ARM64.

Come anticipato nei paragrafi precedenti, non occorrono né root né un’installazione separata di Termux. TAWC incorpora infatti il widget terminale di Termux direttamente nell’applicazione e da lì consente di lavorare dentro la distribuzione Linux installata.

Utilizzo del package manager delle distribuzioni Linux

Una volta completata l’installazione, si può utilizzare il normale package manager della distribuzione. Con Debian significa quindi lavorare con apt; con Arch Linux ARM con pacman. Non si tratta di repository creati appositamente per TAWC: è proprio questo uno degli aspetti più interessanti del progetto, perché l’obiettivo consiste nell’eseguire i pacchetti della distribuzione con il minor numero possibile di adattamenti.

La documentazione di sviluppo mostra, per esempio, Firefox avviato direttamente dal rootfs con firefox --no-remote e lxterminal con il semplice comando lxterminal.

Per le applicazioni grafiche l’esperienza prova inoltre ad allontanarsi dal classico “desktop Linux dentro una finestra”: quando TAWC rileva un’applicazione grafica installata, può renderla disponibile nel proprio launcher; le app Linux possono anche essere aggiunte alla schermata Home di Android e comparire nel selettore delle applicazioni recenti insieme alle normali app Android. XWayland è già incluso, quindi anche i programmi X11 possono appoggiarsi al compositor Wayland senza richiedere all’utente di configurare manualmente un server X separato.

La compatibilità non può essere universale

La release attuale di TAWC non promette compatibilità universale con ogni smartphone e ogni programma Linux.

Il backend grafico predefinito è libhybris, che secondo la documentazione funziona su tutti i dispositivi fisici provati finora dagli sviluppatori; esistono anche i backend libhybris-zink, gfxstream e cpu, ma gfxstream rimane sperimentale e parziale.

Inoltre, TAWC non offre ancora OpenGL desktop attraverso il percorso principale, bensì le API grafiche fornite dal telefono, generalmente OpenGL ES e Vulkan.

Il progetto, infine, non è stato ancora ottimizzato né sottoposto a test seri per il gaming.

TAWC costruito in gran parte con l’AI

C’è un aspetto di TAWC che merita particolare attenzione indipendentemente dalla tecnologia usata per eseguire Linux.

Il README non prova affatto a nascondere nulla: il progetto è definito agent-built e l’autrice Sophie Winter, ingegnere software, precisa di aver utilizzato soprattutto Claude Code e i più recenti modelli Anthropic. Non si parla quindi soltanto di AI usata per completare qualche funzione o suggerire frammenti di codice, ma di agenti software coinvolti in modo esteso nella costruzione e nella manutenzione del progetto.

TAWC mostra un modello che probabilmente vedremo sempre più spesso: lo sviluppatore definisce architettura, obiettivi, vincoli e procedure di verifica, mentre uno o più agenti  AI producono e modificano una quota crescente del codice.

Resta aperta la domanda più importante, cioè quanto tale approccio riesca a mantenere qualità, sicurezza e manutenibilità quando il progetto inizia a crescere. Nel caso di TAWC, almeno, l’autrice rende trasparente il metodo usato e inserisce nello stesso repository gli avvertimenti necessari per ricordare che l’output dell’AI non costituisce di per sé una prova di correttezza.