- If you agree 👍 this comment
- If you have concerns, add a comment explaining what they are in a dispassionate and rational way
- If you have no opinion 👀 this comment
The Forgejo development workflow currently is a soft fork of Gitea. It is a set of commits carefully maintained and cherry-picked weekly on top of the Gitea development branch. While this has worked well since Forgejo inception, it is now time for Forgejo to change to become a hard fork. It will evolve independently of Gitea but will cherry-pick commits that contain bug fixes. This is the development model most Free Software developers expect when a project forks from another project.
This proposed agreement is the outcome of a discussion where a significant number of active Forgejo contributors agreed it should be a decision that is made in accordance to the decision making process. Once implemented, there is no turning back and it will impact the future of Forgejo as a whole.
The agreement will be documented on 14 February 2024 at the earliest, possibility later if concerns need to be addressed.
Should an agreement be reached, it will lead to an implementation explained in "When" and "How". In the meantime Forgejo contributors can get familiar with the new workflow as explained in the "Transition" phase, there is no blocker. A hard fork is ultimately a judgment call: each Forgejo community member has to decide for themselves if the time is right (see the "Timing" section below) and weigh the advantages of this workflow (see the "Benefits" section below) and its disadvantages (see the "Loss" section below).
When
After the next major release (v1.22) or March 1st, whichever comes first. Because it is when the release team has more time to work on it, being done with the preparation of the major release.
How
- All feature branches are merged into the forgejo branch one last time
- The developer workflow is updated to remove the part on feature branches
- A blog post is published to announce Forgejo will eventually no longer be a drop-in replacement of Gitea
- Tools and/or procedures are written to allow Forgejo to track the commits of Gitea (for instance when it is decided to implement compatibility / interoperability in Forgejo)
Interoperability
The Forgejo API will strive to remain compatible with the Gitea API going forward, after a hard fork. Existing APIs at the time of the fork are public, and changing them is a breaking change, which has to be evaluated very carefully, and not done lightly. Future APIs should similarly be evaluated, and Forgejo will try to remain compatible with Gitea. However, Forgejo shall also use their own judgement whether to implement an API or not, and how - with the previous goals in mind.
Transition
The transition phase before the hard fork is implemented starts 14 January 2024 and allows Forgejo contributors to get familiar with the new workflow. There are a number of parts in Forgejo that already are independent from Gitea and they can be a training ground to prepare for the hard fork.
After discussions about six months ago the maintenance for stable branches switched from rebasing to cherry-picking. To get familiar with how cherry-picking versus rebase is done check the logs of the stable branches releases starting with v1.20 and v1.21.
The documentation is hard forked and maintained differently: it changed very significantly and cherry-picking is rarely possible. Instead modifications found in Codeberg or Gitea are manually copy/pasted on a regular basis, when and if their content is relevant to Forgejo.
The Forgejo runner is also hard forked and demonstrated another pattern. The Gitea runner has not changed much in the past six months and cherry-picking the few commits it contains has been very little work. It is comparable to what would happen in areas of Gitea that do not change much.
Timing
- Forgejo grew to have more contributors (see the last section of each monthly update)
- There is enough funding
- There are enough resources (hardware, etc.)
- Forgejo governance & project organization is complete
- It would not hinder a cooperation that does not exist
- Only the most trivial bug fixes originating from Forgejo have been successfully contributed to Gitea, features or even security fixes are either stalled, re-written or rejected.
- Gitea contributors never cherry-picked a commit from Forgejo
- A few Gitea contributors are active in Forgejo spaces, but their participation is such that it would not be negatively impacted by this decision
Benefits
Primarily
Secondarily
Loss
Primarily
- Bug fixes in Gitea become increasingly more difficult to integrate in Forgejo
- Forgejo will eventually stop being a drop-in replacement
Secondarily
- Features introduced in Gitea become increasingly more difficult to integrate in Forgejo
Update 21 January 2024
The following is added
Interoperability
The Forgejo API will strive to remain compatible with the Gitea API going forward, after a hard fork. Existing APIs at the time of the fork are public, and changing them is a breaking change, which has to be evaluated very carefully, and not done lightly. Future APIs should similarly be evaluated, and Forgejo will try to remain compatible with Gitea. However, Forgejo shall also use their own judgement whether to implement an API or not, and how - with the previous goals in mind.
Update 26 January 2024
The following is added
How
- Tools and/or procedures are written to allow Forgejo to track the commits of Gitea (for instance when it is decided to implement compatibility / interoperability in Forgejo)
* If you agree 👍 this comment
* If you have concerns, add a comment explaining what they are in a dispassionate and rational way
* If you have no opinion 👀 this comment
---
The [Forgejo development workflow](https://forgejo.org/docs/v1.21/developer/workflow/) currently is a soft fork of Gitea. It is a set of commits carefully [maintained and cherry-picked weekly](https://codeberg.org/forgejo/forgejo/milestones?state=closed&q=cleanup) on top of the Gitea development branch. While this has worked well since Forgejo inception, it is now time for Forgejo to change to become a hard fork. It will evolve independently of Gitea but will cherry-pick commits that contain bug fixes. This is the development model most Free Software developers expect when a project forks from another project.
This proposed agreement is the outcome of [a discussion](https://codeberg.org/forgejo/discussions/issues/96) where a significant number of active Forgejo contributors agreed it should be a decision that is made in accordance to the [decision making process](https://codeberg.org/forgejo/governance/src/branch/main/DECISION-MAKING.md). Once implemented, there is no turning back and it will impact the future of Forgejo as a whole.
The agreement will be documented on 14 February 2024 at the earliest, possibility later if concerns need to be addressed.
Should an agreement be reached, it will lead to an implementation explained in "When" and "How". In the meantime Forgejo contributors can get familiar with the new workflow as explained in the "Transition" phase, there is no blocker. A hard fork is ultimately a judgment call: each Forgejo community member has to decide for themselves if the time is right (see the "Timing" section below) and weigh the advantages of this workflow (see the "Benefits" section below) and its disadvantages (see the "Loss" section below).
## When
After the next major release (v1.22) or March 1st, whichever comes first. Because it is when the release team has more time to work on it, being done with the preparation of the major release.
## How
* All [feature branches](https://forgejo.org/docs/v1.21/developer/workflow/#feature-branches) are merged into the forgejo branch one last time
* The [developer workflow](https://forgejo.org/docs/v1.21/developer/workflow/) is updated to remove the part on feature branches
* A blog post is published to announce Forgejo will eventually no longer be a drop-in replacement of Gitea
* Tools and/or procedures are written to allow Forgejo to track the commits of Gitea (for instance when it is decided to implement compatibility / interoperability in Forgejo)
## Interoperability
The Forgejo API will strive to remain compatible with the Gitea API going forward, after a hard fork. Existing APIs at the time of the fork are public, and changing them is a breaking change, which has to be evaluated very carefully, and not done lightly. Future APIs should similarly be evaluated, and Forgejo will try to remain compatible with Gitea. However, Forgejo shall also use their own judgement whether to implement an API or not, and how - with the previous goals in mind.
## Transition
The transition phase before the hard fork is implemented starts 14 January 2024 and allows Forgejo contributors to get familiar with the new workflow. There are a number of parts in Forgejo that already are independent from Gitea and they can be a training ground to prepare for the hard fork.
After [discussions about six months ago](https://codeberg.org/forgejo/website/pulls/296) the maintenance for stable branches switched from [rebasing to cherry-picking](https://forgejo.org/docs/v1.21/developer/workflow/#stable-branches). To get familiar with how cherry-picking versus rebase is done check the logs of the stable branches releases starting with [v1.20](https://codeberg.org/forgejo/forgejo/milestones?state=closed&q=Forgejo+v1.20) and [v1.21](https://codeberg.org/forgejo/forgejo/milestones?state=closed&q=Forgejo+v1.21).
The [documentation](https://codeberg.org/forgejo/docs) is hard forked and maintained differently: it changed very significantly and cherry-picking is rarely possible. Instead modifications found in Codeberg or Gitea are manually copy/pasted on a regular basis, when and if their content is relevant to Forgejo.
The [Forgejo runner](https://code.forgejo.org/forgejo/runner) is also hard forked and demonstrated another pattern. The Gitea runner has not changed much in the past six months and cherry-picking the few commits it contains has been very little work. It is comparable to what would happen in areas of Gitea that do not change much.
## Timing
* Forgejo grew to have more contributors (see the last section of [each monthly update](https://forgejo.org/tag/report/))
* There is [enough funding](https://codeberg.org/forgejo/sustainability/#2023)
* There are [enough resources](https://forgejo.org/docs/v1.21/developer/infrastructure/) (hardware, etc.)
* Forgejo [governance](https://codeberg.org/forgejo/governance#meta) & [project organization](https://forgejo.org/docs/v1.21/developer/) is complete
* It would not hinder a cooperation that does not exist
* Only the most trivial bug fixes originating from Forgejo have been successfully contributed to Gitea, features or even security fixes are either [stalled, re-written or rejected](https://github.com/go-gitea/gitea/pulls/earl-warren).
* Gitea contributors never cherry-picked a commit from Forgejo
* A few Gitea contributors are active in Forgejo spaces, but their participation is such that it would not be negatively impacted by this decision
## Benefits
### Primarily
* It **allows to not be impacted by regressions introduced in Gitea** (see [the blog post about the storage regressions](https://forgejo.org/2023-09-monthly-update/#fixing-s3-configuration-bugs-and-regressions), the [pull request that refactored the PAT in v1.20](https://github.com/go-gitea/gitea/pull/24767) which had unspecified side effects and led to the recommendation to re-create all tokens and [the pull request that implements actions](https://github.com/go-gitea/gitea/pull/21937/files) which is still mostly untested today)
### Secondarily
* It is more friendly to casual contributors compared to [the current workflow](https://forgejo.org/docs/v1.21/developer/workflow/)
* It allows to make architectural changes
* It allows to not be impacted by [Gitea shady security behavior](https://codeberg.org/forgejo/website/issues/392)
## Loss
### Primarily
* Bug fixes in Gitea become increasingly more difficult to integrate in Forgejo
* Forgejo will eventually stop being a drop-in replacement
### Secondarily
* Features introduced in Gitea become increasingly more difficult to integrate in Forgejo
---
Update 21 January 2024
The following is added
## Interoperability
The Forgejo API will strive to remain compatible with the Gitea API going forward, after a hard fork. Existing APIs at the time of the fork are public, and changing them is a breaking change, which has to be evaluated very carefully, and not done lightly. Future APIs should similarly be evaluated, and Forgejo will try to remain compatible with Gitea. However, Forgejo shall also use their own judgement whether to implement an API or not, and how - with the previous goals in mind.
---
Update 26 January 2024
The following is added
## How
* Tools and/or procedures are written to allow Forgejo to track the commits of Gitea (for instance when it is decided to implement compatibility / interoperability in Forgejo)