Not Implementing Features Is Hard

Robert O’Callahan, a Mozilla developer, has made a blog post explaining why Firefox omits certain features. Based on the headline, I thought this was going to be discussing the evils of feature creep. That is not the case.

Sometimes we take heat for deliberately not implementing certain Web platform features. Three significant examples are SVG Fonts, WebSQLDatabase and H.264 in <video>.

But I honestly think we’re doing the Web a service by resisting these things.I think not implementing certain features is one of the hardest and most altruistic things we do.

Update I should also point out that we’re not just exerting “stop energy” here; for each of these features that we’re not adding, we are promoting superior alternatives — namely WOFF, IndexedDB, and WebM.

- Not Implementing Features Is Hard

I’ve been using Firefox since it was called Phoenix. In those days, your only real browser choices were Internet Explorer or the full Mozilla. Mozilla was a better browser, and even had a crude tabbed browsing implementation. The problem was that it was big and slow because it wasn’t just a browser. It also included email, newsgroups, composer, and more. Imagine if all the different parts of Microsoft Office were a single program. That was Mozilla in those days.

Over time Phoenix, and then Firefox, gained popularity for three reasons. It removed all those features that most people didn’t want or use. This resulted in vastly increased performance and stability that other browsers had a hard time competing with. It removed even more features that some people actually did use, but made them available by extensions. Lastly, they added and polished new features that most users actually were using, such as tabbed browsing.

There was one more thing Firefox did that was very important. Most web sites actually worked in it. This was a time when many sites were built only for Internet Explorer. People would begrudgingly continue to use IE simply because some web site required it. Because most sites worked in Firefox people were able to switch. This is important because it shows that people are more loyal to web sites than web browsers. People will switch to a better browser, but only if all of “their” sites work in it. This is why businesses with Internet Explorer specific intranet apps stick with it, even when the IT staff knows that better browsers exist. The web apps take precedence.

Today we have some browser features like SVG Fonts, WebSQLDatabase, and H.264 video. If Firefox wanted to make an argument that they shouldn’t included these features at all, because of feature creep, that’s actually cool. That’s the philosophy of Firefox. Unless it’s for every user, put it in an extension or a plugin. Keep the browser small.

Too bad that’s not what they’re doing here. They are supporting what they feel are “superior” alternatives. Those alternatives may indeed be superior for legal reasons, or even technological reasons, but that doesn’t mean jack or shit. Web sites are already using these features that Firefox is not including, and the more sites that don’t work in Firefox, the less people will use Firefox.

As a web developer, Firefox is the go to browser. I’m using it right now. Why do I use it? It’s because it has Firebug. I can’t do my job without Firebug. The webkit developer tools are getting a lot better. Most developers I know only use Firefox because there is some extension they need. They really want to stop using Firefox, but can’t. Chrome has extensions now, and most of the important ones are being ported. There’s less and less tying people to Firefox, and if apps work better in webkit browsers, people are going to switch away. It might take some time, but it will happen.

What bothered me most about this article was that he says that they’re doing the web a service. I can safely say, they are doing the web a huge disservice. Let me use something people haven’t paid much attention to as an example. Behold the HTML5 audio tag. It’s just like the video tag, but for audio. Can you guess which browsers support which audio codecs?

Codec support in modern browsers
Browser Ogg Vorbis MP3 WAV
FireFox 3.5
Safari 4
Chrome 3 (beta)
Opera 10 (beta)

- Native Audio in the browser

This chart can easily be redone to show support for video codecs, fonts, etc. Just about any new HTML feature follows this same pattern. Yes, all browsers are equally to blame here. If Safari supported Ogg, we would be all set. If Chrome supported wav, that would also solve everything. It takes just one to break the dam.

That being said, I don’t know why none of them do it. The browser that supports the full set will be the browser that works with any web app. Thus, it will be the browser that dominates. Firefox could be that browser, they just have to give up on their philosophical bullshit. Web developers will have peace of mind. The web will become a much better place because there won’t be all sorts of hacks in web applications to switch between different codecs depending on user agent.

There is something to be said for leaving out features completely for the sake of performance and stability. The extension philosophy has got Firefox to the place it is today. Even so, making sure every web site works in your browser is priority number one. And sometimes adding a feature, like tabbed browsing, is beneficial to everybody. These things Firefox is holding out on should be included straight up. I’m starting to think maybe it would be a good idea for someone to create a Firefox fork that has all these features that Mozilla is refusing.

Well, it’s no skin off my back. If they continue to hold out, Chrome and others will just eat their lunch. They say they don’t care about market share, so that’s totally ok by them. It makes me wonder. If they don’t care about market share, why did they always so proudly advertise their download figures?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>