An apology to Eli Grey


I would like to sincerely apologize to Eli for not sufficiently crediting him in a Modernizr feature detection PR from 2011 and for my original apology in 2012 not being sufficiently strong nor mindful of the weight of my behavior at the time. I was wrong and should have given you a sufficiently mindful apology.


In 2011, while I was a software engineer at AOL, I had been contributing to open-source projects in my spare time. Some of these were projects I had started (e.g. TodoMVC) while others were community efforts (e.g. jQuery). One such community effort was Modernizr - the feature detection library. I made a grave and very serious error in judgment in the way I approached contributing and attributing code in a Modernizr PR that I want to bring attention to in this apology.

In a commit from Nov 29, 2011 I submitted a pull request to Modernizr for an APNG feature detection check that I had applied a basic Modernizr test wrapper to. In the commit, I noted that the authorship of this work was solely myself. I had carried the test over from a hackathon project I had been working on at AOL, entirely failing to maintain the original authorship of the core logic.

In reality, the primary logic for this test was written by Eli Grey and published to his blog in 2009. In effect, I failed to maintain sufficient attribution and I failed to perform any research on the original author of the logic for the test, which was categorically Eli. Even basic research would have turned this up.

Eli brought attention to this in a 2012 PR.

My subsequent apology in the PR absolutely did not sufficiently weigh my behavior at the time, being at best weak. It was cursory, defensive and lacked the sincere apology and acknowledgment that Eli was due. To say that my behavior was in poor form would be to put it mildly. I should have categorically acknowledged and apologized to Eli for my error and not applied any defensiveness in my response: writing a minimal wrapper around a feature detection test did not excuse the fact that Eli was the bulk author of the work.

An apology

I wish to first address Eli and then the readers of this blog.

To Eli

Saying "I'm sorry" and was wrong feels painfully insufficient, but I'll start there - I am deeply, profoundly sorry. When you first raised this issue, my response was inadequate and lacked the gravity that your concerns deserved.

My failure to properly attribute the code to you was a serious lapse in judgment, and my half-hearted apology was, to put it bluntly, an insult to your work and your professionalism.

I'm ashamed that I didn't have the self-awareness or integrity at the time to fully grasp how my behavior affected you. You honestly deserved so much better from me, and I'm sorry for the frustration, disappointment, and doubtlessly the cynicism my past actions have likely caused you. I'm grateful for this chance to try and make it right, even though it's embarrassingly overdue.

Back in 2011, I failed to uphold the integrity and standards that the community and, more importantly, you, deserved. The truth is, the primary logic was your work, published on your blog back in 2009. It was an egregious oversight on my part to not maintain the original authorship when I carried the test over from a hackathon project. To call my behavior at that time "poor form" would be an understatement; it was wholly unprofessional and disrespectful to you and your work.

I wish I could tell you that I was young, or naive, or didn't understand the implications of my actions. But the truth is, I 100% should have known better. You deserved honesty, respect, and proper acknowledgment from the beginning, all of which I failed to provide. I'm committed to rectifying this as much as possible, even though it is painfully overdue.

I am sorry, Eli. One crucial takeaway from this matter is the imperative to give proper credit where credit is due. If you're building upon someone else's work, whether it's code, a concept, or even a simple comment that inspired you, acknowledgment is non-negotiable. Failure to do so not only undermines the work of your fellow contributors but also erodes the very foundation of trust and collaboration that open-source communities thrive on.

If you find that you've made a mistake like I did, whether it's a glitch or an ethical misstep like failing to provide proper attribution, the best course of action is to admit your mistake candidly and promptly. Half-hearted or delayed apologies can sometimes be as damaging as the initial mistake, as they call into question your integrity and commitment to open-source best practices.

In my personal and professional capacity since 2012, I have strived to emphasize the critical importance of following open-source attribution best practices to my teams. Although this in no way excuses my past transgressions, I hope it shows that your experience instigated a lifelong commitment to doing better. The behavior was not reflective of the engineer nor engineering leader that I aim to be today.

To readers

Contributing to open-source is both a privilege and a responsibility. I deeply regret my past actions and am committed to doing better, both in acknowledging this specific mistake and in how I engage with the work of others in the future. Thank you for taking the time to read this.

This isn't a reflection of who I strive to be now, and it wasn't fair to Eli, who deserved full credit for his contributions. The lessons learned from this episode have been hard but invaluable, reminding me of the fundamental importance of due diligence and proper attribution when contributing to open-source.

This note is in response to emails from Eli Grey to Chrome leadership from October, 2023