This article is a work in progress review of 'Forge Federation'. I'm writing it to learn about the technologies and groups involved. Eventually I hope to be able to contribute to some of this work - I'm using the article to get up to speed on the area.

The term 'Forge' is used to describe web based code repositories with additional features to support collaborative software development, for example 'pull requests' or issue tracking.

At the moment Github is almost ubiquitously used as a Forge. Ubiquity of any platform, regardless of its current values, is already a problem in my books. It is healthy to have viable alternatives for many reasons. However ubiquity of a closed-source commercial platform is to me very problematic, particularly when it is used to host critical open source software projects. 

There are alternative forges, (fully) open source ones are naturally of interest. Codeberg is a nice example. The problem is that this forge is centralized - someone has to pay to keep the lights on and it is a single point of weakness for attack on software projects. The Codeberg service runs on the Frogejo software platform, which is a fork of the open-core (partially open source but with proprietary paid extras) Gitea platform. 

Federation of Web Activities is an approach to build decentralized services and platforms. It is showing lots of promise in the area of Social Media, e.g. with Mastodon, Pixelfed, Peertube and a healthy collection of others. Many are built on the 'Activity Pub' procotol.

Forgejo has a current initiative to support federation based on Activity Pub. Its most recent feature is '[federated stars](https://codeberg.org/forgejo/forgejo/pulls/1680)', with [federated unstar](https://codeberg.org/forgejo/forgejo/pulls/6740) next. There is a long [roadmap](https://codeberg.org/forgejo/forgejo/issues?labels=79349) (including tag [forgejo/federation](https://codeberg.org/forgejo/forgejo/pulls?labels=79349)) toward having a fully federated forge. I think this work to enable Forge federation is foundationally important to allow open source projects to escape the Github trap and the Forgejo project is well placed to deliver it. So, I want to get involved.

To do so in a reasonable way I want to:

1) review the following:

* How Go works
* How Forgejo works
* How Activity Pub works
* [Forgefed](https://forgefed.org/) and [Vervis](https://codeberg.org/ForgeFed/Vervis/src/commit/7368ef7c8255aea3eadeea4c5b028389a18d5c99/FEDERATION.md#5-ed25519-actor-keys)
* Forgefriends https://f3.forgefriends.org/
* How federation in Forgejo works
  * UI https://gitea.com/xy/gitea/issues/8

in this article. 

2) set up a Forgejo development environment so I can play around with things, I haven't thought of the best way to do that yet. My own 'production' Forgejo setup is still very basic.

3) see if I can find some good first issues in the Forgejo federation backlog, including helping with tests, documentation or setting up some infrastructure.


