I'm currently obsessed with portable design - portable across languages / frameworks, I mean.
Developers are sometimes burned by their platform dwindling. For example, if the WordPress/Rails/Love community goes the way of the dodo, if the security holes become well-known and the antispam devices are routinely circumvented, and these flaws remain unpatched because there are no longer enough qualified maintainers, then what will happen to you, trying to maintain a WordPress/Rails/Love app?
Ted Chiang wrote about this platform-dependency phenomenon in his "
The Lifecycle of Software Objects".
Access to the source is some protection, but it's not a perfect shield. A better (though still not perfect) defense is striving to make your app a thing-in-itself, which is only loosely related to its platform. Then you can shift to another platform if your first platform dies.
The reason I'm interested in multi-language stuff is that if I can port my app from one language to another (in hours, not days), then that's evidence that my app is a thing-in-itself, and isn't deeply tangled with its platform.
Haxe is a language that views javascript, actionscript, C++ as possible targets. Haxe is, in principle, a "thing-in-itself" that would not wither and die because one of its suppliers vanished. I have doubts about Haxe (it's a very small devteam, for example), but Lisp, on the other hand, is definitely a thing-in-itself - so much so that it seems to levitate with no visible means of support. Rubinius and PyPy are important to Ruby and Python primarily as evidence that Ruby and Python are things-in-themselves, not fundamentally locked-in to their original C/C++ implementations.
DeltaBlue and Minilight are a couple of little apps that have been repeatedly ported, and so are probably examples of very-portable designs, worth studying.
Minilight is a global illumination renderer.
DeltaBlue is an old incremental constraint solver. Here are
Smalltalk, C, and Lisp versions. A
Ruby version.
A
Javascript version. A
Lua version.
I've worked a bit on parallel examples of extending-and-embedding different scripting languages, little
bindings to the add-character and move-cursor functions of the curses library. The Javascript, Lua, Python, Ruby bindings work. The Smalltalk binding isn't done and perhaps won't ever be done.