What is forgefriends?

November 22, 2021

https://forgefriends.org/ is an online service to federate forges. The software projects hosted on one forge are synchronized in real time with their counterparts on other forges, via the W3C ActivityPub protocol. Developers can freely use the forge of their choosing while contributing to the same project. It operates independently from the forges and serves as an incubator with rapid prototyping to research the best user experience.

Most Free Software projects are hosted on proprietary online services (called forges) that do not provide an export/import feature flexible enough to allow them to move easily (GitHub, SourceForge, etc.). Although the code repository can conveniently be moved from one service to another, other essential components such as pull or merge requests, issues, developer accounts, continuous integration, etc. cannot and the project, as a whole, is trapped.

When two forges are federated via forgefriends, the actions carried out by a developer on a forge are sent to the other, and vice versa. For instance:

  • The forgefriends service runs with a proxy for GitLab and a proxy for GitHub
  • The project Ceph exists on GitHub
  • I run a self-hosted GitLab instance
  • I ask the forgefriends service to federate the Ceph project from GitHub with my GitLab instance
  • I browse the issues of the Ceph project on my GitLab instance
  • I comment on an issue on my GitLab instance
  • My comment is copied over to the GitHub Ceph project by forgefriends
  • A GitHub user answers my comment which forgefriends copies over to the Ceph project that resides on my GitLab instance

Once all components of a software project are federated (issues, code, etc.) the project as a whole is effectively duplicated in real time on multiple forges, thus allowing the users to chose the one they prefer. Service portability is achieved because federated forges continuously maintain identical copies of the software project although they are operated by independent actors and running different servers and user interfaces.