Tuesday, March 13, 2012

Connecting the dots...

As much as I hate to reference Steve Jobs there is one thing that I will remember him for that I thought was good, his famous 2005 Stanford Commencement Speech. Central to the first part of his speech is the idea of "connecting the dots", living your life loosely, following all your interests, not worrying too much, with the dots eventually connecting somehow. I remember sending this speech to friends concerned about being undecided about school and feeling pressure. I am not sure if it ever got through to them but truth is there is there should be no rush, and I agree one should follow one own's interests, what makes us happy. Eventually these things may come in handy as the dots start connecting in your life.

The dots are starting to connect for me and I find myself now understanding why I tick the way I do, what motivates me and why I am passionate about the things I am passionate for. Mind you, I'm still young, only 31, but yet the dots are connecting fast and I think its good to reflect and realize what these dots are and how they make you tick. I'll reveal a few of these and I think that can also help my friends understand why I tick the way I do and what I am passionate about some of the few things I am so passionate for.

As far as technology is concerned for me so far, the dots began with hacking. I was intrigued by the idea of hacking and naturally I started hacking on Linux circa v2.6.5 purely as a challenge, interest, and being intrigued as to how this crap all worked. It took a long time to learn to work upstream and I remember having heated debates with upstream maintainers, particularly Jeff Garzik who at that time maintained networking drivers and accepted 802.11 drivers as well, over random stupid things. At that point things were pretty simple though and frankly 802.11 sucked, mainly due to its infancy and as far as the kernel is concerned netlink wasn't being used yet t help improve APIs.

After gaining some experience with Linux kernel hacking I then graduated college with a Computer Science degree, mainly because it just made sense at that point, but I had a lot of other interests. One of my other interests was philosophy and it just so happens that part of the Linux kernel hacking dealt with dealing with licensing, something that typical proprietary programmers do not have to even consider when working for typical companies. At school I also had a hard time finding interested geeks in kernel hacking when I started and I figured starting a Linux Users' Group, RUSLUG, would help with that. It didn't. But I did get to meet fun interesting folks, some of which I still remain in contact with.

To start RUSLUG we needed an organization mentor, and that allowed me to meet Joseph F. Miklojcik III who unfortunately passed away at only age 41 last year. Joe ended up becoming my boss for a while as a student programmer making RPMs out of all things for Solaris. But Joe became more than that for me, he became a mentor. It was as close to as a real hacker as I had ever met in person. He had good stories too. One example was that of how after school he started working for a proprietary software company writing tons of code to write an editor which competed at that time with good 'ol GNU Emacs. The company worked really hard at writing and competing with GNU Emacs and never imagined any pesky open project may seriously compete with their own software. Heck, they even sold the editor to NASA! Why in the hell would NASA, of all organizations, use an open editor such as this thing called "GNU Emacs". No way. Obviously they were wrong, you see Richard Stallman, as crazy as he may seem is one hell of a programmer and the shit he did to this day is likely not appreciated by many. Joe did try to explain to me his capability as a programmer and I believed him.
There was one thing that one famous programmer disagreed with Stallman on -- style. Linus Torvalds writes on the Linux kernel's CodingStyle guidelines:

First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture.

Angry? Heh. Wrong or not -- it did not matter. Linus also happens to be one of the best programmers the community has seen and he wrote one piece of code that Richard did not have as part of his GNU Operating System, but it was very important, the kernel. With Linux, the GNU Operating System was a complete free and open Operating System. As it turned out Linux picked up traction -- and fast. It is now the fastest growing software project in the world. Don't believe me? A few stats for the v3.2 kernel release by which Greg Kroah-Hartman has put together on his kernel development slides:

No one can compete with this pace of development. Not even Stallman. But being at RUSLUG also pushed me to learn and talk about other things than just kernel stuff. In fact at one point we invited Stallman to come give a talk, he refused given that our user group's name did not include the word "GNU" in it. He indicated that this was not acknowledging a huge amount of history and effort that went into completing a full open Operating System. We didn't know what to do so we discussed it among ourselves through our mailing lists, and IRC. The verdict was we would not change our name. Stallman refused to come but instead Bradley M. Kuhn came for a talk. Bradley struck us a not crazy, very easy going and not an extremist. I don't even remember what his talk was about but I remember it being great. That was when I first met Bradley.

But RUSLUG also taught me to think about the Free Software Philosophy and the moral claims that Stallman preached about through his Free Software movement. The moral obligations that he feels we are entitled to are all reflected neatly in the license he authored the GPLv2. Stallman would be very pleased to find out that good 'ol Linus ended up embracing the GPLv2. Despite that the RUSLUG was already decided on the simple group name title change I was still philosophically at ends with the moral requirements claim on software. I decided my goal was to come to a decision on a position on this by the time I graduated. I did graduate but -- I was unable to come to a conclusion by that time. I did pick up a lot of interest also in Business Ethics and took a few courses on that. It was a lot of fun. I passed the final exam without studying (due to time), the exam covered one case study I knew very well -- Microsoft imposing their own Java virtual machine onto the world on their Internet Explorer web browser. I like to believe I vented eloquently on the exam.

After graduation I hopped around random CS related type jobs, customer support for some Unix crap software, Web Developer, NOC Engineer, Systems Engineer, Security Engineer, in the end it didn't matter. All I wanted to do was hack on the kernel and I found any excuse to make any issue I found a kernel related issue. But it also helped me become a better engineer all around as it meant I wanted to understand the kernel well. After having a great career moving up fast I ended up working for the financial industry and landed a gig at Merrill Lynch. It sucked. It didn't work out, and I got fed up with those sorts of jobs. I wanted to only do Linux kernel development. I took a huge paycut and went to my alma mater and joined the Orbit-lab project and did Linux kernel hacking for shits and giggles, one of the only places in New Jersey that I was aware of that was hiring hackers, and curiously for 802.11.

That was fun :) but they had me work on a Linux kernel driver I told everyone I would always avoid: MadWifi. The MadWifi story is long, in what I call the ath5k wars involved legal issues, about 3 slashdot articles that I remember, huge flamewars and a lot of rants. The story endup up well though and the community managed to jump ship on MadWifi and we finally got a proper replacement in the Linux kernel, through the ath5k driver. But through the ath5k wars we dealt with a lot of legal issues and concerns, and it just so happened that Bradley M. Kuhn had started a non-profit organization, SFLC, to help represent Free Software developers with legal issues, the core idea was to bring some of the sanity that the good 'ol GNU project had to other larger FOSS projects. It worked out pretty well for us and if it was not for the SFLC I doubt we would have good open Linux 802.11 drivers. This was the second time working with Bradley somehow.

One thing happened during the ath5k wars though -- as a consequence of dealing with SFLC so much, I also learned quite a bit of licensing legalese. I'm certainly no attorney -- but what I learned during this time to this day remains priceless. I always have avoided drama and politics, and I hate legalese, but somehow I keep being drawn to it like a magnet.

After the ath5k wars I needed cash for my mortgage and I was in serious denial about not needing to find another job for a long time. Of all offers I took Atheros' and started working on the first properly company sponsored Linux upstream 802.11 driver, ath9k. All the lessons I had learned before on legalese, how to properly work upstream on the Linux kernel had all paid off for this project. The project was successful despite the huge major challenges we faced. To this day I consider it one of the most complicated drivers we have and the legal questions could easily have doomed it, particularly in regards to regulatory and the challenge of finding a solution for regulatory for open platforms. I should mention though that one of the things that particularly hurt from the work we did was that although we had upstreamed the first complete ISC licensed driver into the Linux kernel we, Linux wireless developers, for silly reasons were still at odds with OpenBSD, despite our original reuse of code from OpenBSD's ar5k for ath5k... Despite the success of the driver its perhaps probably alarming to think that such a thing would bug me, but it does and I wish we would work better together with other communities.

Joe had passed away in 2011, only a few months ago, and found it amazing that his obituary stated, "In lieu of flowers, please consider memorial contributions to the Electronic Frontier Foundation". I my jaw dropped, but not at being surprised, this was certainly how Joe would have liked it, I was happy. I decided I was not sending any flowers nor would I contribute yet to the EFF. Instead I promised to work harder in spirit of what I believe is right, and I would use my own philosophical principles that I have concluded on Free Software, but I would also accept no compromises on shit engineering anymore, Joe knew at certain point his company would not compete with GNU Emacs, I promised myself I would go beyond the call of duty and would not let any piece of crap code get in the way anymore, ever. If you know something is right -- fight for it. But I am also going to focus on this with proper business ethics in mind. Its easier said than done. So we'll see.

And here I am now, connecting more dots. I'll just say the next few months are going to be interesting. I'll be blogging about more dots and how they connect as time goes by. Understandingintent and motivation though is very key to understanding community development, and I hope I've made my intent and motivation clear.