Many of the Gradle API domain objects are NOT serialisable, but WHY?

Many of the Gradle API domain objects, e.g. SourceSet – the one that is ought to be used to model Gradle source sets – are NOT flagged as serializable.

Many of the Gradle internal procedures, on the other hand, e.g. executing a build in the InProcessBuildActionExecuter, require that the payload processed – the objects used to model the project – is serializable, see e.g. InProcessBuildActionExecuter:52

This means that the use of the API domain objects is limited in third-arty plugins. For example, the above mentioned SourceSet domain object cannot be re-used to expose the source sets in a custom project model created using the ToolingModelBuilder that would include a simple function

    override fun getSourceSets(): List<SourceSet> {
        return sourceSets

I wonder if this was intentional and we plugin developers should not re-use Gradle API domain objects to model Gradle projects? Huh? Anybody?