User-Controlled Resource Configuration
Introduction of a Site Default Layer
Programs locate resources by resolving them in some namespace. In traditional systems, the root of this namespace is controlled by the system administrator. Lazy programs check only a system configuration directory for their parameters. Thorough programs examine two or three paths for configuration information, with at least one mechanism under user control (~/.programrc or an environment variable $PROGRAM_CONFIG).

This situation often leaves users in an awkward position, unable to change a configuration that shouldn't require a system administrator's attention.

Snowflake addresses this issue by declaring no distinguished node of a namespace. Users are free to pass programs a new namespace instance. When the program resolves a path in the user-supplied namespace, the user has the opportunity to provide any configuration data desired.

Of course, system administrators would still provide default name trees. The key element is that users have ultimate control over the name-to-resource mapping that programs use on their behalf.


Where do configuration files go? In a traditional system, if they go in the sysadmin's space, the user is unable to change a program's configuration. If they go in the user's space, there is no straightforward way to distribute and update site defaults. If they can go in either place, we demand every program to provide such a mechanism. Some won't.

Snowflake defines a "site default" layer, where system administrators supply reasonable site defaults. Because users can override any name binding, these configurations don't hamper users. And since programs need look in only one place for configuration information, they are simpler and more consistent.