--- title: "Contribute to decentralized hosting service" date: 2021-07-03 lang: en categories: [ blog ] tags: [tech, foss, git, hosting, contribution, decentralization, "pull request"] translationKey: "decentral-contribution" --- So, a few days ago I've had a conversation from my Pleroma account concerning SourceHut and git hosting in general. Original thread [here][orig-thread]. So in short, OP wanted to move out of GitHub, for some reasons, probably because it is: - centralized - non-free[^0] - hosted by Microsoft - have been hostile to developers - exploit free software[^1] How ironic, because *free software developers* use a *non-free service* for development, which is a *centralized* service that wraps around a *decentralized* protocol. ## Decentralized hosting Let's ignore that thread for a moment. If you want to avoid GitHub (and you should), there are two solutions: - Use some other hosted instances, like codeberg.org or notabug.org - Self-host your own instance, using free software like gitlab, gitea, or even a barebone git server like cgit But this decentralization introduces a (not) new problem: how to contribute to another project, when the project is hosted on a different instance than yours? There are three options: - Create yet another account to contribute - *Meh I can leave them be* - Make a ***[pull request][git-pr]*** But how do you make a *pull request* without having an account there? If you clicked on the link above, you can see how: 1. host their clone somewhere publicly available---could be anywhere 2. push up a branch with the change 3. contact you via email or slack or whatever to "request" that you "pull" the changes in that branch/remote 4. feedback/discussion continues out of band, contributor can push updates to the branch, you can pull them down to review Illustration of how it works In fact, this is described as [one of the common workflows][git-workflow] for git and is what happens behind the scene in GitHub pull request (except a GitHub PR pull directly to maintainer's remote and the remotes must be hosted by them). ## Mailing list workflow It is reasonable to assume everyone has an email. After all, most services require emails for registration, and more importantly, to `git commit` you have to set an email value. On the contrary it's not reasonable to assume someone have a GitHub account. Therefore, it makes perfect sense to accept contribution via email, regardless of your hosting service or main contribution model. Without an explicit instruction, the contributor can find the maintainer's email address via git commits. However, this raises a problem: the communication is private. Thus, a public mailing list is important for an open atmosphere. [SourceHut][sourcehut] makes this easier: it provides mailing lists that you can use for issue tracking, discussion, and contribution. It is free software, and works without JavaScript, which provides a clean and lightweight UI, though it might not be as eye-catching as some people expected, but that's subjective. I am aware that one of the project maintainers had (have?) been rude towards others inside the free software community, and therefore many people wouldn't want to support him. However, the project is free software and licensed under an AGPL license, which means you can: - self host your own instance - maintain your own fork so you don't have to depend on them And if you really don't want to use anything associated with him, I'd still hope you would host a mailing list for your free software projects. Let's keep the free software development stay away from proprietary platforms and keep it decentralized! --- Disclaimer: I'm not affiliated with codeberg.org, notabug.org, or sr.ht [orig-thread]: https://merveilles.town/@maxc/106502916709836497 [git-pr]: https://merveilles.town/@nasser/106504758341988490 [git-workflow]: https://git-scm.com/about/distributed [sourcehut]: https://sourcehut.org/ [^0]: I know [services can't be free or non-free](https://www.gnu.org/philosophy/network-services-arent-free-or-nonfree.html), but I still use it in the sense that the application that runs the service isn't free. [^1]: The most recent example is Copilot, which mass-exploited free software for training a code-generating model.