The current implementation allows the configuration of a local _or_ a remote cache. This will later be changed so a local cache can be used in tandem with a remote cache. Currently if a remote cache is specified and enabled, then the local cache is ignored. If a remote cache is specified via `remote(Class)` or `remote(Class, Action)`, then the previously specified remote is forgotten completely.
The local cache is by default enabled and allows pushing data to it when the `org.gradle.cache.tasks` system property is set to true. This will later be replaced by a command-line switch.
Plugins can use an SPI to register further build cache types (i.e. subtypes of BuildCache). Build cache implementations can expose their own configration options via properties and methods on the BuildCache subtype.