Braden Wong

Forking Is Such an Overloaded Term

A repository, a running process, and a few other words software keeps reusing.

Forking is such an overloaded term in software engineering.

You can fork a repository. On GitHub, that means making your own copy of a project, with its history, so you can develop it separately. You might contribute your changes back, or take the project in a different direction.

You can also fork a process. In Unix, a running process creates a child process that inherits much of its state. The parent and child can then continue executing separately.

The same word makes sense for both because you’re starting from the same thing and splitting off in a different direction. I just think it’s cool that the same image works for a codebase and a running program.

And fork is just one of the many overloaded terms in software. A thread can be part of a running program or a conversation. A port can be a network endpoint, or you can port an application to another platform. Static can describe a type system, a website, or a class member. And then there’s state, which has a whole collection of meanings in software and politics.