  In this work, we investigate the practice of patch construction in the Linux
kernel development, focusing on the differences between three patching
processes: (1) patches crafted entirely manually to fix bugs, (2) those that
are derived from warnings of bug detection tools, and (3) those that are
automatically generated based on fix patterns. With this study, we provide to
the research community concrete insights on the practice of patching as well as
how the development community is currently embracing research and commercial
patching tools to improve productivity in repair. The result of our study shows
that tool-supported patches are increasingly adopted by the developer community
while manually-written patches are accepted more quickly. Patch application
tools enable developers to remain committed to contributing patches to the code
base. Our findings also include that, in actual development processes, patches
generally implement several change operations spread over the code, even for
patches fixing warnings by bug detection tools. Finally, this study has shown
that there is an opportunity to directly leverage the output of bug detection
tools to readily generate patches that are appropriate for fixing the problem,
and that are consistent with manually-written patches.
