15 research outputs found

    Understanding Collateral Evolution in Linux Device Drivers

    Get PDF
    In a modern operating system (OS), device drivers can make up over 70% of the source code. Driver code is also heavily dependent on the rest of the OS, for functions and data structure defined in the kernel and driver support libraries. These two properties together pose a significant problem for OS evolution, as any changes in the interfaces exported by the kernel and driver support libraries can trigger a large number of adjustments in dependent drivers. These adjustments, which we refer to as collateral evolutions, may be complex, entailing substantial code reorganizations. Collateral evolution of device drivers is thus time consuming and error prone. In this paper, we present a qualitative and quantitative assessment of the collateral evolution problem in Linux device driver code. We provide a taxonomy of evolutions and collateral evolutions, and show that from one version of Linux to the next, collateral evolutions can account for up to 35% of the lines modified in such code. We then identify some of the challenges that must be met in the future to automate the collateral evolution process

    <strong>Generic Patch Inference</strong>

    No full text

    Understanding widespread changes: A taxonomic study

    Get PDF

    Increasing Automation in the Backporting of Linux Drivers Using Coccinelle

    Get PDF
    International audienceSoftware is continually evolving, to fix bugs and add new features. Industry users, however, often value stability, and thus may not be able to update their code base to the latest versions. This raises the need to selectively backport new features to older software versions. Traditionally, backporting has been done by cluttering the backported code with preprocessor directives, to replace behaviors that are unsupported in an earlier version by appropriate workarounds. This approach however involves writing a lot of error-prone backporting code, and results in implementations that are hard to read and maintain. We consider this issue in the context of the Linux kernel, for which older versions are in wide use. We present a new backporting strategy that relies on the use of a backporting compatability library and on code that is automatically generated using the program transformation tool Coccinelle. This approach reduces the amount of code that must be manually written, and thus can help the Linux kernel backporting effort scale while maintaining the dependability of the backporting process

    Prequel: A Patch-Like Query Language for Commit History Search

    Get PDF
    The commit history of a code base such as the Linux kernel is a gold mineof information on how evolutions should be made, how bugs should be fixed,etc. Nevertheless, the high volume of commits available and therudimentary filtering tools provided mean that it is often necessary towade through a lot of irrelevant information before finding example commitsthat can help with a specific software development problem. To addressthis issue, we propose Prequel (Patch Query Language), which brings thedescriptive power of code matching to the problem of querying a commithistory. We show in particular how Prequel can be used in understandinghow to eliminate uses of deprecated functions.L'histoire des commits dans une base de code comme le noyau Linux est unemine d'or d'informations décrivant comment les évolutions doivent êtrefaites, comment les bugs doivent être corrigés, etc. En revanche, le grandvolume de commits disponibles et la disponibilité d'outils de filtragerudimentaires impliquent qu'il est nécessaire de dépouiller de nombreusesinformations irrelevantes avant de trouver les exemples qui peuvent aider àrésoudre un problème spécifique de développement logiciel. Dans ce rapport,nous proposons le langage Prequel (Patch Query Language), qui offre lapuissance descriptive de la reconnaissance de code au problème del'interrogation d'une base de commit. Nous montrons en particulier quePrequel peut être utilisé pour éliminer et remplacer les utilisations defonctions dépréciées
    corecore