Architecture générale
Le projet R2D2 repose sur une séparation claire entre le téléviseur webOS et un hôte Linux aarch64. L’hôte exécute Chromium (snap avec sandbox), Xvfb pour un affichage privé, PipeWire et GStreamer pour le flux WebRTC, ainsi que FFmpeg avec encodage matériel HEVC afin de fournir les flux MSE et AirPlay. Un GPU compatible CUDA et Python 3.12 hébergent les modèles de reconnaissance vocale, dont les poids totalisent environ 10 Go. Le téléviseur, quant à lui, conserve son affichage, ses applications natives et la télécommande, mais fonctionne en mode root pour permettre le remplacement de services système critiques.
Mécanismes d’intégration et de capture
R2D2 injecte trois points d’intervention sur le firmware : le patch keyfilter, le routage Home/idle et la capture vocale native. Ces modifications s’appuient sur des empreintes SHA‑256, des offsets de code et des noms de symboles spécifiques à une version de firmware, ce qui rend le processus non portable sans recalcul des ancres. Le flux audio du micro de la télécommande est capturé par un propriétaire root, encapsulé dans un canal TLS mutuel et transmis à l’hôte où les modèles locaux effectuent l’inférence. Le rendu Chromium est ensuite envoyé au téléviseur via le LAN, où le composant Home affiche le navigateur et renvoie les entrées utilisateur.
umask 077
python3 -c 'import secrets; print(secrets.token_hex(32), end="")' > browser.local.keyCe fragment génère la clé de capacité privée requise pour activer le raccourci du navigateur. Le processus de construction utilise Python 3.10+ et Node.js 20+, avec des scripts de test automatisés (Playwright, unittest) pour valider les protections de contenu et le comportement du Home.
Analyse de sécurité et limites
Le modèle de confiance repose sur plusieurs hypothèses fortes : le téléviseur doit être root‑accessible, les patches doivent correspondre exactement au firmware ciblé, et le réseau LAN doit offrir une latence et un débit suffisants pour le streaming vidéo et audio. Toute divergence dans les empreintes ou les offsets peut désactiver la télécommande, le bouton Home ou la capture vocale, nécessitant un redémarrage ou une réinitialisation d’usine. De plus, le code s’exécute avec les privilèges du système, exposant potentiellement le dispositif à des escalades de privilèges si une vulnérabilité du patch est découverte.
Le projet ne fournit aucun installateur universel ; l’administrateur doit installer manuellement les paquets sur le téléviseur et préparer l’hôte. Les données sensibles (clés TLS, modèles de voix, adresses de déploiement) sont stockées dans des répertoires privés avec des permissions 0600, mais restent hors contrôle de version, ce qui impose une gestion rigoureuse des sauvegardes. Enfin, les flux de contenu restent protégés par des filtres pin‑nés, mais la conformité dépend de la bonne configuration du profil de navigateur privé.