Have a Windows application, but want to port it to Linux? Mono lets you keep your source code and run on Linux, too. Mono founder Miguel de Icaza explains.
Although many developers coming from Windows to Linux continue to use Visual Studio to develop, test, and deploy on Linux, some developers want to develop natively on Linux with an IDE.
There are a number of options for developers looking to use an IDE with Mono. The proprietary tools today are the most advanced. OmniCore produces an IDE called X-Develop that offers support for developing Mono applications with IntelliSense and visual designers. SlickEdit is also a popular choice for developers that are just starting to use Linux.
The open source solutions today are not complete. But there are two choices available: Eclipse with the C# plug-in and MonoDevelop. MonoDevelop is not as mature as Eclipse as a complete IDE, but it provides a very tight integration with Mono, auto-completion for all the class libraries, support for various programming languages (C#, Visual Basic, Boo, Nemerle, and ILASM) and a GUI designer specifically designed for Gtk#. MonoDevelop is shown in Figure One.
The Challenges of Implementing a Moving Standard
With a single company, in this case Microsoft, both setting and implementing the standard, significant challenges exist in releasing open source code that implements that standard. Fortunately, most development does not take advantage of bleeding-edge features in. NET right away. Itâ€™s at least a year before the latest. NET features begin to get any signficant use.
A dedicated team of engineers at Novell is working on Mono. Mainsoft also has a dedicated team working on the project components shared in common. Both companies are highly focused on implementing those parts of the. NET platform that Microsoft has placed with the ECMA standards body.
Beyond that, the companies depend on the community. Community members are incredibly important for Mono, as they contribute code, testing, and documentation. And thanks to the fact that there is a published specification for the major technologies supporting. NET, a blueprint from which to work exists. Project members arenâ€™t designing at a high level, but largely coding from an existing blueprint.
While there is a lag as long as 12-18 months, the gap between the. NET Framework features and equivalent Mono features is rarely an issue. In many cases, development teams do their initial development on Windows using Visual Studio. They may have a plan to use Mono for cross-platform support afterwards, or they may discover the need after delivering the application. But in reality, itâ€™s typically a year or more after beginning a. NET software project that Mono comes into play.
Mind you, Monoâ€™s goal is not to create an exact replica of the. NET Framework. There seems no point in that. Rather, Mono places a high priority on implementing in open source those components that are essential to let applications run on alternative platforms â€” and Linux in particular. This means that it looks at what features and libraries are required for existing. NET applications to run, and focuses on correct implementations of those.
One question people always ask is what happens to Mono if Microsoft decides to break compatibility and strike out in a different direction, and perhaps not support that direction as an industry standard. The chances of that seem very small.
Microsoft has a long history of ensuring legacy compatibility on new products. Indeed, some DOS programs still run on the latest versions of Windows, for example. In addition to potenitally annoying its customers, Microsoft also risks the public relations backlash in the industry at large of taking technologies it has established as a standard and making them proprietary.
But perhaps the most important consideration is that the Mono goal is not to compete with Microsoft in any way. Microsoft is focused on building the best development and runtime environment possible for Windows. Mono is to take the parts of the technology that have been accepted as standards and implement them on other platforms. While that may not be what Microsoft is trying to do with. NET itself, it is not contradictory to their goals.