Embracing Technodiversity

I occasionally wonder at the rivalry that exists between open source languages (and the web frameworks built on those languages). To a certain extent it makes sense: humans have a basic tribal nature, and one of the most natural expressions of that nature is in “us vs. them” behavior. (Fortunately, in most of the world these days, it’s expressed in the form of sporting events more often than deadly raids to steal a neighbor’s cattle.)

But on another level, the rivalry really doesn’t make sense. In biology and ecology there is a concept of “biodiversity”: a diversity of species and the interactions between those species and their environment. A species with genetic diversity is more likely to survive a disaster because some members will be immune to the disease, or better able to handle the climate changes, etc. An ecosystem with biodiversity is stronger and more stable because the basic functions of the ecosystem will be maintained even if one species decreases population or disappears entirely.

Extending the metaphor to technology, technodiversity means having multiple different projects or products available to solve particular problems in our technological lives: things like web browsers, email clients, office productivity tools, web frameworks, programming languages and tools, or operating systems.

Technodiversity means you don’t have to live with the limitations of “the only tool for the job”. It means a single computer virus or hacking technique can only affect some of the machines on the network because they don’t all have the same vulnerabilities. Technodiversity means that if one piece of software is no longer available, for whatever reason, you’ll be able continue the same tasks in another functionally-equivalent piece of software. Open data formats are an important part of this last aspect, because the ability to change over to one product from another isn’t really complete until you can access all the data from the old product (this is true for hardware and software).

Technodiversity is often mentioned in the context of offering open source alternatives to proprietary products: Linux vs. Windows, Firefox vs. Internet Explorer, OpenOffice.org vs. Microsoft Office. But this misses a fundamental lesson of biodiversity: an ecosystem with a single species filling a necessary function is at risk of failure. The success of open source is not Linux, but Debian, Fedora, FreeBSD, NetBSD, OpenBSD, SuSE, Ubuntu, etc. A single open source language is not a success, the success is Lua, Perl, PHP, Python, Ruby, etc.

I find it interesting that Microsoft supports a host of programming languages. I don’t take this as a sign that Microsoft necessarily understands technodiversity, but as a sign that the market demands technodiversity. The ability to continue running old software is as important as the ability to develop new software. Any given syntax provides more elegant solutions to some problems, and less elegant solutions to other problems. Some people will always be more comfortable developing in one language than another, because of their development background, style of problem solving, or philosophical tendencies.

I don’t expect the proponents of one programming language to say to all the others “Hey, we’re glad you’re out there strengthening the open source ecosystem!”, any more than I expect the various forms of greenery in my garden to stop trying to take it over. The success of each species depends on that species pushing as hard as it can, and adapting as well as it can to changing circumstances. I have observed, though, that programmers who embrace technodiversity are better able to profit from whatever trend is popular this week. And development shops that embrace technodiversity are better able to adapt to new tasks and create new ideas. Technodiversity isn’t about “playing nice”, it’s about flexibility, innovation, and survival.

tags: