blob: 6c81b128b2a55ff2e208780c1cf4558c81b34413 [file] [log] [blame]
// Copyright 2016 The Upspin Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
Package upspin contains global interfaces and other definitions for the
components of the system.
Upspin provides a global hierarchical name space for accessing arbitrary
user-defined data. The interfaces for accessing and protecting data are
general: Any service that implements the interfaces defined here, whether
provided by the Upspin project itself or by an external agent that implements
these interfaces as an alternate access method, contributes to the global name
space.
The name space itself is a single rooted tree. The root of the tree contains a
subdirectory for each user, called the user root, that contains all directories
and storage for that user. The user root is identified by the user's name,
which has an email-like format. Thus the fully qualified name (called a path
name) of an item looks analogous to
user@name.com/file/name
There is no leading slash in a path name.
There are three fundamental services defined in Upspin.
* The StoreServer is the ultimate location for user-provided data. Every piece
of user data stored in the system is identified by a Location, which identifies
where it is stored and how to address it.
* The DirServer implements the name space, binding hierarchical, Unix-like
names to Locations of data stored in StoreServers. Directories also attach
metadata to file names, which may include encryption/decryption keys or other
access-control information.
* The KeyServer stores, for each registered user, the Location of the user root
and any public encryption keys exported by that user.
Each of these three services is itself distributed, so for instance a user root
may be hosted on or split across multiple DirServer instances, which coordinate
to provide a consistent view of the user's data.
Finally, the Client interface provides a coherent high-level file-like API
that, internally, calls upon the other services to access and manage the data.
Most applications using Upspin will talk to the Client interface alone.
Most users of Upspin will use the public KeyServer at key.upspin.io
to hold their public keys, but run private DirServers and StoreServers.
The shared key server combined with uniform interfaces provide a
consistent public view of the system.
Many of the methods of the types in this package accept or return slices or
pointers to data structures. It is a requirement that all implementations of
these methods do not share data with the caller, that is, that data passed can
be modified safely by the method or the caller without affecting the memory of
the caller or the method, respectively.
For more information about the overall system see
upspin.io/doc/overview.md
and other documents in that directory.
*/
package upspin