An Investigation of Patch Porting Practices of the Linux Kernel Ecosystem
<|reference_start|>An Investigation of Patch Porting Practices of the Linux Kernel Ecosystem: Open-source software is increasingly reused, complicating the process of patching to repair bugs. In the case of Linux, a distinct ecosystem has formed, with Linux mainline serving as the upstream, stable or long-term-support (LTS) systems forked from mainline, and Linux distributions, such as Ubuntu and Android, as downstreams forked from stable or LTS systems for end-user use. Ideally, when a patch is committed in the Linux upstream, it should not introduce new bugs and be ported to all the applicable downstream branches in a timely fashion. However, several concerns have been expressed in prior work about the responsiveness of patch porting in this Linux ecosystem. In this paper, we mine the software repositories to investigate a range of Linux distributions in combination with Linux stable and LTS, and find diverse patch porting strategies and competence levels that help explain the phenomenon. Furthermore, we show concretely using three metrics, i.e., patch delay, patch rate, and bug inheritance ratio, that different porting strategies have different tradeoffs. We find that hinting tags(e.g., Cc stable tags and fixes tags) are significantly important to the prompt patch porting, but it is noteworthy that a substantial portion of patches remain devoid of these indicative tags. Finally, we offer recommendations based on our analysis of the general patch flow, e.g., interactions among various stakeholders in the ecosystem and automatic generation of hinting tags, as well as tailored suggestions for specific porting strategies.<|reference_end|>
@article{li2024an,
    title={An Investigation of Patch Porting Practices of the Linux Kernel
  Ecosystem},
    author={Xingyu Li, Zheng Zhang, Zhiyun Qian, Trent Jaeger, Chengyu Song},
    journal={arXiv preprint arXiv:2402.05212},
    year={2024},
    archivePrefix={arXiv},
    eprint={2402.05212},
    primaryClass={cs.SE cs.CR}
}