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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/3550bf63-d654-455e-bbcd-372624209b88n%40googlegroups.com.
