git clone https://github.com/sagemathinc/smc
-- copy repocd src
npm run install-all
-- buildnpm test
-- run test suiteinstall.py all --compute --web
-- build and install some parts system-wide for development use- See
INSTALL.md
for 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
coveralls
when 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