My Journey to Google Summer of Code

My Journey to Google Summer of Code

This is not a guide on how to get selected for Google Summer of Code. There are plenty of those on the Internet. This is just how I did it, why I did it, and the analysis that went into making my proposal. GSoC is actually an umbrella in itself, a lot of the application process depends on the organisation you're going for. So any advice is bound to be at least partially inaccurate. Keeping that in mind, lets get started.

The Background

I had a very atypical background for a Computer Science student. After I finished 12th grade with Biology as a subject (I dropped computer science after 10th!), I ended up joining the Aero Design team of my college. I spent almost two whole years learning about airplanes, doing marketing, working on some electronics, taking part in debates and writing competitions, basically everything apart from actually doing any programming.

Team Arcis at SAE AeroDesign West, Van Nuys, CA, USA. I am the person holding the Indian flag.

The turning point came when I decided to do a Hackathon out of the blue in 3rd semester. Then one thing led to another, finally culminating in winning the Hardware finale of the Smart India Hackathon 2019. After that I ended up working with Element14 electronics over the summer, teaching kids how to program micro-controllers.

My team on the stage when we won the finals of SIH Hardware 2019.

The Lead Up To The Attempt

I had heard of Google Summer of Code vaguely when I was in school. I'd heard about it in college as well, but it was in the same class of things as ACM ICPC - A mythical dream that could only be achieved by students in tier 1 colleges and it wasn't meant for mortals like us. After winning SIH, where there were students from top colleges present, I gathered some courage and started taking the idea of applying to GSoC seriously. The more research I did, the more it seemed that all that was required was good technical knowledge, a good proposal and some luck!

Around November of 2019, I started getting serious about GSoC. Although I had a decent resume, most of my projects were short term hacks. I had no idea on how to chalk out a plan for a long term project, or contribute to an existing code base. My Github profile was empty because I hadn't bothered to update it with my Hackathon projects.

Initially, I picked up Beaglebone organisation. The list of GSoC organisations wasn't out yet, so based on previous years submissions, I thought of going with Beaglebone. I had experience working with Single Board Computers (like Raspberry Pi). So I thought my experience would help. I brought myself a copy of "Bad to the Bone" book about the Beaglebone's architecture and finer details regarding its programming, and then it slowly dawned upon me what complexity I was walking into. I realized that there was a very big difference between knowing how to use something, and developing something. My determination wavered, I was preparing in bits and pieces till the organisation announcement date arrived.

The Attempt

On 21 February 2020, the organisation list was announced and there was a new organisation - Arduino. This changed things significantly - I had a whole lot of experience working with Arduino. I knew it inside out. I knew that since this was the first time Arduino would be applying, they'd be less rigid about their prerequisites for applicants (some organisations require you to push commits for months before the application deadline starts). I read the entire Arduino reference manual - all 700 pages of it. I went through their Github repo, and unsuccessfully tried to find bugs to fix, it wasn't easy. I continued to update my Github, taking special care to make the readme section a proper description of the project, I also went through the Developers mailing list.

By this time the lockdown had arrived and it was mid march. I had less than 2 weeks to go, and I hadn't even begun working on deciding a topic for the proposal yet. I decided to logically analyse what Arduino was looking for, and how I could center my proposal around that - most open source organisations for GSoC want an end project that is useful to the organisations goals and does something useful. Arduino's ideas list had the following:

  • Writing library examples for the Arduino.
  • Write an analyzer for Arduino libraries.
  • Port FreeRTOS to Portenta (An upcoming Arduino board).
  • write MicroPython examples and tools for Portenta.

I straight away dismissed the first idea - Arduino on AVR was already a mature platform with a ton of community support. Besides, there was no meaningful way I could make my proposal stand out from the rest. I also felt that writing examples for already existing libraries was too small of a scope for a GSoC project.

Choosing the second idea would have meant that I would have to know Arduino libraries very intimately to be able to visualise what an ideal library looked like. It would also involve analysing C++ syntax, which is difficult on its own.

Idea number 3 had me interested initially. It was a difficult project, the Portenta board was not yet released and porting FreeRTOS would be pretty useful for the board. However upon a deeper look I realised that while I could prove my competency with Arduino easily, it would be difficult to convince the mentors that I could deal with low level Operating system design. Its not exactly an easy topic, and since the Portenta schematics weren't final yet, it would be difficult to prove that I could do it. So I dropped that too.

Idea number 4 is eventually what I wound up doing. Having worked with the ESP32 and MicroPython, I knew exactly what I was dealing with. It was a problem about languages, not hardware. I had a couple of Github projects to show my proficiency with python, and lots of instances to show that I could work with Arduino. Then I realized that the Arduino ecosystem had over 2700+ libraries. It would be an exercise in futility to choose 5-10 libraries and develop for them, since it would still be a fraction of what was needed to actually get the job done.

I had the fortune of taking a class on Compiler design in the 6th semester of college. I vaguely knew that 'transpilers' - compilers that could convert one language code to another language already existed. If I could write a tool that could translate 80% or even 60% of the code effectively, I could massively speed up the porting of libraries. And so, about 12 days from the date of final submission, I got cracking.

The Final Dash

Initially I thought I could churn out a proposal for Arduino within a week and then maybe submit another proposal or submit one to Beaglebone too. Very soon, I realized that writing an effective proposal was going to take a lot of time. Heck, I wasn't even sure if I could finish it in time. When I began I had chosen Arduino thinking it was something I was familiar with, but in the end I ended up with what was a Compiler Design project which was related to micro-controllers only tangentially. So with a lot of sadness, I decided to drop the idea for multiple proposals and put all my eggs in one basket - I was going to write only one proposal. It had to be damn good.

I read multiple textbooks that week. The famous 'Dragon Book' of compilers, Des Watson, An O'Reilly book on Lex and Yacc and the entire GNU Bison manual. I didn't begin writing anything till the last 3-4 days or so. I didn't consciously put a page limit on my proposal - I just knew it had to be detailed. I wrote a whole lot about the parts I knew about, and had to be more vague about the sections I wasn't sure about yet - the mentors weren't responding to anyone's messages and it was too late anyway. I ended up writing a 21 page proposal which can be found here: https://github.com/AshutoshPandey123456/GSocArduino2020/blob/master/proposal.md

About half an hour before the submission deadline, I hit upload.

Realising the Odds

After I had submitted the proposal, I went through Google's blog for mentoring organisations. It was then I realised that since Arduino was a first time organisation, It would get only 1 or 2 slots. Since there were over 170 applicants, I had no real hope to get selected. The only thing that I thought gave me a shot was my proposal - others had more experience than me, more open source contributions, more commits etc.

D- Day

My friends at PointBlank decided to Zoom call me. I was afraid of getting a rejection mail right in front of them, but then, at 11:24 PM the fated email arrived.

And the rest, they say, is History.