% This is "sig-alternate.tex" V1.8 June 2007
% This file should be compiled with V2.3 of "sig-alternate.cls" June 2007
%
% This example file demonstrates the use of the 'sig-alternate.cls'
% V2.3 LaTeX2e document class file. It is for those submitting
% articles to ACM Conference Proceedings WHO DO NOT WISH TO
% STRICTLY ADHERE TO THE SIGS (PUBS-BOARD-ENDORSED) STYLE.
% The 'sig-alternate.cls' file will produce a similar-looking,
% albeit, 'tighter' paper resulting in, invariably, fewer pages.
%
% ----------------------------------------------------------------------------------------------------------------
% This .tex file (and associated .cls V2.3) produces:
%       1) The Permission Statement
%       2) The Conference (location) Info information
%       3) The Copyright Line with ACM data
%       4) NO page numbers
%
% as against the acm_proc_article-sp.cls file which
% DOES NOT produce 1) thru' 3) above.
%
% Using 'sig-alternate.cls' you have control, however, from within
% the source .tex file, over both the CopyrightYear
% (defaulted to 200X) and the ACM Copyright Data
% (defaulted to X-XXXXX-XX-X/XX/XX).
% e.g.
% \CopyrightYear{2007} will cause 2007 to appear in the copyright line.
% \crdata{0-12345-67-8/90/12} will cause 0-12345-67-8/90/12 to appear in the copyright line.
%
% ---------------------------------------------------------------------------------------------------------------
% This .tex source is an example which *does* use
% the .bib file (from which the .bbl file % is produced).
% REMEMBER HOWEVER: After having produced the .bbl file,
% and prior to final submission, you *NEED* to 'insert'
% your .bbl file into your source .tex file so as to provide
% ONE 'self-contained' source file.
%
% ================= IF YOU HAVE QUESTIONS =======================
% Questions regarding the SIGS styles, SIGS policies and
% procedures, Conferences etc. should be sent to
% Adrienne Griscti (griscti@acm.org)
%
% Technical questions _only_ to
% Gerald Murray (murray@acm.org)
% ===============================================================
%
% For tracking purposes - this is V1.8 - June 2007

\documentclass{sig-alt-release}

\begin{document}
%
% --- Author Metadata here ---
\conferenceinfo{ISSAC'08,} {July 20--23, 2008, Hagenberg, Austria.} 
\CopyrightYear{2008}
\crdata{978-1-59593-904-3/08/07} 
% --- End of Author Metadata ---



\title{Can We Create a Viable Free Open Source Alternative to Magma, Maple,
  Mathematica and Matlab?}
%
% You need the command \numberofauthors to handle the 'placement
% and alignment' of the authors beneath the title.
%
% For aesthetic reasons, we recommend 'three authors at a time'
% i.e. three 'name/affiliation blocks' be placed beneath the title.
%
% NOTE: You are NOT restricted in how many 'rows' of
% "name/affiliations" may appear. We just ask that you restrict
% the number of 'columns' to three.
%
% Because of the available 'opening page real-estate'
% we ask you to refrain from putting more than six authors
% (two rows with three columns) beneath the article title.
% More than six makes the first-page appear very cluttered indeed.
%
% Use the \alignauthor commands to handle the names
% and affiliations for an 'aesthetic maximum' of six authors.
% Add names, affiliations, addresses for
% the seventh etc. author(s) as the argument for the
% \additionalauthors command.
% These 'additional authors' will be output/set for you
% without further effort on your part as the last section in
% the body of your article BEFORE References or any Appendices.

\numberofauthors{1} %  in this sample file, there are a *total*
% of EIGHT authors. SIX appear on the 'first-page' (for formatting
% reasons) and the remaining two appear in the \additionalauthors section.
%
\author{
% You can go ahead and credit any number of authors here,
% e.g. one 'row of three' or two rows (consisting of one row of three
% and a second row of one, two or three).
%
% The command \alignauthor (no curly braces needed) should
% precede each author name, affiliation/snail-mail address and
% e-mail address. Additionally, tag each line of
% affiliation/address with \affaddr, and tag the
% e-mail address with \email.
%
% 1st. author
\alignauthor
William Stein\\
       \affaddr{Department of Mathematics}\\
       \affaddr{University of Washington}\\
       \affaddr{Seattle, Washington}\\
       \affaddr{USA}\\
       \email{http://wstein.org}\\
       \email{wstein@gmail.com}\\
}
\date{May 2008}
% Just remember to make sure that the TOTAL number of authors
% is the number that will appear on the first page PLUS the
% number that will appear in the \additionalauthors section.

\maketitle
\begin{abstract}
  The goal of the Sage project ({\tt http://sagemath.org}) is to create a truly viable free open source
  alternative to Magma, Maple, Mathematica and Matlab.  Is this
  possible?
\end{abstract}

\category{D.2.8}{Software Engineering}{Miscellaneous}

\terms{Design}

\section{Introduction}
For over a decade I have primarily done research in number theory that
often involves computation, mainly using Magma.  In 2004 I realized
that it was stupid for me to continue building all of my work on
Magma because Magma is proprietary, the development model is closed,
Magma is expensive which is bad for students, and the language itself
lacked many features (e.g., user defined classes) that I had requested
repeatedly for over 5 years.  Thus to continue to use {\em only} Magma
unacceptably limited my potential in both research and education.

Having used Magma for many years, I simply could not switch to an
existing open source system.  The only serious free open source
software for number theory is PARI, whose capabilities are far behind
that of Magma in numerous critical areas of interest to me, including
exact linear algebra, commutative algebra, and algebraic curves.  And
no other free system--GAP, Singular, Axiom, Maxima, Macaulay 2,
etc.--even comes close in {\em all} these areas.  In fact, after a
decade of patiently waiting, I doubt they ever will.

Magma is the result of decades of hard work by extremely talented
mathematicians and programmers such as John Cannon, Allan Steel, Claus
Fieker, David Kohel, and many others.  I've worked with them and they
are {\em simply amazing}, as is their software.  The situation for me
to find something similar but open source seemed hopeless.  And all
attempts to convince the Magma group to open source Magma failed. 

In 2004, frustrated that there was no way to solve my problem, and
driven by nothing but a naive compulsion, I started the Sage project
as a free open source alternative to Magma, and spent a large amount
of time working on it even though I was convinced that there was no
hope of Sage ever succeeding.  The first version of Sage consisted of
the Python interpreter and a few scripts for doing number theory, with
a design modeled on Magma.
%At nearly the same time Ken Nakamula started
%the NZMATH, which is another Python number theory library (see {\tt
%  http://tnt.math.metro-u.ac.jp/nzmath/}).  Four years later the
%NZMATH project has gone almost nowhere.  

My first real feedback from the computer algebra community came from
Richard Fateman in December 2005 when he posted his opinion of the
Sage project to {\tt sci.math.symbolic}:
\begin{quote}
  ``By avoiding applications (say, to engineering design, finance,
  education, scientific visualization, etc etc) the activity [Sage] is
  essentially doomed. Why?  Government funding for people or projects
  will be a small percentage of the funding for pure mathematics.
  That's not much. And the future is pretty grim.''
\end{quote}
%Though I believed Fateman was right and that Sage was doomed, but I
%just couldn't stop myself from working on Sage anyways.  
It is now nearly three years later and the Sage project currently has
over 100 contributors and around 10,000 users. In November 2007, Sage
won first place in the scientific category of the Troph\'ees du Libre
\begin{center}
{\tt http://www.tropheesdulibre.org/}
\end{center}
a major international free software competition.  Sage is funded by the US National Science
Foundation, the US Department of Defense, the University of
Washington, Microsoft Research, Google and private donations.  Sage
has new releases every two weeks, and typically 30--40 people
contribute to each release.  All new code contributions to Sage are
peer reviewed, and every new function must be documented with tests
that illustrate its usage.  The documentation has over 50,000 lines of
input examples. \vspace{1ex}

\vfill\eject
\section{What is Sage?}

\begin{enumerate}
\item a {\em huge distribution} of free open source mathematical software
that is surprisingly easy to build from source, 
\item a {\em set of interfaces} to most other mathematical software
  systems, and
\item a {\em new Python library} that fills in the numerous gaps in other open
  source math software included in Sage, unifies everything offering a
  smooth user experience, and provides a modern web-based graphical
  notebook interface with math typesetting and integrated 2D and 3D
  graphics.
\end{enumerate}

\section{What Makes Sage Unique?}
\subsection{Python and Cython}
Sage is the first large general purpose mathematics software
system that uses a mainstream programing language (Python) as the end
user language.  Python---easily one of the world's top 10 programming
languages---is a powerful and beautiful modern interpreted programming
language with an organized and professional developer base and
millions of users.  Sage also makes extensive use of a Python-to-C
compiler called Cython (see {\tt http://www.cython.org}).  
\begin{quote}
  ``It is our belief that this [Cython] is something missing in the
  world, and not for any good technical reasons. That it is eminently
  possible to have a language that gets down to the iron, runs at C
  speeds, and has no surprises in generated assembly, but at the same
  time guides you along to a clear, succinct and correct expression of
  complicated systems and algorithms.'' -- Dan Gindikin
\end{quote}

By building on Python and Cython we see that Sage has a tremendous
longterm advantage over every other general purpose computer algebra
system.  Sage gets excellent support for compiled code, thousands of
third party Python libraries, object serialization, superb database
support, and excellent mature numerical libraries (numpy and scipy).

\vfill\eject
\subsection{Building the Car Instead of Reinventing the Wheel}
Instead of reinventing the wheel, Sage combines many of the best
existing open source systems that have been developed over the last 40
years (about {\em 5 million lines of code}) with about {\em 250,000
  lines of new code}.  Every single copy of Sage includes all of the
following software (and much much more):
\begin{itemize}\setlength{\itemsep}{-0.7ex}
\item Algebra and calculus: Maxima, SymPy
\item High precision arithmetic: GMP, MPFR, MPFI, quaddouble, Givaro
\item Commutative algebra: Singular
\item Number theory: PARI, NTL, mwrank, ECM, FLINTQS, GMP-ECM
\item Exact linear algebra: LinBox, IML
\item Group theory:  GAP
\item Scientific computation: GSL, SciPy, NumPy, cvxopt
\item Statistical computation: R
\item Graphics (2d and 3d): Matplotlib, Tachyon3d, Jmol
\end{itemize}

Sage is thus the first system to combine together such a wide range of
libraries and programs in a meaningful way.  This huge range of
programs is tied together using Python's excellent extensibility via C
libraries and also in some cases using pseudo-tty's.  Sage has a
highly developed unified collection of pseudo-tty based interfaces
that make it is possible to make extensive use of Maple, Mathematica,
Magma, Matlab, GAP, Maxima, Singular, PARI, and many other systems
from anywhere within a single Sage program.

\vspace{0.5in}
Curious? If you also {\em want} a viable open source alternative to Magma,
Maple, Mathematica or Matlab, drop everything, try out Sage now and
become a Sage developer.
\begin{center}
{\tt http://www.sagemath.org}
\end{center}


\end{document}

