Fifteen Years of Contributing to WebKit
My first WebKit commit dates back to July 19th, 2009. I have been contributing to WebKit for fifteen years now. I started my involvement with the WebKit project at Google as an intern in 2009, and later joined as a full time employee in 2010. In 2012, I joined Apple's WebKit team and continued my contribution to the WebKit project there.
Over the fifteen years, the web browser industry saw Opera moving to the WebKit, Google forking Blink, and Microsoft abondoning EdgeHTML. We also discovered Spectre and Meltdown vulnerabilities, and my former officemate started a new browser engine project. It has been a turbulent fifteen years.
In those fifteen years, I've made a little over 5,000 commits to WebKit. I developed WebKit's performance dashboard, and authored Speedometer benchmark. I also implemented ES6 class syntax in JavaScriptCore, and was heavily involved with designing and implementing custom elements and shadow DOM v1 APIs in WebKit. I was also involved with a number of architectural improvements in WebKit like removing Apple style span.
It's a little unconventional to keep working on a single project for so long in our industry. Because I started contributing to the WebKit project as an intern, my entire software engineering career has been devoted to contributing to WebKit. I have no zero software engineering experience outside of the WebKit project, perhaps except my recent contribution to LLVM.
But it makes sense because working on a web browser engine has been my passion for ages. Back when I was 12-13 years old and learning how to make websites, Dreamweaver was a popular web authoring tool. Because I didn't have enough money to purchase the software, I thought of making a similar tool of my own. To start off, it seemed pretty obvious that a good HTML editor should provide a GUI to edit HTML document structures without having to manually type in or edit HTML. So I figured I should learn how to parse HTML.
I started reading about SGML and XML as well as HTML4.01 specification and some Amaya code. Because I was developing this program in Japan, I obviously had to deal with multi-byte text encodings such as Shift JIS and EUC-JP. Unicode was a new hotness at the time, and wasn't ubiquitas among websites in Japan. So I started learning about text encodings. Because I was interested in making a GUI app, I also started learning Win32 APIs.
By this time, I had a private tutor who was a graduate student at a local university teach me how to code in C/C++. I started learning about pointers, stack, etc... as well as various data structures and algorithms. At the time, I was more proficient in C than C++, but I wanted to do object-oriented programming in C. So I wrote a bunch of utility functions to manage memory as an array, a linked list, a tree structure, etc... It even had a concept of constructors and destructors in the form of function pointers.
I ended up not creating my own authoring tool, but I leaned a lot by trying to make one. For example, I understood the concept of finite automata by reading Amaya code which had a for loop with a giant switch statement for each state. I was able to intuitively understand the advantage of such a design because I had definitely encountered infinite recursions while attempting to write my own HTML parser. That was how I learned to program.
Fast forward to today, after writing hundreds of thousands of lines of C++ code and fixing thousands of bugs in WebKit, I'm an experienced web browser engine engineer. There is no denying that I know a thing or two about web browser, and can authoritatively discuss some aspects of web browser engines and APIs. I would have never expected to end up here when I started my attempt to create a Dreamweaver clone many years ago. It has been a long & interesting journey. Who knows how many more years I'll be working on WebKit but I'm still excited to continue my journey with my wonderful colleagues.