Chapter 1 – Introduction to Sage
1.1 Motivation
I started the Sage project in early 2005 in order to create a viable free open source mathematical software package that I could use for my research. I was frustrated with not being allowed to easily change or understand the internals of closed source systems1 and I had a deep concern that my students and colleagues could not easily use the commercially distributed software that I had spent many years developing (and contributing). I started Sage as a new project instead of switching to another system, since the capabilities of any available software for number theory at the time were far behind many key features of commercial systems.2 Several hundred people have since become involved in Sage development, and the goals have broadened substantially.
Sage uses a mainstream programming language, unlike all popular mathematics software, including Maple, Mathematica, and Matlab, which each use their own special- purpose languages written just for mathematics. One works with Sage using Python, which is one of the world’s most popular general purpose scripting languages. By using Python, one can use almost anything ever written in Python directly in Sage. And there is much useful Python code out there that addresses a wide range of application areas.
Instead of writing many of the core libraries from scratch like most math software systems have done in Sage I assembled together the best open source software out there, and built on it3. Also, the complete system is easily buildable from source on a range of computers. There are challenges: some of the upstream libraries can be difficult to understand, are written in a range of languages, and have different conventions than Sage. Thus it is important to strongly encouraging good relations with the projects that create many of the components of Sage.
A wide and vibrant community of developers and users have become involved with Sage. Due to the broad interests of this large community of developers, Sage has grown into a project with the following specific goal:
Mission Statement: Provide a viable free open source alternative to Magma, Maple, Mathematica, and Matlab.
1.2 What is Sage?
Sage is a free open-source mathematics software system licensed under the GNU Public License (GPL). It combines the power of about 100 open-source packages with a large amount of new code to provide a free open source platform for mathematical computation. Sage has many notable features.
- Sage is free, due mainly to the volunteer effort of hundreds of people and generous funding from the National Science Foundation, private donations, and other organizations such as Google and Microsoft. There are no license codes or copy protection. Sage is also open source, so there are absolutely no secret or proprietary algorithms anywhere in Sage. There is nothing that you are not allowed to see or change.
- Sage uses the mainstream programming language Python. Learning Sage will make you proficient in this popular, widely used, and well supported free programming language, which you will likely also use for other non-mathematics projects. Moreover, Sage features the Cython compiler, which allows one to combine Python, C/C++/Fortran libraries, and native machine types for potentially huge speedups.
- Sage is uniquely able to combine functionality from dozens of other mathematical software programs and programming languages via smart psuedoterminal interfaces. You can combine Lisp, Mathematica, and C code to attack a single problem.
- Sage has both a sophisticated multiuser web-based graphical user interface and a powerful command line interface. Sage can also be made to work with any other Python interactive development environment (IDE).
- Sage may have the widest range of mathematical capabilities of any single mathematical software system available. Sage and its components are developed by an active and enthusiastic worldwide community of people from many areas of mathematics, science, and engineering.
- Modifications to Sage are publicly peer reviewed, and what goes into Sage is decided via community discussions; no matter who you are, if you have a brilliant idea, the energy, and can clearly argue that something should go into Sage, it probably will. Known bugs in Sage, and all discussions about them are available for all to see.
Sage is nothing like Magma, Maple, Mathematica, and Matlab, in which details of their implementations of algorithms is secret, their list of bugs is concealed, how they decided what got included in each release is under wraps, their custom programming language locks you in, and you must fight with license codes, copy protection and intentionally crippled web interfaces.