QMachine (QM) is a web service for distributed computing. Its design relaxes
the usual requirements of a distributed computer so far that it can be powered
completely by web browsers – without installing anything. As a model for
computation, QM has been detailed in a recent paper,
QMachine: commodity supercomputing in web browsers. This manual details QM as a
software platform, with particular focuses on how it works, how to use it, and
how to contribute to the open-source project.

Coordination of a distributed computing effort requires a common data
interchange format and a common communications protocol. As a web service, QM
provides an Application Programming Interface (API) that uses JavaScript Object
Notation (JSON) as its common data interchange format and Hypertext Transfer
Protocol (HTTP) as its communications protocol. In short, QM’s API allows
JSON-encoded messages sent to URLs over HTTP to become a message-passing
interface for distributed computing. The use of web-friendly technologies is
deliberate – QM is designed to be as universal as the World Wide Web itself.

Most QM-related software falls into two categories. API clients are programs
that consume QM’s API, and API servers are programs that provide the API. Web
servers represent a third category, however, that is important only for hosting
content such as the browser client library.

An API client is a program that consumes QM’s API by sending JSON-encoded
messages over HTTP to specific URLs, as defined by QM’s HTTP API. The
vast majority of programs will fall into this category, and most of these
programs will use a client library for convenience. Currently, the only client
library supported by the QM project is the
browser client, which is written completely in
JavaScript. An outdated Node.js client is now being resurrected, and a Ruby
client is planned.

An API server, by way of contrast, is a program that provides QM’s API by
listening for and responding to specific HTTP requests, as defined by
QM’s HTTP API. There are two implementations to choose from: the
original reference version written in Node.js and the
“teaching version” written in Ruby. The Node.js version is
recommended for production.

For convenience in hosting, basic web servers are packaged alongside the API
servers. A web server listens for and responds to HTTP requests for files and
other resources that are published online. A web server is not strictly
necessary as part of QM, but it is useful for making the browser client
available to web browsers. The web servers bundled with the API servers are
present only for convenience, and it is trivial to use off-the-shelf web
servers like Apache or Nginx instead. (In fact, QM’s own homepage uses
Nginx.)