ソフトウェアの真の自由を実現するサービス、forgefriendsとは何か！！

なんとなく[oauth2のGitHubリポジトリ](https://github.com/oauth-xx/oauth2)を覗いたら、Peter Bolingって人が[なんか楽しそうなことをやってた](https://github.com/oauth-xx/oauth2/discussions/622)んですよ。

# [おれはGitHubをやめるぞ！](https://dev.to/pboling/im-leaving-github-50ba)

GitHubはFOSSではない！プロプライエタリで秘密主義だ！
GitHubをFOSS開発に使うことを深く懸念する！！
I'm leaving Github！！
oauthはGitHubをやめるぞ！！

とまあそんなようなことを言っています。


# [今こそ！GitHubを辞めるときが来た！](https://sfconservancy.org/blog/2022/jun/30/give-up-github-launch/)

上記記事からリンクされている、[Software Freedom Conservancy](https://sfconservancy.org/)による`GitHubを深く懸念する`記事です。
Software Freedom ConservancyはFOSSを支援する非営利団体なのですが、原理主義すぎて言動がかなり過激なことでも知られています。

本記事、`Give Up GitHub: The Time Has Come!`については日本語紹介記事が幾つか上がっているので、詳しくはそのあたりを見てみるとよいかもしれません。

https://gigazine.net/news/20220704-software-freedom-conservancy-give-up-github/
https://news.mynavi.jp/techplus/article/20220701-2385316/

ざっくりと中身を紹介すると、とにかくGitHub辞めろ！という主張です。


# この人だれ？

はて、この[Peter Boling](https://github.com/pboling)って人は誰なのでしょうか？
なんの権利があってGitHubからoauth消すとか言ってるわけ？

Peter Bolingは、Rubyの[oauth](https://rubygems.org/gems/oauth)および[oauth2](https://rubygems.org/gems/oauth2/)ジェムの作者です。

現状Rubyでoauthやるならほぼ[これ一択](https://rubygems.org/search?query=name%3A+oauth2+++downloads%3A+%3E100000)の寡占状態みたいなので、もし彼がGitHubを辞めてしまうとなるとなかなか影響が大きそうですね。


# GitHub辞めるって具体的にどうすんの？

GitHub辞めるって口で言うだけなら簡単ですが、ではその後どうすればいいんだよ、という話です。

単にソースだけ移動すれば済むというわけではなく、大抵の場合はリポジトリに様々なCI/CDやらなにやらが繋がっているわけで、そう簡単に易々と移動できるわけでもありません。
お前ら散々疎結合だマイクロサービスだ言っておきながらめっちゃGitHubに依存しとるやんけ。

そう、そんなときのためのあなたのお供！それこそが[forgefriends](https://forgefriends.org/)なのです！

ということで、ここまでが話の枕なのでした。
以下ではその野心的プロジェクト、[forgefriends](https://forgefriends.org/)について紹介していきます。

ちなみにforgeは鍛冶場とかの意味ですが、forgefriendsで言うところのforgeはソースコードを鍛えるところ、すなわちGitHubやGitLabなどのソースコードホスティングサービスを指す意味で使われています。
ていうか[forge](https://www.google.com/search?q=forge)で調べるとMinecraftForgeばっかり出てくるな。
ModLoader全盛期に初めてForgeが出てきたときはSpriteIDやBlockIDの限界突破に感動したよね～。



# [FORGEFRIENDS](https://forgefriends.org/)

## FORGEFRIENDS

Forgefriendsは、forge間結合プロジェクトです。

ほとんどのフリーソフトウェアはプロプライエタリなforge、要するにGitHubでホストされており、コードやIssueなどのプロジェクト全体を異なるforgeに移動することは困難です。

Forgefriendsの目的は、全てのフリーソフトウェア開発者が、自分の好きなforgeを使って、他のforgeでホストされているプロジェクトに貢献できるようにすることです。

このプロジェクトの実体は[オンラインサービス](https://forgefriends.org/blog/2021/11/22/what-is-forgefriends/)です。

## WORK IN PROGRESS

2022年6月、[最初のアルファリリース](https://hub.docker.com/r/forgefriends/forgefriends)が公開されました。
しかし、こちらはエンドユーザのための用意ができてはいません。
[引き続き実装が進められています](https://lab.forgefriends.org/forgefriends/forgefriends/)。

Forgefriendsは、Giteaとコードを共有するため[Goで書かれて](https://forgefriends.org/blog/2021/10/17/go/)います。

[月次レポート](https://forgefriends.org/tags/report/)で、現在何が起きていて、次に何が行われるかをキャッチアップすることができます。

## MANIFESTO AND CODE OF CONDUCT

[forgefriendsコミュニティ](https://forgefriends.org/blog/2021/01/10/manifesto/)のメンバーであると自負する全ての者は、[行動規範](https://forgefriends.org/blog/2021/01/10/code-of-conduct/)に従って行動してください。

forgefriendsコミュニティの全てのメンバーには、活躍が期待されています。
問題や不満がある場合は問い合わせしてください。


# 結局何なのこれ？

移行ツールかと思ってたのですが、[ドキュメント](https://forum.forgefriends.org/t/definition-and-scope-of-the-forgefriends-project/546)を見てるとどうやら違うようです。

たとえばGitHubでIssueを立てるとGitLabにも同じIssueが立つし、GitLabにプルリクを出すとGitHubでもプルリクが送られるという、サービスをまたいだ同期システムでした。
これができると、ひとつのサービスに依存することなくコードを分散することが可能になるというわけです。

そして同期ではなく完全に移行したいという場合でも、いきなりGitHubを消し去るみたいな危険を冒さずに、一定期間両方のリポジトリに反映させ、徐々に移行していくなんてことができるわけですね。

まあたしかに実現できたらこりゃすごいとは思いますが、では片方にしか登録してないアカウントはどうなるの？とか両方にCD繋いだら二重デプロイになったりしないの？とか考え始めるとどのように再現するのか謎は深まるばかり。

## 今後の構想

今後は各リポジトリを互換させるだけにとどまらず、[共通の外部インターフェイスを定義](https://forgeflux.org/)して相互運用するみたいなことまで見据えているようです。
壮大な計画ですね。


# 現状

[2022年6月に初めてのα版](https://lab.forgefriends.org/forgefriends/forgefriends/-/tags/v0.0.1)がリリースされました。

[STATE OF THE FORGE FEDERATION: 2021 TO 2023](https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/)によると、2023年にGitHub・GitLab・Giteaをミラーリングする、とかそんな進捗でした。
つまり、まだ全然未完成です。

[commitも毎日行われており](https://lab.forgefriends.org/forgefriends/forgefriends/-/tree/main)、決して開発が停滞しているというわけではありませんが、とりあえず試したりすることができるレベルではなさそうでした。
残念ですね。

ていうか[この記事](https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/)、冒頭の主張やら全体の雰囲気が`Give Up GitHub`とめっちゃ似てるのが気になるな。
記名がないので誰が書いたかわからないけど同一人物だったりしないだろうか。


# まとめ

理想は高いものの、まだまだ実用できる段階ではありませんでした。

1年後にまた見てみることにしましょう。


# 感想

今後もGitHub使うわ。