One of the goal of this GSoC is to provide a way to write custom checks, so we need some public API of registering checks. I agree that my approach is ugly, but I don't see any better one. We've considered Russell's idea -- instead of registering checks, create a new setting `SYSTEM_CHECKS`, a list of all checks. However, we rejected this idea due to its drawbacks -- when you want to install an app with some validation stuff, you need to register it in both `INSTALLED_APPS` and `SYSTEM_CHECKS`. What's more, it introduces a new setting and every setting is a global state, so it doesn't solve the issue of global state.

Use cases for custom checks are: security checks (like `django-secure`) and custom app checks (i. e. `admin` app performs its own checks and third-party apps may want to do the same).