My previous post about WhatsApp Web Client generated a lot of feedback and polarizing opinions. From all the comments I've received since then there was a point of view expressed by a minority that worried me a lot: some people seem to believe that releasing something only for Google Chrome is the correct thing to do and that is one of the topics I plan to address with this post.
Many who were not web designers or web heavy users during the 90s don't recall the horrible experiences that were common back them. Stuff such as designed for Internet Explorer and best viewed in 800x600 in Internet Explorer, on a Sunday, in the northern hemisphere, while closing one eye and wearing a funny hat (well this last one was not that common).
Lots of websites back then were designed exclusively for a single browser and made use of non-standard technologies such as ActiveX and others. It was like the wild west but with cities not communicating with one another.
It was not until Mozilla decided to fight monoculture that standards started gaining more importance but thats another tale. The tale today is about monocultures and the horrors that spawn from it.
The dangers of monoculture
The monoculture of IE is not something I want relive again but it feels that we're approaching a similar situation again. If there was a committee of atomic web developers they would be moving the hand of the web doom clock towards the evening every time someone releases something just for a single browser.
There are more web developers today than any other type of developer. We're a very large group working on a platform that empowers a lot of people and sustain lots of business. To keep this ecosystem healthy there must be competition.
Some web developers shout that the world would be a better place if only Chrome existed, believe me, it would not. They argue that work would be easier because they would need to support just one browser. I normally answer that you should not be writing for specific browsers but targeting a standard.
Some people have difficulty in grasping what happens in monocultures so I will do a little exercise in here: Email is something that people rely on to do business and communicate with one another and there are hundreds of different email clients out there. You don't see someone sending an email and telling you: "Hey, this email only opens in Eudora". You don't send email for a single email client, you send email and the receiver uses whatever client they want to read it. Yes, different email clients have different features and may help you schedule meetings, reply automagically and other cool things but the core feature of displaying an email is basically granted. Imagine living in a world where unless you use a very specific mail client, you could not receive email from your friends. Is it still cool to release things for a single platform? I don't think so.
A monoculture is like having a single shop in town. Anything you want to buy will depend on the goodwill of the shop owners and they will price it anyway they see fit.
Right now we have five major browsers in the market — Firefox, Chrome, Safari, Internet Explorer, Opera — from these five, three are using webkit or a fork of it, just Firefox and IE have their own engine. Of all these vendors, Chrome has the largest market share. I would guess that Chrome marketing budget is probably larger then the whole Mozilla budget. Google advertises Chrome while you use Google products.
The Chrome monoculture is dangerous but its the web developers fault. Google makes a very good job with the standards bodies and has been a very good force there, the problem is that there are APIs and technologies inside Chrome that are not standard and developers are using them not to do progressive enhancement but as a condition for their stuff to work thus making it fail in every other browser.
Some are just lazy using webkit prefixed stuff without trying the other prefixes and the unprefixed versions. Others are relying in deprecated API that are no longer in any standards track or even in completely proprietary APIs. The web developers that should be coding towards a standard such as HTML5 are instead targeting Chrome. That hurts the web and breaks interoperability between browsers.
Why do these monocultures happen in the first place if a healthy ecosystem require multiple implementations? They happen because a company gets too powerful, too large and wants to exert control over a platform. Companies like having control, it makes much easier to please shareholders and plan ahead. It allows them to steer a market towards a goal that benefit them and their long term vision.
Monocultures are dangerous because they can completely wreck an ecosystem by steering it in the wrong direction.
The beauty of open platforms
Once you're using some technology that is backed by an open standard or platform, you can switch between different implementations depending on your needs.
The web is an open platform, heck, the web is the platform! It doesn't matter if you're using Firefox on a FreeBSD box, Internet Explorer 10 on your extremely well built Lumia phone or Chrome on your shining and uncomfortably hot Macbook, a well designed site will open just fine. The web works across different CPU architectures, operating systems, browser implementations and form factors.
One example of such beauty is the twitter client called Macaw. Because Twitter has a public API an ecosystem of clients was formed around it. Macaw was originally built for webOS but due to the fact that it was developed using web technologies it was easy to port to other platforms such as Firefox OS, Android, Chrome OS and BB10.
There is a very powerful thing about the web: There is no single company controlling it but a collection of stakeholders agreeing on what it should be, once a standard is implemented by different vendors its really easy to deploy things across different platforms.
Closed platforms work the other way. You can't influence their direction. You can't be a part of the roadmap discussion. You can't switch between implementations. Instant messaging is full of closed platforms.
XMPP is the prime example for open platform in the instant message arena. An open protocol that was made for working with different servers and clients. If instead of locking ourselves inside walled gardens we'd threw our collective weight behind XMPP, exchanging instant messages would be as trivial and easy as exchanging emails.
The joy of interoperability
The web is the only medium where every one is able to publish something with the action of linking bringing us together thru a microcosm of federated servers. Its a beautiful vision with no one in control and at the same time everyone controlling their own destiny. — me, drunk.
The web is the prime example of interoperability and companies fear that. The fact that the open web is a good platform makes their walled gardens appear less interesting. Why would you release something for a single platform if you could release it to everyone in using web technologies?
In our modern world of smartphones, users rely more and more in monocultures and walled gardens without realizing how much they are losing. While people accept offers of half baked clients that work on a single platform with the excuse that it works for me the web will be at risk.
In just some years we went from a world with federated instant messaging with XMPP, distributed chat rooms with IRC, text message exchange with Email, syndicated content with RSS, to a world where users apparently don't care about interoperability anymore.
I believe that the younger generation simply don't realize how important it is to interoperate. If you, dear reader who read so far, is ever asked by someone why interoperation matters just answer them with another question: Wouldn't a world where PS4, XBox, Wii U and Computers played with each other be awesome?
Interoperability is the thread that holds the web together. Every time you decide to use a solution that doesn't play well with others you're helping to cut those threads.
Instead of hurting the web by using web hostile solutions, its time we declare to the world what kind of web we want. We want to play with others. We want to interoperate between different implementations. We want a healthy ecosystem and more important than everything else, we want the users in control and values over profit.
Lets go further and not only declare the kind of web we want but lets create it together because in the web we're not only consumers, we're also creators. We can create solutions better than the walled gardens we've been offered lately.