git clone https://github.com/sagemathinc/smc-- copy repocd srcnpm run install-all-- buildnpm test-- run test suiteinstall.py all --compute --web-- build and install some parts system-wide for development use- See
INSTALL.mdfor more details.
- William Stein, SageMath Inc and University of Washington -- founder; coding and design
- Harald Schilly, Vienna, Austria -- marketing, QA, coding
- Jon Lee, University of Washington -- frontend work, history viewer
- Rob Beezer, University of Puget Sound -- design, maintenance
- Nicholas Ruhland, University of Washington -- frontend work, tab reordering and resizing
- Keith Clawson -- hardware/infrastructure
- Andy Huchala, University of Washington -- frontend work, bug finding
- Tim Clemans -- fontend work
SMC is 100% open source, released under the GNU General Public License version 3+:
Copyright (C) 2014 -- 2016, SageMath, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
We test SMC via Travis CI. Here are the results:
DevOps note: The relevant files are:
- .travis.yml - to tell travis-ci what to do (two modes: client and server)
- smc/*/test/mocha.opts - defaults for running mocha
- smc/package.json - the "scripts" section (overwrite mocha reporter, only call
coverallswhen on travis-ci, etc.)
- Client -- javascript client library that runs in web browser
- Load balancer/ssl -- HAproxy
- Database -- RethinkDB
- Compute -- VM's running TCP servers (e.g., sage, console, projects, python3, R, etc.)
- Hub -- written in Node.js; primus server; connects with everything -- compute servers, database, other hubs, and clients.
- Storage -- Snapshots of project data
- HTTP server -- Nginx
- admin.py -- Python program that uses the paramiko library to start/stop everything
- The Cloud -- Google Compute Engine
Client Client Client Client ...
/|\
|
https://cloud.sagemath.com (primus)
|
|
\|/
HAproxy (load balancing...)HAproxy Admin (monitor and control system)
/|\ /|\ /|\ /|\
| | | |
|http1.1 | | |
| | | |
\|/ \|/ \|/ \|/
Hub<----> Hub<---->Hub<---> Hub <-----------> RethinkDB <--> RethinkDB <--> RethinkDB ...
/|\ /|\ /|\
| | |
---------| | | (tcp)
| | |
| | |
\|/ \|/ \|/
Compute<-------->Compute<-->Compute <--- rsync replication to Storage Server, which has BTRFS snapshots