Hi, I’m Apurv. I was a GSoC 2018 student and a GSoC 2019 mentor for the Oppia Foundation. I’ll try to guide you on how to prepare for GSoC through this post. Let’s get started!
What is GSoC?
Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open-source organisation on a 3-month programming project during the summers.
This is what the timeline looked like for GSoC 2020. The initial and final dates might be different in different years, but it's usually always something like this.
Who is involved?
Students (possibly, you!) contact the organisations they want to work with and write up a project proposal for the summers. If accepted, students spend a month learning more about the organisations and their community prior to the start of coding (the “Community Bonding” period). They, then have three months to code, meeting the deadlines agreed upon with their mentors.
Organisations are basically teams managing open-source projects. Accepted organisations put forward possible ideas they want their students to work on and then decide on which students they want to select for working on those ideas as GSoC interns. They provide mentors to help guide each student through the program.
Each student is paired with a mentor(s). Mentors and students work together to determine appropriate milestones and requirements for the summers. Mentors guide the student throughout the program. They're usually friendly people.
None. You don't even need to be a CS student :).
How to prepare for GSoC?
Getting selected for GSoC as a student requires work. There's no single exam that you can take to become a GSoC intern. Based on my experience, I've put together a 10-step guide that'll help you increase your chances of getting selected.
1. Switch to Linux
Let’s face it — Windows, at present, is not suitable for development. A number of development frameworks and tools do not run well on Windows. Most of the organisations prefer Linux/Mac OS as the development environment and may not support Windows for development.
Don't know what 'development environment' means? Just trust me and install Linux.
I suggest installing some popular Linux distribution (Like Ubuntu or Fedora) in dual boot with Windows (if you require Windows for other tasks) on your system. Mac OS works too.
2. Learn Git
Git is a version control system for tracking changes in source code during software development. All of the organisations use some hosting service like GitHub or GitLab to host their source code on the internet. In order to contribute to an organisation’s source code, you should be familiar with the basics of Git and GitHub/GitLab.
Here is a Git and GitHub crash course for beginners which covers the basic commands and functionalities:
Don't worry if it confuses you. It's like math - the more you use it, the better you get at it. If nothing else, at least get familiar with the following Git commands -
commit. That much will get you started.
3. Choose an organisation
This is harder than it sounds. There's just so many organisations and they have such vast codebases, it gets really intimidating for a beginner. Some ground rules can help in this regard:
- Do not wait for the list of selected organisations to be announced. Look through the GSoC Archive and shortlist at least 5 organisations which had been selected in the last couple of years and which align with your interests.
- Glance over their codebase and documentation. Try to understand the purpose of the organisation and community. Make a note of the languages and frameworks used by them. Do not be intimidated by the codebase. Remember, you almost never need to understand the complete codebase.
- From the noted languages and frameworks, try to get a hands-on experience of some of them. Go through tutorials or create a couple of projects just to get a hang of them. You do not need to master them — You can learn as you go!
- Now, select at most 3 organisations from the above 5 shortlisted organisations based on your newly-gained knowledge of languages and frameworks and your general understanding of the codebase. Break the codebase into modules and try to understand a few modules (remember, you need to have knowledge about the framework that the organisation is using to be able to do this).
4. Make your first contribution
Go ahead and introduce yourself on the communication channel used by the organisation (Gitter, Slack, IRC or others). Ask people there to guide you on what project/issue to work on. The people there are friendly and will guide you.
Fork the project repository that you want to work on and clone your fork to your computer. This is the repo you will work on. Setup the development environment as required by the organisation (organisations usually have step-by-step guides on how to set it up). Look for “starter”, “beginner” or “first-time” issues on the issue tracker of the organisation. Most of the organisations want you to assign an issue to yourself before you can start working on it. In any case, leaving a comment on the issue you want to work on, always helps. Do not start working on an issue without informing anyone that you're working on it.
Once you have an issue to work on, try to run the project on your own computer. Try to know what the issue actually is by playing around with the project. When you understand what you really have to do, start writing code. Make sure you follow the coding conventions and guidelines laid down by the organisation - most organisations are very strict about following those, and will reject your code for something as minor as naming a variable like_this instead of likeThis.
It’s time for your first pull request. Once you're done with writing the code, simply push the code to your fork of the repository and create a pull request. There's a good chance your PR will not be merged in the first attempt. The project maintainers will ask you to make certain changes to the code that you submitted. Don't get disheartened - it happens to everyone. Just keep making the requested changes and they will eventually merge your PR.
Don't know what forks and clones mean? Stuff sounds confusing? Here’s a tutorial on how to contribute to an open-source project on GitHub:
5. Make your presence felt
Communication plays a vital role in your selection as a GSoC student. Interact with the community and help out fellow developers. Be passionate about the mission of the organisation. Participate in release testing and give your feedback on upcoming features. Treat everyone with respect. Do not get into fights.
Performing these actions not only increases your chances of being selected but also portrays you in a positive light in the open-source world. It sounds like it's trivial but this is in-fact one of the most important aspects of getting selected. Talk to people!
6. Learn more about the project ideas
Once the selected organisations are announced, go through the project ideas put forward by your chosen organisations.
Research about them in some detail. Compare the project ideas on the basis of their scope, your knowledge of the codebase and your familiarity with the frameworks/tools required to implement the idea. Project ideas are usually open-ended and you’ll need to devise a plan in order to implement them (which goes into your proposal). Pick the one with which you feel the most comfortable.
7. Pick up issues that align with your project idea
Once you’ve chosen a project idea to work on for GSoC, it’s time to get a feel of the project. Try to solve issues which align with your project idea.
For example, if your chosen project idea deals with automating the workflow, try to automate an existing manual check (or some part of the workflow). Create an issue for it (if it does not exists) and raise a pull request to fix it.
Solving such issues help you to get a better understanding of the project idea and will serve as the base of your proposal.
8. Prepare your proposal
A proposal is a document which you submit to the organisation(s) you’ve selected. It outlines a detailed breakdown of how you plan to implement the chosen project idea. Different organisations have different proposal templates.
In general, a proposal should highlight the following:
- Name of the project.
- Why are you interested in working with the chosen organisation?
- What interests you about this project?
- Prior experience (especially with regards to technical skills that are needed for the project).
- Links to 1–5 PRs you’ve made that showcase your best work.
- Project plan and implementation strategy. (This is the most important section of the proposal.)
- Which timezone(s) will you primarily be in during the summer?
- How much time will you be able to commit to this project?
- What jobs, summer classes, and other obligations might you need to work around?
- What is your contact information, and preferred method of communication?
- How often, and through which channel(s), do you plan on communicating with your mentor?
Please note that this is a general proposal template. Use the one followed by your chosen organisation.
Here are some guides on how to write a proposal:
- Writing a Proposal — Official GSoC guide for writing GSoC proposals
- Writing Kickass GSoC proposal — An amazing guide on how to write GSoC proposals by KDE team.
It is recommended to submit your draft proposal early during the application period so that the organisation mentors can review it and ask you questions or request more detail on aspects of your proposal before the final deadline.
Remember, thousands of students are submitting proposals so it can take organisations a few days or even a week to get back to you if they have questions. So, the earlier you submit a well-written draft proposal, the more time they have to give you feedback on it so you can make it stronger and understand more of what they are looking for.
9. Continue contributing
Once you’ve submitted the final proposal on the GSoC website, you’ll have a month before the results are announced. Remain active and make the most of this time. Continue to contribute to the organisation or project in any way possible and have fun too!
10. Get selected!
Congratulations! Make the most of these 3 months. Code well, abide by the deadlines and most importantly, have fun!
Think you don't have enough skill to do it?
When I started working to be selected in GSoC, all I knew was very elementary Python (you can learn that much Python in one day). Trust me, skill doesn't really make a difference. The only thing that matters is perseverance. If you keep trying and trying irrespective of how strange and scary the codebases look, you will make it. You need to be patient. It sounds pretty cliche, but it's true - don't give up, and you will get selected.
Didn’t make it? No worries!
If you worked hard and failed, you get to keep all the open-source contributions and exposure to the community which might prove fruitful in the future. Other than that, when you apply for off-campus internships, your open-source contributions add great value to your resume and companies do consider it. So all the work you did can still get you an internship if not GSoC. Furthermore, your skill level would increase a lot (compared to the beginning) since you'd have worked on so much code.