Dear all,
I proposed the modularization project three years ago, in May 2020, in the 
post https://groups.google.com/g/sage-devel/c/M9QTWtln6zU/m/UHwkrmTKBQAJ
The most recent substantial discussions on sage-devel on this topic took 
place in Oct/Nov 2021; and I gave a presentation on it in June 2022 at the 
virtual Sage Days. (See https://github.com/sagemath/sage/issues/29705 for 
links to all of these and the hundreds of tickets that went into the 
project; many thanks to all individuals who collaborated on and/or reviewed 
these tickets over the years.)

So it is timely to give you an update on the modularization project. I'll 
start here with a short post that explains the motivation and the goals.

*A. The project is about the modularization of the Sage library* (contents 
of SAGE_ROOT/src/sage 
<https://github.com/sagemath/sage/tree/develop/src/sage>); it is unrelated 
to work on the Sage distribution (the externally maintained packages 
tracked in SAGE_ROOT/build/pkgs 
<https://github.com/sagemath/sage/tree/develop/build/pkgs>).

*B. The Python and Cython modules of the Sage library have an extensive web 
of interdependencies* ("everything depends on everything"). As the developer's 
guide section on modularization 
<https://doc.sagemath.org/html/en/developer/packaging_sage_library.html#dependencies-and-distribution-packages>
  
explains, these dependencies range from build-time to module-level to 
method-level to "doctest-only" dependencies.

*C. The Python and Cython modules of the Sage library also have numerous 
dependencies on externally maintained non-Python packages:* To just build 
the (Cython modules of) the Sage library, installations of at least the 
following are required: arb boost brial ecl eclib ecm fflas_ffpack flint 
libgd gap giac givaro glpk gmp gsl iml lcalc libbraiding libhomfly libpng 
linbox m4ri m4rie mpc mpfi mpfr ntl pari rw singular symmetrica, as well as 
a number of Python packages. Then, to be able to start Sage, more Python 
packages need to be installed.

*D. *As a consequence of B and C, it was *impossible to build or run parts 
of the Sage library.* And it is *impossible to install the whole Sage 
library using Python infrastructure* (pip). (Yes, I know that conda exists.)

*E. This is the key mechanism that isolates the Sage developer community 
from the (vastly larger) Python community.* As is, no portion of Sage is 
viable to be used as the dependency of any Python packages. Potential 
developers of features face the difficult decision: "Are the facilities 
that a portion of Sage offers really important enough for my project --- 
that it makes sense to accept being isolated from the rest of the Python 
world?" Outside of a narrow context of research mathematics, the decision 
will often be "no".

*This is a severe bug in the setup of the Sage community.* The 
modularization project fixes this bug by creating viable distributions of 
portions of the Sage library. Viable means: Separately buildable with 
minimal dependencies, separately runnable, separately testable -- and thus 
making it possible to attract many more developers. And it can be done 
without sacrificing the rich integration with the rest of the Sage library.

More later.

Matthias

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/3550bf63-d654-455e-bbcd-372624209b88n%40googlegroups.com.

Reply via email to