This is going to be some sort of a public service announcement, with side notes. This has been brewing for a long, long time (years), it’s just that I never seemed to have the focus time required to solve this once and for all. But now I decided to get moving, and it is already ongoing. If you are among those few with an interest in code I publish, do read on.

What?

I am moving all of my public source code repositories off of GitHub. My ambition is to completely end my own usage of GitHub, in short order. Henceforth, I will not rely on GitHub in any way for my own projects, and I will only use GitHub to occasionally interact with and contribute to other peoples’ code hosted on GitHub. So yes, I am keeping my account but I will eventually remove all my code. That, unfortunately, means I won’t be able to leave the repositories in an archived or read-only state – I will have to wipe (physically destroy) the object database by force-pushing a new “initial commit” that removes all history. Why? Because I simply can’t afford to leave GitHub in possession of any of my code.

I am doing this swiftly but gradually, one repo at a time, and I expect that most repositories are of no real interest to anyone except myself. (Maybe not even me, as lots of my old repos are de facto unmaintained/abandoned. But they still contain code I’ve written, so they must be migrated as per the above.)

Why now?

As stated above, this has been on my TODO list for a long time, and there is no special occasion. I just had the opportunity to spend some quality hours during the winter break and develop my own alternative that will serve me going forward. I also had time to research deeper into the controversial issues (chiefly, but not exclusively, concerning Copilot) surrounding GitHub. That was enough of a nudge to convince myself that migrating off of GitHub is long overdue. (I had that itch ever since the Microsoft acquisition was announced. Others have beat me to it.)

Why me?

I count myself as an incredibly privileged software developer, having had a lot of success in the past two decades both professionally and with several of my open-source projects. Were I unable, or unwilling, to stand up to this challenge, then I could not meaningfully expect anyone else to do it either.

But change needs to happen. And as the great N. N. Taleb says: “If you see fraud and don’t say fraud, you are a fraud.” I am speaking with my actions.

What will change?

Okay, let’s go through a few practical points of what will be different from now on. I assume if you are still reading this, you are one of those people who use, or otherwise have an interest in following one or several of my projects. So this is for you:

  • My new self-hosted Git repository collection is at https://git.hq.sig7.se.
  • Migrated repositories will have their name kept intact, and each of them will be available at https://git.hq.sig7.se/<repo-name>.git. This same URL will serve both git access (HTTPS-based) and the web-based interface. For example, the μMon project’s sources will be hosted at https://git.hq.sig7.se/umon.git instead of https://github.com/tomscii/umon.
  • There will be no public issue tracker and no ability to submit pull requests against these repositories. Instead, you are invited to generate and submit patches according to the well-established email-based git workflow. This is perhaps the biggest change and it is completely intentional (see below).
  • A few ancillary pages will be migrated to my self-hosted web space (e.g., Zutty wiki pages) instead of GitHub-provided hosting. There will be redirection in place.
  • Migrated repositories will have their content wiped on GitHub, with a README that explains where the code has moved. It will be impossible to miss, and equally impossible to continue using the repo on GitHub.

What will NOT change?

Most of what ultimately matters will remain the same:

  • You will continue to access the full source repository of all my published open source projects, via the same git client. You just have to adjust the remote URL, but that’s all.
  • I will still react to the right sort of correspondence and proposed patches in a reasonable way. I do expect you to do your homework first, and I am very comfortable not responding. (But that’s not really a change either.)
  • You will still be able to “watch” or “follow” interesting repos by subscribing to their activity feed (Atom or RSS).
  • You will still be able to identify tags and download corresponding snapshots in .tar.gz or .zip archive formats, which is basically all the “Releases” feature on GitHub did.

What am I giving up?

Very little, actually. As a GitHub user, I have never been super social and my usage of the site has always stuck to “plain Git plus a fancy web interface”, more or less. That said:

  • Visibility. Probably less people will stumble upon my public work. On the other hand, one of the main drivers of user traffic has been posts published on this blog (occasionally socialized on various link aggregators), and that will not change. I can (and will) still publish whatever I want on my own platform, and interested people can (and will) find it. And I was never into this popularity thing anyway.
  • Stars, badges of honor, green squares of activity, etc. I honestly do not care about these gamification devices, or rather, I believe getting rid of them is a pleasant side effect. Plus I never really liked the rounded-corner whitespace-stuffed “modern” look of the GitHub website, and it has only gotten more annoying as years went by. Now I even see ads (for their own stuff, including Copilot) and such crap right beside my code. None of this will be missed.
  • Issue trackers and pull requests – as explained above, I am making a conscious and deliberate move towards an email-based workflow, 100% on top of my self-hosted platform. If you want to contribute a patch or report a bug, or just have a conversation about something I made, you are expected to write up a reasonably literate email and send it to the right address. As trivial as that might sound, I reckon it will filter out most low quality, low effort “issues” I have seen opened against some of my GitHub repos. The need for a different (arguably less mainstream) workflow and some minimal up-front investment should discourage people leaving such low-value drive-by issues (“XYZ does not work” without any detail, demonstrating lack of basic literacy and/or time investment on their part). I can totally do without such “contributions”.

Why self-host instead of great new free service XYZ?

I gave some thought to moving my code to another hosting service such as CodeBerg or SourceHut. They are probably great and I have nothing against them. However, in the last several years I have become very comfortable self-hosting my personal web presence and I simply think that for me personally, this is the right path to follow. Owning my platform feels right in a way no other platform or service, free or paid, ever can.

I remember when a decade or so ago, I made the move (with some of my then-current projects) to GitHub from the increasingly annoying and moribund SourceForge.net. Even though I was a bit late to that move-in party, GitHub still seemed fresh and trendy (with scummy old Microsoft nowhere to be seen). Now it is GitHub that has clearly become badly misaligned with their (free-tier) users. At this point, I simply do not want to be on anyone’s platform other than my own. This, by its very nature, is going to be a robust choice, because I have ultimate control over everything. Nobody gets to hang their site-wide copyright notice and “Terms of use” under my content!

Epilogue

After a few days of hammering at it, the migration is finally complete! Of course it took more work than I anticipated, but I believe it was worth it. I fixed a bunch of broken old links (artifacts of previous moves) as well, and I was amazed by the sheer amount of stuff I accumulated over the years. But I’m delighted to see that it’s now all in a good place, in fact physically residing in the very same room where I spend (most of) my time.

It is our own (in)decisions (to stay where we are) that give mega-corporations their power over us. It is us who empower them, by willingly handing them our data, our privacy, and ultimately all control over our (digital) lives – in exchange for promises of convenience and security. This is not a technical, but a social problem.

As the (famously misattributed) saying goes: “The only thing necessary for the triumph of evil is for good men to do nothing.”