I was browsing the CNET commentary archive when I stumbled across an article discussing the new Netscape 8.0 beta. Interested to see if perhaps the Internet community was intending to open another front in the browser war I felt inclined to read on. Nothing interesting was said in the commentary and as a general rule, I find that to be a trend of sorts from CNET, skirting the border between those who are tech users, and those who are truly technological in nature. But what became much more interesting was the collection of links at the bottom of the page. Most of them were to a variety of reviews and public opinions on Firefox. I realized that as a contributing member of the open source community (not on some wizardly hacker level, but I have contributed the occasional bug fix… Although I am guilty of far more bug reports) I really was not used to viewing an application as a user would. And more importantly, what did the world outside of the occasional pro-Firefox article I read think of it, how did those who defended IE justify it? Normally I dismiss pro-IE works as stupid propaganda or simply works by the un-enlightened. I decided to attack this open minded, to not, even for one second think about the actual code, not wonder why the poor bastard who created this site choose to half ass his CSS implementation and ignore any semblance of standards compliance. Just be a user.
That didn’t last… I would love to have an incredible review here that tells a tale of some mind altering experience in which I realize that to be effective developers we have to better understand the needs of our users. I find myself too “l33t” to think that we should alter (in a fundamental sense) how we approach software development in the open (or bazaar) model. But what did strike me as odd was the astounding number of times that the Mozilla foundation was quoted as saying they had not built up the developer base they had expected or desired. I felt the need to re-read the sentences and quotes several times over. While they did go on to acknowledge the stunning financial support received, and how users are great about submitting bugs and coordinating standards compliance movements, actual developers, the ones that fix those bugs and create the utterly stunning and innovative feature additions (that originated as simple solutions to a problem they had personally) are not present in the force that can be found in other projects.
I almost felt offended, here was one of our flagship projects, demonstrating that Open Source projects could indeed have desktop implementations and interact with everyday users. Perhaps the single most publicized slab of OSS that we can find, the real challenger to an arena of MS dominance, a true underdog. Sure Apache has IIS whimpering and a super computer running some MS product is akin to Jeff Gordon being given a Pinto and asked to compete in Daytona, but here we have a genuine foothold deep in enemy territory. Here we are at Normandy, but apparently only the British are fighting, the Americans and Canadians are off in Italy looking for new mopeds or something. It stands to reason that we would be throwing everything we have at this opening, trying to hit 25% of market share before the IE 7 release. (While I have no doubts about its futility, it will have an influence on users) I decided that as a small time contributor to Open Source projects, I should make an attempt to find a simple bug and attempt to fix it. I would make a point of searching for one thing (something simple, but none-the-less this is more of a ‘its the thought that counts’ type thing) I want to know why an obviously appealing and strategically important project does not have substantial community support.
First things first, I am a Gentoo user for about a year and a half now, and one of the most important things about contribution to Open Source projects is using the vanilla CVS tree for your fixes, this means avoiding portage and its USE flags, (even when they probably have no effect whatsoever on the branch I have chosen to focus my attention on) . So, first step, I head on off to find the 1.0.2 source, I know I’ll need either the CVS tree or nightly build later, but the latest release is a nice starting point and saves the developers site’s servers a few cycles and a bit-o-bandwidth on a project this big, probably not a concern, but courtesy is generally appreciated, especially if I look like an idiot later and need help while attempting to help.
My starting place was http://www.getfirefox.com, granted, I probably should have looked for a developers site first, so sue me, I was ignorant. Unfortunately, they only distribute pre-compiled binaries as near as I could see, not a major roadblock, but automatically providing Linux users (the group most likely to be interested in the source and most likely to provide developmental contributions in the form of real code) with a binary as opposed to source sets a tone that seems to build throughout my investigation. At this early phase, I noticed nothing, but as we progressed, it seemed representative of what was to come.
To digress slightly, I feel that I should give any readers a more comprehensive idea of my technical background. That way, as you flame me and form your opinions, you will know my biases and predispositions. Here is my view on OSS. I have been deeply involved in the computer world for about three years at this point. It was at that time I took a short one week class on C++, namely because I had done well in my Computer Applications by Design class. I would love to tell you all the glorious door this opened but suffice it to say, that up until this point, problem solving (as a skill) was only valued in its slightly abstract application to problems that existed in a very ‘real’ world. I have always struggled with computational skills, and have faced challenges in math because of it (Up until Pre-Calculus, it was at that point people realized, if I could understand what was going on, who gives a rats ass if I can multiply 6 by 8? Answer: Nobody beyond your 3rd grade math teacher) My core programming knowledge stems from my work with C/C++. First on windows but a little over two years ago, I heard about Linux, having an old crapped out Windows box that couldn’t boot into an environment capable of running a virus scanner, I decided why not? My C/C++ is pretty strong, but a bit under practiced as I then took our schools AP Computer Science class. (For those of you not familiar with our current public education system, the AP Comp Sci test is in Java with a strong focus on OO concepts and OO program design) Thus most of my programming work has been focused on Java, as I have taken a liking to Eclipse. And while I will admit that swing is quite ugly, its a handy learning tool and effective for simple UI task. More recently I have had some interesting success with the GTK bindings for Java. I have spent some time in the past 6 months or so messing with scripting languages namely BASH, PERL, and Python, with the last being my preference currently. I am obviously web literate and can handle basic HTML/XHTML and CSS work, but resent the idea that markup languages can be used for UI. Thus I have done my work with Java Script, as a principal I resent client side processing, but do accept that for today’s web based applications, server side solutions are near impossible, both technically and economically. So there you have it Java buff, with a solid C/C++ background and scripting experience including Java Script.
Since we are back on track (that last paragraph was about three pages of rant initially, I forked about 80 percent of that into another post for a later date). At this point I can tell that Mozilla is aware that they are not pitching the ideals of contribution to most of their users, who are supportive of the Open Source idea simply because it also generally results in free programs. I instead hop on over to http://www.mozilla.org/developer/ (a page one link) and think jackpot! The contributions I have made to projects were small, the projects were small, at absolute best, generally a pre-beta/late-alpha release (those programs are a more manageable size and problems easier to find without a great deal of familiarity with the code). Not much manpower to spend on development documentation or anything of the like. Generally a Bug Tracker and CVS tree was about what you could hope for. So perhaps I’m naive but all this, but not only is there a host of documentation and documents (something I will get to in a second) but a series of powerful tools, unfortunately this was of little help to me, the ‘newbie’ (and I use the term humbly, I consider my self a proficient programmer, but having little professional team development experience, I assume that this are tools that I simply need to build familiarity with) in the world of Firefox source, I couldn’t make much of these utilities. Here I found all the links necessary to acquire my source including CVS instructions, I downloaded one of the snapshots and followed the instructions on the site verbatim to synchronize my source.
I am actually out of town during this little experiment, enjoying my spring break in Arizona. (Yes, I am outdoors, wireless… duh.. but yes… it is still sad) basically, this new resort has about 5mb/s of bandwidth, all good and read, except they have room for some 10,000 guest it seems, and apparently all of them have decided that 2:30 Thursday afternoon is an excellent downloading time. So while that CVS sync process plods along, I attempt to browse around the documents provided, including the Mozilla Hacker’s Getting Started Guide one of the best done guides to a projects policies on developer expectation.
One of the first things that the authors or the developer documentation make a point of is the portability that Mozilla products all implement. Next, a point is made that the core of Firefox is C/C++ and JavaScript (at this point I am encouraged, I probably won’t need much beyond a library lookup site to reference a few functions before I can get hacking) I proceed to read about the NSPR or Netscape Portable Runtime, I realize that I am going to be working with a near completely alien set of libraries. While it is wonderful that Mozilla has made cross platform implementation so solid, as a new developer, I’m intimidated frankly. However, I’m not out, there is a link to a very thorough and comprehensive set of documentation for the NSPR, enough that this should be relatively painless. But that didn’t last long, by the time the document had finished, I had come to the conclusion that I would need to learn not only a hybrid C/C++ but a foreign UI language in addition to implementing several words and ideas that I don’t even know the meaning of. Now this might just be a wakeup call to me, that my programming habits are not with the mainstream, and that I should probably dig up a nice howto or tutorial on the latest and greatest. Or is this not my fault? Am I a decent programmer who wants to get involved, but simply can’t offer much to a project of this magnitude.
I break at this point because it was there that I realized why Mozilla didn’t have the support it desired. Despite an extensible format and widespread use and user support, they started the project with a massive code base. A code base that was developed in a closed system. While most contributors to open projects were not working with the project when the foundation was being laid, the community as a whole worked on each step. Small projects can be opened after development in a closed environment for a period of time because a talented programmer can sit down and digest all the code needed to add a feature or fix a bug. Mozilla’s size and widespread appeal prevent this. One cannot get fed up with a bug and just crack open the source then start searching, there are no hackers who just decide that the table rendering is too slow, and rework it. While certainly most of the heavy lifting done in development is not done in this spontaneous manner, once you have made a submission of that nature you continue to contribute to the project. It is that thrill of trying something radically new and having it work that drives a hacker. Firefox is not a system that really encourages that, being so large and unifying all the cross platform development trees make hacking Firefox too much like an obligation.
Well what about extensions? Firefox had provided a VERY simple and powerful method for creating extensions. Building on the heavy use of JavaScript in Firefox’s interface, creating an extension is really quite similar to web based application design. Because of this, there are plenty of extensions under development, many containing quite useful and stable features. This in addition to the financial support proves that we are more than willing to help Mozilla continue, but there simply doesn’t seem to be some way for potential developers to get involved painlessly. I wish I could see some magical solution that would make development work on Mozilla simpler, but it seems that the sheer size of the project will continue to alienate developers who don’t have the time, dedication, or ADD medication to work through the steep learning curve.

April 2nd, 2005 at 11:09 pm
Most of what makes up the modern mozilla codebase was actually created in full view of the public. The ancestral netscape codebase was more-or-less abandoned. Two reasons the codebase is so unwieldy and arcane: overengineering and cross-platform-itus. But those are not the main reasons. The reality is that a browser with the sort of functionality that makes firefox so attractive is just inherently complex and LARGE. It’s probably the most complex piece of software you use outside of your OS kernel. Eclipse might be getting close though, you should take a shot at fixing a bug in that sometime!
April 2nd, 2005 at 11:48 pm
hahaha, I have made attempts at eclipse fixes, I was getting annoyed with an interface and just decided why not.. yeah.. that wasn’t much of a success. The size of the Netscape code base was a speculation, I feel the overengineering and cross-platform-itus are more deadly then the large codebase. Namely b/c of how well documented the Mozilla code is. It just requires a whole new set of coding practice (admittantly, all good habits)
April 3rd, 2005 at 1:22 am
Projects can be very large. Mozilla, the kernel and X are gigantic. I have worked on all three but it has taken me five years to know what I am doing. Don’t think of this as bloat either, these projects are doing complicated things and you just need a lot of code to do complicated things.
Don’t blame your training either. There is nothing wrong with what you learned in school. But in school you don’t deal with projects so big that they take a year or more to comprehend.
When I first start on large projects I print out big piles of it and read the code on paper for a week or two. I can make stacks of paper on the floor representing the code structure. Once I begin to understand the structure I use the computer so that I can jump around in the code mode easily. C or C++ or Java doesn’t matter to me, I’m looking for control and data flows. Those tell you how things work.
Once you learn how to deal with gigantic code bases you become a much more valuable programmer.
April 3rd, 2005 at 1:45 am
Hmmm, I have toyed with printing chunks of code, being a visual person I tend to sketch the structure of my larger assignments and the like. Because of my growing proficency, I have thought about sitting down and spending the time nessicary to understand a large project. One teacher of mine and I actualy saw eye to eye on this. She (yes a female CS teacher.. pretty wild huh?) was pushing for classes or IS (Independent Study) courses that would focus on not only utilizing and modifying existing code, but more instruction on development tools and group programming. We do minimal group work, and as a result we either work with blackbox classes that have been thorughly documented and tested or with code we have devised. But it still elludes me as to how the kernel can be so community driven and Mozilla has to rely on hired developers more….
Although in the end, there is a core group of developers who work on the kernel as if it were a full time job, so perhaps its not that different. I have never submitted a kernel patch. Most if not all issues I ever have with the kernel are never something near a bug, just my own slipups and experiments.
April 3rd, 2005 at 7:28 am
I would like to see at least a handful of corporate sponsors step up to the plate and fund development of an improved knowledge base infrastructure for developers. Specifically, a system to facilitate the collection and improvement of the documentation prospective and working devs need in order to familiarize themselves with the code. We can’t expect the devs to do this on their own, they’re spread too thin as it is and would probably rather face dental surgery than spend their time working on documentation (I know I would).
By the way, a learning curve is a measurement of the rate of information uptake over a period of time, so what you’ve just described is a shallow learning curve. Steep learning curve: good, shallow learning curve: bad. The mozilla code base needs a steeper learning curve.
April 3rd, 2005 at 3:43 pm
Agreed, I personaly appreciate what companies such as Novell and IBM are doing, but they could target thier monies and efforts a little better.
April 28th, 2005 at 10:09 pm
mehh!!!!!! SMART COMPUTER COMMENT!!!!!!!! beta mozilla cnn guy kevin kubess!!!!!!!
andelaa