Le sandboxing consiste à isoler les différentes parties de l'application, de préférence par zone de privilèges et possibilité d'accès à des ressources, mais également à limiter l'accès à ces ressources. Deux fils d'exécutions qui ont chacun accès à un fichier en particulier doivent être isolés l'un de l'autre.
Le code et projet réalisé ne correspond pas exactement à une sandbox elle-même mais à l'architecture mise en place afin de pouvoir l'implémenter. Même si Linux permet d'appliquer certaines règles de sandboxing à des threads, il faut garder en tête qu'un thread partage le même espace mémoire que les autres thread du processus, et qu'il n'est donc pas envisageable de baser l'isolation là dessus.
Le projet a donc constitué à modifier l'architecture existante de façon à passer d'un modèle multithread à un modèle multiprocessus comprenant les besoins expliqués au dessus. Dans la suite du document, chaque choix d'architecture sera apprécié à travers ce cadre-là et comparé à des solutions existantes pour chacun des problèmes qui en est sorti.
Pas pris en compte :
La première partie du document sera tournée vers Linux, même si le travail a été effectué en prenant en considération les limitations de Windows également. Il nous faut donc rappeler certains points de l'API Linux qui seront utilisés dans la suite, tout comme il faut décrire ce que VLC a besoin de faire dans l'architecture que je construis.
Le principal de l'architecture actuelle de VLC est organisé autour de la notion de module. D'un côté, le core contrôle le chargement des fonctionnalités et joue un rôle d'orchestrateur. De l'autre côté chaque fonctionnalité est apportée par un module qui peut être chargé dynamiquement ou lié statiquement à l'application.