A couple of weeks ago, I submitted my first patch to the Chromium project. I was always curious to know what their patch submission process looks like to a newcomer, mainly in order to see if we can apply some of their ideas to Mozilla. Here's the story of what happened.
It all started when I tried to fix bug 98160 (which also happens to be the first five digit bug that I've fixed, with the second one on the horizon now – stay tuned!). When fixing that bug, I got curious to see how Chromium is handling that issue, so I decided to go and read their code. This turned out to be a good decision, because I found out that they had gone through some iterations in order to finally simulate what Windows does natively, so I decided that I should borrow some of their code and ideas.
While reviewing my patch, roc spotted a spelling mistake in a comment in the code that I had borrowed verbatim from Chromium. So I decided that it would be a good opportunity for me to submit a patch to the Chromium project to fix this spelling mistake.
I went to chroimum.org, and quickly found this link. [1] Then, I modified my local Chromium git clone, and decided that I should ignore everything under the “Get your code ready” section, because, well, I was submitting a spelling fix to a comment! How hard could that be? It turns out that I had made two mistakes.
Then, I filed a bug in Chromium about the problem (I wasn't really sure if that was needed or not, but what I saw later on when using git-cl lead me to believe that was indeed required.) I then used git-cl to upload my local git branch as a patch for code review.
This was perhaps the best part of the entire process. [2] I just typed git-cl upload spelling-fix (spelling-fix being my local git branch name) and a console based wizard started. The first thing that it prompted me for was that I need to add myself to the AUTHORS file because this was my first patch. “What?!", you may ask? Compulsory credits?! Well, turns out that was my first mistake not reading the “Get your code ready” section. I asked on their IRC channel, and shortly after someone replied: “yes, you need to do that”. “But this is only a spelling fix to a comment, surely I don't deserve to be credited for that?,” I asked. “No, you should add yourself to the AUTHORS file,” they replied. I gave up, added myself to the AUTHORS file, committed and re-ran git-cl again. This time, git-cl uploaded my patch, causing this code review request to be submitted. But this time I noticed that git-cl asked me to enter a bug number associated with my patch, which makes me think that filing a bug was indeed necessary.
I waited for a short while, and the same person (sorry, I forget their handle to credit them with helping me) pinged me on IRC saying that something is wrong with my patch. This kind of scared me, but after a short while, he said that somebody has landed a patch which caused mine to not apply cleanly any more. After a while, we figured out that it's a conflicting change to the AUTHORS file(!!!), so I waited for their git mirror to catch up with the change, pulled and rebased my branch, and then uploaded my patch using git-cl again. After a short while, I got an email from the Chromium issue management system containing a review message saying “lgtm” (looks good to me).
Some time later in the process (I forget when exactly), the same person pinged me on IRC telling me that I need to sign their Individual Contributor License Agreement. At Mozilla, we don't require that upon submitting a first patch, but as I understand it (IANAL), Google requires individual contributors to grant copyright over their work to Google. This made me feel a bit weird, but I didn't care too much over that simple fix, so I went ahead and submitted the form online. If I ever decide to contribute anything more significant to the Chromium project, I may revisit this decision. I am still the copyright holder of all of the code I have submitted to the Mozilla project as a volunteer, and I think that is a right that organizations behind free software projects should not take away.
Then my patch was automatically submitted to Chromium's try server. I noticed that when I got an email like this:
I waited a bit more, and I got 3 more emails like that, and one indicating a failure:
There was also an orange run further down the email that did not fit into this screenshot. This suggested to me that Chromium is also suffering from tests failing intermittently. In fact, after searching a bit I found out that they have a dashboard for their flaky tests (which could be the subject of another post!). As indicated in the email, I replied to it explaining that my patch was a spelling fix in a comment, and there is no way for it to have caused a test failure. A while after that I got a reply to that email from a human agreeing with my assessment of the situation. Then, I got an email from a bot saying that my code was landed in their repository!
My impression with the entire process was positive. Chromium definitely has a streamlined process for patch submission for new contributors. It took a bit more than 3 hours since I filed the bug for my patch to be committed to their repository, which is impressive (that might have something to do with my patch being trivial, and me hanging out on their IRC channel, but still!). I liked their git-cl tool very much, and I would definitely like for Mozilla to also have a command line tool which would file a bug on behalf of someone and attach a patch to it. The only weird thing that I felt was that the process was too bot-centeric. If I were not talking to people on their IRC channel, the only human interaction that I would have with the Chromium folks would be the review and the person replying to my email about the try server failure. This might be a good or a bad thing, depending on what type of person you are, but I definitely enjoy getting a sense of more humans would be involved when I submit a patch to an open-source project!
My next large open source project to target is WebKit. I'll post about my exprience when I actually have time to write the WebKit patch that I have in mind. :-)
Footnotes
- [1] We don't do as good of a job as Chromium does here. If you go to mozilla.org, you should click on the Getting Involved link, then wonder for a bit to see what you should do after that. Hopefully you'll figure out to click the Areas of Interest link which is a small link a the top right, then scroll down to Coding, then read the text for a bit and wonder which link you should click, finally click on Developers can help, and then find yourself in front of a huge page containing all sorts of links. Hopefully after some pondering, you'll click on Getting your patch into the tree which takes you to a page titled “How to submit a patch” (finally!). Fortunately, the last page is a wiki, so I went ahead and changed the title of the aforementioned link to “How to submit a patch”, which I think is a much better title.
- [2] Figuring out how to run git-cl was a huge pain. I had the Chromium depot tools installed in a weird way that caused it not to be in my $PATH, and that caused me to wonder for a few minutes how to get the “cl extension” to git, and some more minutes to figure out that I need to find the git-cl script somewhere down my depot installation directory. I wish this tool lived in their tree somewhere.