A language-independent methodology for compiling declarations into open platform frameworks
Compilation de déclarations dans des cadriciels : une méthodologie indépendante du langage
Résumé
In the domain of open platforms, it has become common to use
application programming frameworks extended with declarations that
express permissions of applications. This is a natural reaction to
ever more widespread adoption of mobile and pervasive computing
devices. Their wide adoption raises privacy and safety concerns for
users, as a result of the increasing number of sensitive resources a
user is sharing with non-certified third-party application developers.
However, the approach to designing these declaration languages and the
frameworks that enforce their requirements is often ad hoc, and
limited to a specific combination of application domain and
programming language. Moreover, most widely used frameworks fail to
address serious privacy leaks, and, crucially, do not provide the user
with insight into application behaviour.
This dissertation presents a generalised methodology for developing
declaration-driven frameworks in a wide spectrum of host programming
languages. We show that rich declaration languages, which express
modularity, resource permissions and application control flow, can be
compiled into frameworks that provide strong guarantees to end
users. Compared to other declaration-driven frameworks, our
methodology provides guidance to the application developer based on
the specifications, and clear insight to the end user regarding the
use of their private resources.
Contrary to previous work, the methodology we propose does not depend
on a specific host language, or even on a specific programming
paradigm. We demonstrate how to implement declaration-driven
frameworks in languages with static type systems, completely dynamic
languages, object-oriented languages, or functional languages. The
efficacy of our approach is shown through prototypes in the domain of
mobile computing, implemented in two widely differing host programming
languages, demonstrating the generality of our approach.
Dans le domaine des plates-formes ouvertes, l'utilisation des
cadriciels (\textit{frameworks}) enrichis par des déclarations pour
exprimer les permissions de l'application est de plus en plus
répandue. Ceci est une réaction logique au fait qu'il y a une
explosion d'adoption des appareils embarqués et mobiles. Leur
omniprésence dans notre vie quotidienne engendre des craintes liées à
la sécurité et à la vie privée, car l'usager partage de plus en plus
ses données et ressources privées avec des tiers qui développent des
applications auxquelles on n'a pas de raison de faire confiance.
Malheureusement, la manière dont ces langages de spécification ainsi
que ces cadres d'applications sont développés est généralement assez
\emph{ad hoc} et repose sur un domaine d'application et un langage de
programmation fixes. De plus, ces cadriciels ne sont pas assez
restrictifs pour régler le problème de la fuite de données privées et
ne donnent souvent pas non plus assez d’informations à l'usager sur le
comportement attendu de l'application.
Cette thèse présente une méthodologie généraliste pour développer des
cadriciels dirigés par des déclarations, qui cible un spectre large de
langages de programmation. Nous montrons comment des langages de
déclaration expressifs permettent de spécifier avec modularité les
droits d'accès aux ressources ainsi que le flux de contrôle d'une
telle application. Ces langages peuvent ensuite être compilés en un
cadriciel garantissant à l'usager final le respect de ces permissions.
Par rapport aux cadriciels existants, notre méthodologie permet de
guider la personne qui développe des applications à partir des
spécifications ainsi que d'informer l'usager final sur l'usage des
ressources sensibles. Contrairement aux travaux existants, la
méthodologie présentée dans cette thèse ne repose par sur un langage
de programmation particulier. Nous montrons comment mettre en œuvre de
tels cadriciels dans un spectre de langages: des langages avec typage
statique ou dynamique, et suivant le paradigme objet ou fonctionnel.
L'efficacité de l'approche est montrée à travers des prototypes dans
le domaine des applications mobiles dans deux langages très
différents, à savoir \textsc{Java} et \textsc{Racket}, ce qui montre
la généralité de notre approche.