Open Source forking: Now what?

TLDR: while forking may seem like an attractive solution in certain OSS scenarios or when initiating new projects, it’s crucial to weigh its potential drawbacks carefully. By considering alternative strategies and engaging constructively with the project community or potential stakeholders, developers can foster growth, collaboration, and long-term sustainability of their open-source endeavors without the added burden of forks.

In the realm of open-source software (OSS), forking – creating a separate copy of source code under a different version control or license – is often perceived as an easy solution when disagreements arise, significant changes are desired, or when initiating new projects. However, this approach isn’t always beneficial and can lead to several hidden risks and inefficiencies that might outweigh its perceived advantages.

Forking a repo sometimes creates a split within the community (ex. Redis vs Valkey) . This division dilutes developer resources, potentially fragmenting the user base, and stifling collaborative efforts. For instance, when the project “LibreOffice” forked from OpenOffice.org in 2010, it initially led to duplicated efforts as developers had to choose between the two projects, temporarily weakening both.

Also, forks often face a phenomenon known as ‘fork drift.’ Over time, the original project and its fork diverge, making it challenging to merge changes back together. This not only complicates future collaboration but also increases maintenance overhead. For example, the Bitcoin Cash hard fork from Bitcoin in 2017 led to two separate blockchain networks with incompatible updates, causing confusion among users and developers.

Forking for new project creation isn’t without its own set of challenges:

  1. Extra Maintenance Burden: A fork requires maintaining and updating not just the codebase but also distinct documentation, community, and user support. This extra work can strain resources, especially in cases where the original project already has robust infrastructure.
  2. Lack of Community Inheritance: New projects starting as forks don’t automatically inherit the community, credibility, or established workflows of the parent project. Building a vibrant community takes time and effort, which can be a significant hurdle for new entrants.
  3. Potential Legal Concerns: While forking usually respects the original license, issues may arise if there are disagreements over licensing or intellectual property rights. Navigating these legal waters can consume valuable time and resources better spent on development.
  4. Fragmented Ecosystem: Forking proliferates similar projects, potentially fragmenting the broader ecosystem and confusing users who must now choose between multiple, somewhat overlapping options. This fragmentation can hinder overall growth and innovation within a specific domain.

Instead of immediately forking, consider these alternatives:

  1. Engage in Dialogue: Open communication is often the first step towards resolving conflicts within an open-source project or initiating new projects. By discussing ideas with other contributors or potential stakeholders, consensus can be reached that satisfies all parties involved.
  2. Proposal and Patch: If you believe a significant change would improve an existing project or introduce a needed feature in a new project, propose it. Prepare a detailed patch or pull request outlining the modifications along with reasons for their necessity. This approach encourages community involvement and fosters consensus-based decision-making.
  3. Create Subprojects: For large projects, creating subprojects under the main repository can provide an avenue for experimentation without splitting the community. This method allows for innovation while keeping the core project focused on stability and wide compatibility.