Are there any open source or commercial web programming language that function much like Fog Creek's Wasabi? As in you write your web app in this parent language and it then compiles down to php for Linux hosts and ASP.NET for Windows hosts.
As far as I know, Fog Creek had to develop Wasabi because there wasn't such a tool. There are a few toolkits trying to be portable, but none that compiled to ASP or PHP that I know of (besides Wasabi, that is).
haXe is the closest I've seen, but it only compiles to PHP (and mod_neko), not to ASP.
Genexus is a commercial development tool that does that. It can generate several other languages. Its oriented toward database apps, it generates database schemas and queries from its internal language.
That said, I have worked with it, and I don't like it. It's quite buggy and its programming language is very archaic.
Before you bother, consider whether it's really worth it.
Supporting one platform with multiple configurations is bad enough; do you really need to support both ASP.NET and PHP? If you're writing an in-house application, then you probably want to stick to as few technologies as possible. If you're writing software to sell, then is it really a problem if your product requires a particular platform?
People act like Joel went mad with Wasabi, but I think it makes perfect sense if you put all the pieces together.
- FogBugz was originally written in VB.
- Joel hates to throw out working code to start over.
- Joel was faced with a server market split between MS and Apache w/PHP servers.
Given the circumstances, it's a rational decision to say, "OK, then, we'll just write a VB to PHP translator."
And once you've taken that step, to say, "Well, since we've essentially have a compiler here, why not extend it with the features we want that Microsoft has never added to VB?"
Thanks to Wasabi, code that would have to be written twice (or more, given some duplicated server/JavaScript code) is written only once.
Multitarget development is pretty common. It's the reality when you can't dictate your target environment.
Pick a real mature application server platform like Java. It runs everywhere...