The Google Summer of Code, often abbreviated as GSoC is an annual program by Google to promote the open source culture among the students all over the world. They do it by conducting a 3-month long coding program and giving stipends to the interns of the accepted open source organizations.

Open-source software. What and why?

A software whose source code is made available to anyone is called an open source software (OSS). The members of open source communities believe in contribution and collaboration.

Open-source software development, or collaborative development from multiple independent sources, generates an increasingly more diverse scope of design perspective than any one company is capable of developing and sustaining long term.

- Wikipedia

There are many platforms to host OSS. The very popular ones are GitHub, GitLab, Bitbucket, SourceForge, and Launchpad. The software can be easily downloaded from these sites.

How GSoC works?

The program timeline has been briefly summarized below. A more detailed timeline can be checked out from here.

Open-source organizations apply to Google.

The list of accepted mentoring organizations is released.

Students apply to the organization(s).

List of accepted students is announced.

Students start coding and get evaluated on regular basis.

List of students who have passed all the evaluations is announced.

How does one get selected?

In a single word, Contribute. The whole motive of the program is to get potential students involved in open source software development. As mentioned above, open source software development happens through contribution and collaboration.

Contribution graph by Github

But what counts as a contribution?

Contribution can be anything ranging from fixing a small typo to developing the entire application. The most popular classification is as follows.

Coding: Fixing bugs and developing new features. These could be as easy as adding a missing semicolon or catching an exception by adding a couple of lines of code.

Fixing bugs and developing new features. These could be as easy as adding a missing semicolon or catching an exception by adding a couple of lines of code. Documentation: All the effort put into coding goes into vain if one doesn’t know using your software. Therefore, improving docs could be a very good contribution. This could be writing anything about the software’s features or helping other developers understand the code.

All the effort put into coding goes into vain if one doesn’t know using your software. Therefore, improving docs could be a very good contribution. This could be writing anything about the software’s features or helping other developers understand the code. Outreach/Research: Researching about the use cases, suggesting features, reporting bugs is vital for the improvement of a software. These count as good contributions too.

Researching about the use cases, suggesting features, reporting bugs is vital for the improvement of a software. These count as good contributions too. Quality Assurance: Keeping the code clean prevents a lot of conflicts that might arise in the future. Refactoring the code base, developing an automated test suite, and following style principles help in maintaining the quality of the code.

Any prerequisites?

There are only some basic skills that one needs, to start contributing towards open source.

Basic Understanding of a Programming Language

Source: PCQuest

When I say ‘basic understanding’, it is the ability to comprehend and write code that I’m referring to. You need not have built really big applications using them. This could be a programming language you’ve been learning or something you want to explore more. In my case, it was Python.

Version Control System

cdn-images on version control systems

All the open source software use a Version control system for tracking changes. A VCS is basically a snapshot taking system which is also a way back machine, i.e., you can go back to any of the previous states.

Git is the most popular version control system being used these days. One easy tutorial to get started with Git can be checked out here.

Linux

Consider shifting to a Linux based OS as most of the open source communities use FOSS software. All the OSS are developed mostly for Linux based systems. I personally like the coding experience in Linux. The Terminal could be the coolest thing you’ll ever use as a developer.

Fedora with ZSH and Tmux

How does one do it?

Beginnings are always tough. It is advised to start as early as possible. I believe that it is some threshold one has to cross, beyond which everything can go really smooth. If you are a beginner and wondering how to start off, I’d suggest following these steps.

Organization(s) selection

This is probably the most important and the toughest task because it involves some elimination and choice making. Now, there are a couple of ways one could go on doing it.

An organization based on the technologies you are good at or willing to be.

An organization which is working in your field of interest.

It is really great if you find organizations satisfying both the conditions.

The common confusion is if it is a good bet to learn a programming language and then contribute, or to work on a technology which one is already experienced at. And if you are planning to start early (which you are supposed to do) a good bet would be to choose an organization which has appeared more than twice in the previous years. (Just so that your early contributions don’t go in vain.) You can use tools like this to automatically scrape all the organizations of a particular technology.

Apart from the technologies and projects, one another important thing is selecting an organization which is actively working on its products and is responsive to newcomers.

Get familiar with the code base

You’ll need to get an idea of the code base before starting to contribute. The best way to do is to clone the repository of your preferred project, play with the code and see the changes happening. This would help you get familiar with the existing code base.

Create patches and get them merged

Patches are the way you get your code merged in the software. Understanding the git work-flow might be helpful. Bit-sized/ easy labeled issues can be solved to get started with. Prefer quality of the patches over quantity, i.e., making a few good patches could make a better application.

PS: Add good commit messages unlike above

Make a good proposal

A good proposal plays a very vital role in the selection process. It more or less portraits how clear one is about their project. Discuss with your mentor and write up your approach to implementing the project goals to the point and clear. Mentioning about all your past contributions to the organization is a bonus. Completing the proposal a week before or so is beneficial, as the mentors/ other community members can review it and suggest changes.

My GSoC story

I was a newbie to open source back then and all I knew were the basics of web development and programming. I wanted to try my hands on open source and felt like GSoC was a great program to start off. I was inclined towards choosing organizations that work with Python/ Django and therefore checked out Zulip initially. The mentors there were pretty responsive. But I wasn’t able to stick with that for long probably because I wasn’t motivated enough to contribute to the project. Though I managed to get a couple of PRs merged, I gave up thinking that it was not my cup of tea.

After many motivating and brainstorming sessions, I decided to try again. But it was already March by then and therefore I thought trying out on a first time accepted organization was my best bet. I was going through the organizations list and I found OpenWISP, a wireless networking based organization which works with Python and Django. Best of both worlds as I was really keen on learning networking too. The projects seemed a little tough initially because I didn’t know much about wireless networking back then. But the mentors there were really responsive and welcomed newbies. I made some easy patches initially and then took up some tough issues which sometimes took more than a couple of weeks to solve. Fortunately, I had the folks at IMG, the community members to help me out. I invested some good time in understanding the project and drafting out a proposal which was then reviewed by the previous GSoC students and the mentor as well.

I continued to contribute to the community even after the application deadline. That was it!

The acceptance mail that made my day!

Points worth noting down

Be patient

The mentors and community members contribute to open source generally don’t work full time on it. They work for free and in their free time. So, sometimes it might take more than a day to get replied back or reviewed. Try to research properly and make a perfect pull request. There is a different happiness in getting a PR merged without getting comments. ;)

Ask good questions

Make sure you research about something properly before asking about it. Otherwise, don’t mind witnessing the popularly used terms, RTFM or STFW on your chat screens.

Don’t give up

There might be many ups and downs that come along the way like the mentor not replying back for days, or not understanding what to do. Effective Communication is the key. Let people clearly know the problem you are facing.

Get along well with the community

The organizations that apply to GSoC aim a lot more than getting a summer project done. Getting involved with the community by staying active in the mailing lists/chat-rooms, helping other students, reducing the mentor’s work by reviewing the PRs, etc. could increase the chances of getting selected.

Perks of contributing to open source

You get a chance to contribute towards something which affects a large number of people directly and therefore, learn a lot. This indeed builds up your confidence drastically. Moreover, you meet people from all over the world in the chat-rooms and mailing lists and get a lot of exposure.

GSoC also provides decent stipends and goodies, which could be motivating. ;-)

GSoC ’17 goodies

I wish luck to everyone who is aiming for GSoC and the other SoCs. Check out another blog published by me summarizing the work done during GSoC from here.

Edit (9/12/18): It adds a pretty decent weight to the resume which can be helpful in university recruitment and many other career opportunities.