nMany
levels for interaction
nHigh-level
client
nRepository
access (local, remote, pipe, etc)
nDirect
access to the storage
nEnables
scripting
nClients
can share a lot of code
nThe
command-line client is a small application built on top of the high-level client library
nGUI
clients can also use the high-level library
nLibrary-based
enables third-parties