Patch-Based Developmentpractice

collaborationversion-controllinux-kernelpatchesemail
2 min read · Edit on Pyrite

Patch-based development is the foundational FOSS collaboration pattern: contributors submit changes as patches — unified diffs generated by the `diff` utility — via email or patch files, which maintainers apply to the codebase. linus-torvalds formalized this workflow for the Linux kernel via the linux-kernel mailing list (LKML), where it became the canonical model for large-scale distributed collaboration. The pattern predates the Linux kernel — the Unix community had been exchanging diffs since the 1970s — but the kernel project scaled it to a level that demonstrated its viability for coordinating thousands of contributors across time zones and organizations.

The critical enabling tool was larry-wall's `patch` utility (1985), which could intelligently apply diffs even when the target file had changed since the diff was generated. Before `patch`, applying diffs to modified source files was manual and error-prone. Wall's tool made asynchronous collaboration practical: a contributor could generate a diff against a known version, email it to a mailing list, and the maintainer could apply it to a working tree that had diverged. This workflow — generate diff, email to list, review on list, maintainer applies — defined FOSS collaboration from the mid-1980s through the mid-2000s.

The evolution of patch-based development traces a clear arc of decreasing friction: email patches and `diff`/`patch` utilities (1980s) gave way to centralized version control systems (CVS in the 1990s, Subversion in the 2000s) that automated some patch management but still required commit access for contribution. Git (2005) introduced distributed version control, where every clone is a full repository and patches can flow between repositories without centralized authority. GitHub (2008) wrapped this model in a web interface as the pull request, making the propose-review-merge cycle accessible to developers who had never used a mailing list or command-line diff tools. Each stage lowered the barrier to contribution — from "must be on a mailing list and comfortable with diff/patch" to "click Fork, edit in browser, click Pull Request."

The pull request model is now dominant across the FOSS ecosystem and has been adopted widely in commercial development. However, the Linux kernel still uses email-based patch submission via `git send-email`, and kernel developers have resisted migrating to a web-based platform. This persistence reflects both technical preferences (mailing list review scales differently than PR review) and governance philosophy: the kernel's patch workflow keeps the project independent of any single platform like github-platform. The tension between the efficiency of modern PR-based contribution and the independence of the email-based model remains unresolved — a microcosm of the broader FOSS tension between accessibility and autonomy.