SageMath Google Summer of Code (GSoC) Contributor Application Guide
Hello and welcome to SageMath's (or Sage for short) GSoC guide for contributors!
We are glad that you are interested in participating in GSoC with SageMath, and we look forward to working with you. On this page, you will find numerous application details and links to resources that can help you quickly set up SageMath and get started.
You can also explore the GSoC 2024 Ideas Page for information on potential projects.
Contents
What is GSoC?
Google Summer of Code is a global, online program focused on bringing new contributors into open source software development. GSoC Contributors work with an open source organization on a programming project under the guidance of mentors.
If you are interested in applying to be a GSoC Contributor, please review the following information:
GSoC Timeline In particular, the deadline for GSOC 2024 applications is 18:00 UTC April 2nd, 2024.
Stipends paid by Google (depends on the country you reside in)
You can find complete information on the main Google Summer of Code website.
To submit a proposal to be a GSoC Contributor to SageMath, you can find the application proposal at the bottom of this page. The proposal must be submitted through the official Google Summer of Code website.
What is SageMath?
SageMath is a GPL open-source mathematical software system. It is designed to be not just a computer algebra system, but more like a complete environment for doing mathematics and related calculations. It is based on a vast collection of existing open-source software tools and libraries and ties them together via Python and Cython.
Python is also the primary interface language for the user. Behind the scenes, the SageMath library executes the commands and calculations by its own algorithms or by accessing appropriate routines from the included software packages. On top of that, there are various ways for users to interact with SageMath, most notably via Jupyter notebooks.
SageMath works hand-in-hand with other computational mathematics software systems such as GAP, Singular, and many more. A portion of a GSoC project in the SageMath organization can also be dedicated to making contributions to these systems. Some of these software packages that are called from SageMath are also GSoC 2024 mentor organizations. You can find these in the GSoC 2024 organizations list. Some relevant projects are CGAL Project, GeomScale, GNU Octave, NumFOCUS, SymPy, which a potential SageMath GSoC project would be writing an interface.
Contacting Us
SageMath maintains three primary mailing lists, namely:
sage-gsoc - discussions specific to the GSoC program
sage-devel - primary discussion group for development pertaining to all of Sage
sage-support - help in running/using Sage
For further support in using SageMath, there is also a Question-Answer forum at ask.sagemath.org.
Interacting with the SageMath Community
SageMath depends on a diverse community of volunteers to contribute and help move it forward. The mentors are here to help you and the rest of the community is eager to provide support as well. Please respect the time and efforts of the community and be courteous at all times. Here are some tips to keep in mind.
Don't Send Generic Introductory Emails - Posts/emails such as "I am interested in open source. How can I get started with SageMath?", "How can I proceed?", "Can someone review my proposal?" etc. will likely get a generic response containing a link to the SageMath developer's guide. Instead, ask specific questions regarding your proposal.
Be Specific and Precise - Spend a little time in crafting good emails with informative titles. Provide context to the problem you are facing and include relevant details such as describing what you have done so far, the error message, development environment, etc. Make it easy for the reader to understand what you are asking for.
Do Your Homework - Please check the information pages and past discussions on forums to ensure that you are not reposting or crossposting the same question. Attempt to first resolve the problem yourself before asking and demonstrate willingness and capability to help yourself. This will help in creating a positive impression. (How To Ask Questions The Smart Way? is a wonderful read on how to ask questions in a way more likely to get you a satisfactory answer.)
Don't Ask to Ask - Don't hesitate to ask questions but when you do, don't ask questions of the type "Can anyone help me?". Simply go ahead and state the issue you are facing.
You may also want to peruse the The DOs and DON’Ts of Google Summer of Code published on GSoC's official blog.
Getting Started
Its always a good idea to get started early, and you are strongly recommended to have built SageMath from source on your computer to do the development required to be successful in your GSoC project. By becoming actively involved, you can significantly improve your GSoC proposal and can stand out from other applicants. The following is a very short guide for how to get started with contributing. For more details, see the SageMath developer's guide.
Fork the GitHub repository sagemath/sage and clone it to your computer.
Install SageMath on your local system - Ensure that you have the prerequisites installed on your system and then start the installation procedure on the developer version. (Note, running make the first time may take a few hours depending on the system. You may want to take advantage of the multiprocessor build features.)
Read SageMath's Conventions and Browse Tutorials - Sage follows various conventions and guidelines for writing code, building documentation and running automated tests. Please make sure to follow them. Further, there are numerous tutorials available for a guided view of various Sage modules.
Read the SageMath Guide - Developer Documentation is the single best resource for everything related to SageMath development and as such should be considered as required reading.
First Contributions
There are two primary ways to contribute and acquaint yourself with the various aspects of SageMath development:
Writing an Issue or Pull Request - Developers, to put it simply, report on a bug or feature or enhancement that they wish to help with by opening an Issue on GitHub. Then they discuss potential solution ideas through comments and based on that write code and submit it as a Pull Request (PR) on GitHub. You can find more detailed instructions on our Development Walk-Through page.
Reviewing a Pull Request - Once a developer submits code in the form of a Pull Request to resolve an Issue, it is reviewed independently by other developer(s) who may comment changes as deemed necessary. All recommendations must be incorporated before the new code can be merged into SageMath. This is a very important component of SageMath development that helps ensure quality control as well as constructive feedback. If you are reviewing a PR, please complete the Reviewer's Checklist and ask for assistance if you are not sure how to evaluate items from the list. PRs needing review are a good place to start.
Potential SageMath GSoC Contributors are encouraged to submit a PR to demonstrate knowledge of our development process. Help you decide what a good PR would be, you should first figure out which module(s) of SageMath you are interesting in contributing to (possibly through the list of available project ideas) and/or find a suitable open easy Issue to resolve. If you don't find something specific, you can always ask on the sage-gsoc mailing list.
GSoC Application Proposal
The Project Proposal is the most vital component of your application process and the primary resource available to the organization to judge your suitability for the program. Please spend time on crafting a detailed and well-thought proposal. It is a great idea to share your proposal with the respective mentors of the project you are applying to and obtain their feedback before the application deadline as communication with potential mentors is crucial for your project proposal. Determining the scope and planning a schedule in particular, can be tricky tasks. The more you think about these and the more you discuss with the mentors, the easier it will be later on when the coding period begins. Please use the following application template and make sure to be as precise and detailed as possible.
Personal:
- Name
- Contact Information (email, instant messaging, …)
- Location/Timezone
- University/Employment (if applicable)
Background:
- What are your technical skills, education, experience, etc. Especially make sure to explain with what level of mathematics you are comfortable with and on what level you would like to program.
- Who are you? What makes you the best person to work on this particular project? Your personal motivation?
What platform and operating-system are you using on your computer? (SageMath development is done best on Linux, !MacOS, or Windows through WSL)
- Are you or have you been engaged in other open-source projects?
- Do you code on your own pet projects?
Are you a SageMath user, how long have you known about/used SageMath?
Project:
- Title
- Length: short (90 hours), medium (175 hours), long (350 hours)
- Project Synopsis: A short description and summary of its aim and scope.
- What is your personal involvement or relationship with your proposed project?
- Details: Describe all the details and explain modules or parts of your whole project. Break down the whole project into individual tasks - as good as possible - and describe deliverable and quantifiable results for each of them. It also helps if you have already discussed this with a possible mentor.
- Schedule: A timetable, including special circumstances like exams or holidays, for the individual tasks.
- Risk Management: Try to anticipate potential problems and explain, how to mitigate them. Propose alternative scenarios, if a particular milestone isn't reached, to still successfully complete the project.
Note: All final applications must be submitted on the official GSoC website.