/fȯrk/
noun, verb — "one thing becoming two."
Fork is the act or result of creating an independent copy of an existing project, codebase, process, or development path. After a fork occurs, the original and the new version continue separately, potentially evolving in different directions over time.
The term appears throughout computing, but its exact meaning depends on context. In software development, a fork usually refers to copying a project's source code and continuing development independently. In operating systems, a fork commonly refers to creating a new process from an existing one. In both cases, the underlying idea is the same: a single entity splits into two related but separate entities.
In open source software, forks are a natural part of collaboration. A developer may create a fork to experiment with new features, fix bugs, test ideas, or pursue a different vision for a project.
// original project
project-v1
// forked project
project-v1-customInitially, both versions may be identical. Over time, however, new features, design decisions, and architectural changes can cause them to diverge significantly.
Some forks are temporary and eventually merged back into the original project. Others become entirely separate projects with their own communities, goals, and identities.
In operating systems such as UNIX and Unix-like systems, fork() is a system call that creates a new process by duplicating an existing one.
pid = fork();
if (pid == 0) {
// child process
} else {
// parent process
}After the fork, both processes continue executing independently. This mechanism became one of the defining features of Unix process management and remains fundamental to many modern operating systems.
Forking is often associated with Software Design decisions. Sometimes a project reaches a point where competing goals cannot comfortably coexist. One group may prioritize stability while another prioritizes experimentation. Rather than forcing a compromise, the project forks and both approaches can continue independently.
This differs from Refactoring. Refactoring changes a system's internal structure while preserving a single codebase. A fork creates separate paths that may eventually become distinct systems.
The concept also appears in version control systems. Modern platforms allow developers to fork repositories, make changes independently, and later submit those changes for review.
A useful way to think about a fork is as a decision point made permanent. Before the fork, everyone shares the same future. After the fork, multiple futures can exist simultaneously.
Forks can be productive, allowing innovation to flourish without disrupting existing users. They can also fragment communities, duplicate effort, and create compatibility challenges. Whether a fork is viewed positively or negatively often depends on its outcome rather than its creation.
Within hacker culture, forks are often seen as a natural consequence of freedom. If developers disagree strongly enough about direction, they do not necessarily need permission to pursue an alternative path. They can simply fork and build.
Conceptually, Fork represents divergence. It is the moment when a shared structure separates into independent branches, each carrying some part of its original history while creating its own future.
Ultimately, a Fork is neither inherently good nor bad. It is a mechanism that allows systems, projects, and ideas to evolve along multiple paths when a single path is no longer sufficient.
See Open Source Software, Version Control, Software Design, Refactoring, UNIX