Deadline August 1st, 2022 https://nlnet.nl/entrust/ https://nlnet.nl/propose/ Thematic call: https://nlnet.nl/entrust/ Your name: Anthony Wang, Loïc Dachary, Gusted, 6543 Email address: entrust2022@forgefriends.org Phone numbers: [redacted] Organisation (if any): Country: France > Project name: Federated software forges with Gitea > Website / wiki: https://en.wikipedia.org/wiki/Gitea > Abstract: Can you explain the whole project and its expected outcome(s). Gitea is a popular software forge (over [100 millions downloads on the docker hub](https://hub.docker.com/r/gitea/gitea/)). Communication between Gitea instance is however limited to git mirroring for the most part. The **goal of this project is to implement federation features in the Gitea codebase** to take advantage of the ActivityPub foundations that have been merged in the main codebase mid 2022. It is essential to data portability and relies on the ActivityPub standard to do so. An individual or an organization can run its own Gitea instance and migrate projects to and from other Gitea instances. It is a decentralized service that provides limited data portability. Once a project is fully migrated from one instance to another, all developers must resume their work on the new instance. A new communication channel based on the **W3C ActivityPub** protocol is implemented to allow them to communicate with each other. Activities carried out on one Gitea instance are sent to the other instances at all times. The [go-ap](https://lists.sr.ht/~mariusor/activitypub-go/) library implementing the ActivityPub protocol will be improved to support the forgefed extension. > Have you been involved with projects or organisations relevant to this project before? And if so, can you tell us a bit about your contributions? Anthony Wang has been the most active developer in Gitea for the implementation of the ActivityPub protocol. He established a relationship with the author of the go-ap package to figure out the best way to implement support for the forgefed extension. He maintains a [detailed list of the tasks](https://gitea.com/Ta180m/gitea/issues/3) required to fully implement ActivityPub and actively reaches out to motivate fellow developers to join the effort. Loïc Dachary contributed dozens of patches to the Gitea codebase, including an early implementation of the ActivityPub protocol and is engaged in a large undertaking to [improve the Gitea import/export features](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/55). He played an instrumental role in [reviving the forgefed project](https://forum.forgefriends.org/c/development/forgefed/18) and contributed [new vocabulary](https://codeberg.org/ForgeFed/ForgeFed/commit/aa418f352ff4b1337dbc201543ed19eb6e594d34) to the specifications. He is a skilled Go developer and has been working to further forge federation [since early 2021](https://forgefriends.org//tags/report/page/2/). 6543 is one of the [top five most active developers of the Gitea project](https://github.com/go-gitea/gitea/graphs/contributors). He has actively participated in the current implementation of the ActivityPub protocol in Gitea and keeps a [curated list of tasks related to federation in the Gitea issue tracker](https://github.com/go-gitea/gitea/issues/18240). He is also a part time [employee of the Codeberg non profit](https://blog.codeberg.org/letter-from-codeberg-we-are-now-an-employer.html) for which he helps maintain a long standing fork of Gitea. In June 2022 [he declared his intention to enable federation in Codeberg](https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/) as soon as it is available in the Gitea codebase. A primary concern in this context is the implementation of moderation features which are more challenging in a federated context than in isolated instances. Gusted joined the Gitea project in 2021 and [quickly became one of the most active contributors](https://github.com/go-gitea/gitea/graphs/contributors). In 2022 he participated in most of the discussions related to how ActivityPub could be implemented in Gitea. His knowledge of the architecture and the codebase are essential to find the best way to approach non-trivial problems such as the representation of federated users or the translation of internal references to issues, pull requests, etc. > Requested Amount: 50,000€ > Explain what the requested budget will be used for? Does the project have other funding sources, both past and present? (If you want, you can in addition attach a budget at the bottom of the form) The budget will be used exclusively to pay for the time of Anthony Wang, Loïc Dachary, 6543 and Gusted. Gitea is supported by sponsors that provide "in kind" resources such as hardware or hosting. Financial donations amount to a total of ~25,000€ since the beginning of the project and has not been used to advance the development of the project. Gitea developers are not paid by the Gitea project. The discussions regarding the support of ActivityPub in Gitea started late 2020 (https://github.com/go-gitea/gitea/issues/14186) but the developers involved in Gitea did not have the resources to make progress. In January 2022 a [grant was awarded](https://nlnet.nl/project/Gitea/) to two Gitea developers to advance federation but they have not been able to advance the workplan. Progress was made independently in 2022, for the most part by Anthony Wang, Loïc Dachary, Gusted and 6543. There however still is a long way to go and it will require significant funding. > Compare your own project with existing or historical efforts. Regarding federation, a [forgefed plugin](https://pagure.io/pagure-forgefed) was developped for the [pagure](https://pagure.io) forge in 2021. There are discussions related to federation in GitLab but there is no ongoing development. The [vervis](https://vervis.peers.community/) forge initiated by the authors of forgefed resumed its development in June 2022. The larger landscape of forge federation is described in the [State of the Forge Federation: 2021 to 2023](https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/) that was published in June 2022. It was authored by Loïc Dachary and reviewed by all active participants. > What are significant technical challenges you expect to solve during the project, if any? Gitea adopting **federation will require a little bit of a different philosophical mindset** than perhaps is common. Rectifying that, or isolating that, with the existing codebase is a core engineering challenge. For instance, the security model needs to be revised to take into account incoming messages from other Gitea instances. It no longer is just about moderating users with a registered and active account. ActivityPub is a recent standard of the W3C, last published in 2017, and has no reference implementation in Go, the langage used by Gitea. **The [go-ap](https://lists.sr.ht/~mariusor/activitypub-go/) library is a good starting point but is still in its infancy** and requires work to implement the forgefed extension. > Describe the ecosystem of the project, and how you will engage with relevant actors and promote the outcomes? Gitea is a community led project and has no centralized authority. Although people are [appointed by vote](https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md#maintainers) and have a leadership position, the [roadmap is largely self-organized](https://github.com/go-gitea/gitea/issues/16429). **Implementing federation in Gitea is therefore less of a one time decision and more of a continuous dialog with the community of developers. As a result, the roadmap is likely to be challenged in ways that are difficult to forsee.** The go-ap library author has been responsive and helpful whenever Anthony Wang asked for input and guidance. The availability of federated features in Gitea will be announced with each new Gitea release. > What should we do in the other case, e.g. when your project is not immediately selected? X I want NLnet Foundation to erase all information should my project proposal not be granted