Write Once Debug Everywhere

There are often systems that promise to work seamlessly across platforms. History shows this to be a big promise, seldom achieved.

Java had a great slogan that encapsulated the promise:

Write Once, Run Everywhere.

Developers quickly corrupted this into the more pithy and truthful:

Write Once, Debug Everywhere.

The technique that Java used to achieve this cross-platform capability was to ship its own Platform - the Java Virtual Machine.

Other cross-platform solutions use this same technique - they ship their own platform that can run on top of other platforms, and use as much or as little of the underlying platform as is generally available.

Lowest Common Denominator

One of the terns used to describe the resulting experience is "Lowest Common Denominator". If there are some features that all platforms have, and many features that only platform has, there are few features that all platforms have. And these few features are the "Lowest Common Denominator" -- and they outline the simplest experience to provide on every platform. You might be using a highly advanced computer on a stylish and modern operating system, but the cross-platform applications will be exactly as ugly here as they are on the lowest supported application.

Progressive Enhancement

Ideally, your experience will be better than the Lowest Common Denominator -- the application, having detected the available capabilities of the underlying platform will progressively add enhancements when it can. This tends not to happen in the first few versions of a cross platform solution, and even as a cross-platform solution matures, this is spotty at best.

The most successful cross platform solution to date

By far, the most successful cross platform solution the world has ever seen is that beastly trinity: HTML+JS+CSS, that make up the modern World Wide Web. The same website can be experienced from numerous devices, and from numerous browsers -- freely available browsers I should add, and to quality I mean free as in "free beer" (and all the wobbliness therein implied) -- on all of those devices.

To understand the nature of the struggle for cross-platform compatibility, the history of the browser, from a user's perspective, is a fascinating case-study. What a journey it has been.

The History of the Browser (from a user's perspective)

  • early competition
  • "best viewed in" {netscape|ie} badges
  • early dominance
  • standards to the rescue
  • agent detection
  • css browser hacks
  • ie only tags, no script etc.
  • sidequest: flash, apollo, silverlight
  • ios and market manipulation part I
  • progressive enhancement and graceful degradation
  • xmlhttprequest and the rise of ajax
  • jquery pulls ahead
  • feature detection
  • plus polyfills and shims
  • side note -- vendor prefixes
  • tables, big big tables of compatibility
  • the curse of standards and regulatory capture
  • a world of monopolys
  • ios and market manipulation part II

This article is a stub: the tiny seed of a mighty article, not yet written.