Long have people dreamed of the day where they could write an application for one platform, pick it up and plop it down on another and run it without much trouble. Right. Nice dream buddy. Or is it?
Sure, there’s Java, Sun’s supposed uber language that was meant to make the whole world one platform with one language running it all. Too bad it never really took off. In addition to the sluggishness of a fair bit of Java code when running, and that despite claims, running your applet on Windows never quite looked the same as running your applet on Mac or Linux. Oh, and Java was a completely new language (well, not completely new, it did borrow a lot from C/C++) that everyone had to learn to make this brave new world a reality. I’ve heard rumor that Sun won’t even use Java internally.
So now we have a world where lots of techies use Linux for work and pleasure, the Macintosh crowd is starting to gain ground. Windows, while still king of the hill, isn’t the One OS To Rule Them All as it had been just a few years ago. Portable applications and code is becoming increasingly important.
So everyone wants their apps to be as easily ported to another platform as possible, but few want to go to the hassle of recoding it, most likely in another language. This problem is especially serious for programmers who started in the Windows world and live and breathe VB and want to expand into new areas.
Well, of all people, it’s Microsoft to the rescue, though they didn’t expect it at first I’m guessing. Microsoft’s .NET strategy, once a bunch of marketing hype, has solidified into a defined Common Language Runtime that has been reimplemented by Novell in the Mono Project. Mono is essentially an Open Source implementation of the standard as defined by Microsoft. The idea now is that you can take a pile of .NET source code written under Windows and (as long as you avoided some of the Win32 specific libraries and functions) compile it on a Mac or Linux box that has Mono installed.
What’s so great about this you may be asking… Java did the same thing, just install the Java Virtual Machine on the system and run the applet… BOOM! Done!
It doesn’t quite work like that. Sure you need to either have the .NET Framework or Mono installed, but these represent a much smaller install. The big difference is in the freedom the programmer is given. Are you a VisualBasic coder? Cool, just make sure you have the .NET and Mono VB components setup. C/C++? COBOL? C#? Same deal. Pick your favorite programming language and just so long as you have the proper libraries, you are set to go! It all compiles to the same code in the end anyway. Where Java erected barriers by forcing you to learn a new language, .NET/Mono lowers them by allowing you to pick the language you’re the most comfortable with.
I’m not a programmer, but I often find myself having to do programming tasks. So for me this absolutely rocks. Now, I have to learn one language (I’m going with C#) and I can take that knowledge and apply it to any situations I encounter in the future. I don’t intend to become a professional programmer, it’s not my deal. However if I am going to invest the time in learning a language, I want it to be one I can use in as wide a variety of environments as possible. I have a Windows PC, a Linux server and a MacOS X Laptop. I want to be able to do my coding work on whatever machine I currently have on-hand. Like right now I’m sitting on my laptop in Bradley Intl Airport waiting to catch a flight to visit friends and family back home for the weekend. Once I finish up this, I’m going to fire up BBEdit and pump out some more ASP.NET/C# code and, thanks to Mono and the mod-mono plugin for Apache Web Server, I’ll be able to compile and test it on the fly.
The only caveat to this grand new world is you can’t do anything that uses WinForms, DirectX or any of the APIs to connect into other MS software and systems. You have to still be careful to avoid using platform-specific features and functions. But, if you’re a novice programmer chances are you won’t need anything so complex anyway. It’s an issue to deal with when you come to it.
The walls that have been erected between platforms are being lowered at last. I can now write code for the big 3. With programs like Multiplicity I’ll soon be able to use the big 3 together seamlessly from one set of controls. Technology is finally starting to make my life easier and more efficient. I honestly wonder how things are going to look 20 years from now considering how far we’ve come in the past 20.