[[PageOutline]] = Basic concepts = == Project == A '''project''' is an entity that does distributed computing using BOINC. Projects are independent; each one has its own applications, database, web site, and servers, and is not affected by the status of other projects. Each project is identified by a [ServerComponents#ThemasterURL master URL], the URL of its web site. Multiple projects can coexist on a single server computer. At the implementation level, a project consists of * a directory tree, containing files related to the project, and * a MySQL database. A BOINC project involves a number of interrelated entities, described below. Each type of entity has a corresponding database table. === Application === An '''application''' includes several programs (for different platforms) and a set of [JobIn workunits and results]. A project can include multiple applications. === Platform === A '''platform''' is a compilation target - typically a combination of a CPU architecture and an operating system. BOINC defines a set of standard platforms. === Application versions === An application program may go through a sequence of versions. A particular version, compiled for a particular platform, is called an '''application version'''. An application version consists of one or more files. === Workunit === A '''workunit''' is a computation to be performed, i.e. a "job". It may include any number of input files. It has various attributes, such as resource requirements and deadline. A workunit is associated with an application, not with an application version. In other words, you don't specify what platform the job is to be run on. === Result === A '''result''' describes an instance of a computation, either unstarted, in progress, or completed. Each result is associated with a workunit. In some cases there may be several instances, or "replicas", of a given workunit. === Account === Each volunteer in a project has an '''account''', identified by an email address and password. An account has an associated amount of '''credit''', a numerical measure of the work done by that volunteer's computers. == Clients and attachment == Volunteers run a program called the '''BOINC client'''; this is the only software they manually download. A given computer running the BOINC client can be '''attached''' to accounts on one or more project. Each attachment has a '''resource share'''. If a computer is attached to multiple projects, its resources are divided among them in proportion to their resource shares. == BOINC in a nutshell == The overall flow of BOINC: * When a BOINC client runs low on work, it issues a '''scheduler request''' to one of its attached projects. The request message specifies the client's platform. * The project's '''scheduler''' (a daemon running on its server) scans the project's database for jobs that can be handled by the client, and returns one or more. * The client downloads the files associated with the application versions and workunits, and executes the programs. * When the jobs are completed, the client uploads the resulting output files. This cycle is repeated indefinitely.