Thoughts on GitHub
The GitHub monoculture has been bothering me for some time. Beyond the surface level, I never thought much about why, so I figured I’d write it down.
The first thing that bothers me is that GitHub makes it difficult to read the history of a particular piece of code. This has led to a behavior where not much thought goes into commit messages. Most of the time, messages are very short, and it’s hard to get an idea of what changes by reading the git history.
The unit of work is instead the pull request. This, of course, is not a concept that exists in Git proper. Pull request messages are where effort is spent to explain what has been done, and why. A major issue with this is that this information is a form of out-of-band communication; none of this is accessible from the git repo. Say what you will about mailing lists, but more thought tends to go into the individual commit messages, and it’s all readily available to anyone with a clone.
This leads to a form of vendor lock-in, when important information is available exclusively on GitHub. What I would really like to see is a standardised way of collaborating across hosting providers. I want to be able to self-host, and still contribute to GitHub projects, and receive contributions from others, with low friction. Perhaps this could be built on top of mailing lists and GPG, abstracing it away as implementation details, and offering a nice web interface to those who prefer it.
Fortunately, I’m not the only one with this opintion. I recently came across GitPub, an initiative aimed at collaboration through federation, based on ActivityPub. I don’t know how it will work out, but I’m happy to see that there is movement toward decentralised solutions.
For better or worse, git won, and I think it’s time we actually take advantage of its decentralised nature. We should not be using misfeatures like pull requests, which ruin our history.
I also find it ironic that GitHub has become the git hosting solution for open-source projects, when GitHub itself is a closed-source, centralised walled garden/information silo.