What does homu do?

Homu is an implementation of the “not rocket science rule of engineering”: that a branch of code should be maintained that passes all of the tests all of the time.

It works by reordering the common way that continuous integration is done. Normally, it goes in this order:

The problem is that the software product only gets tested after it’s already been uploaded to the main branch, and since other developers are expected to use that branch as the basis for their own work, they’ve started basing their work on a bad branch.

Homu does it this way:

This helps when there are lots of developers, because the main branch is always a copy of auto that passed. If reviewers approve changes more quickly than homu can build them, it will work through them one at a time in the order it receives them.

What’s going on with it?

homu.io was a free online service run by @barosl for the OSS community. It was based on the open source homu app, but it used a closed-source “frontend” for registering new repositories from the web.

It doesn’t exist any more. @barosl hasn’t updated it for years, the homu.io domain was allowed to expire, and nobody else has the source code for the frontend. You can still run the OSS version of homu if you want, like Servo and Rust are doing.

The Rust fork is considered the “canonical” version that you should use, since they’ve been adding new features and fixing bugs in homu. If you want to run your own instance, Rust’s fork also has a Dockerfile, which they’re running on top of Amazon ECS and terraform.

So what’s bors?

Bors-NG is a complete open source, modernized replacement for homu.io. It has no “closed source” version; what runs on app.bors.tech is what you get on GitHub.

It aims to be faster and more user-friendly while sticking to mostly the same idea. You can register for the publicly-hosted version run by @notriddle. If you want to set up your own instance, but are having trouble with the instructions, please ask about it on the forum, where the rules are “it’s better to just not answer the question than to be rude, even if it’s a question that’s been asked before.”