Introduction
The purpose of this article is to provide the reader with a brief overview of what is involved in moving from a Windows environment to a Linux environment. Specifically, the idea is to help developers that have been developing Windows-based applications get a base understanding of Linux and issues surrounding the running and/or porting of their applications so they can move forward with any Linux project they may have.
When we talk, as a developer, about moving to a Linux platform we are either:
Trying to get an existing application that was developed for Windows to run in Linux with little or no new development, or
Planning on porting our code from Windows-based API's and libraries such as MFC to a Linux equivalent such as GNOME.
The issue of porting a Windows application to Linux will be handled in future articles on this forum. Here we will discuss the initial considerations regarding how to move an existing Windows application to Linux.
Transferring Platform Options
Even the topic of how to move existing applications can be divided up into a few different discussions. For example, the development language is obviously a critical determinant in whether a Windows application will run on Linux.
If your application has been written using Java, you will likely find that your application will work very smoothly on Linux. There may be some configuration and tweaking issues that you will want to consider, but since the JVM does exist on Linux, you should not encounter any difficulty running your application. An article has been written on this site, Porting Java applications to SUSE Linux", that deals with many of the issues related to running Java applications on Linux.
Another option is that your application was written using .NET (C#, VB.NET, or some other managed language). If this is the case with your application, then you are in much the same situation as are Java developers. There is an open source project, The Mono Project, that has implemented the .NET Framework allowing .NET applications to be run on Linux and Unix platforms. A future article at this site will discuss this in more detail, but in essence this is possible because The Mono Project has implemented the Common Language Runtime (CLR) engine ( the .NET equivalent of Java's JVM). So an application written using a managed language like C# will many times run as well on Linux as it will on a Windows machine.
A third option is that the application was written using C/C++ and that is uses the Windows specific Win32 API's that are obtained from Microsoft. Surprisingly enough, many of these applications may even be able to be run on a Linux machine without modification. This is thanks to a Windows application execution environment called WINE. The use of WINE is also discussed in another companion article at this site.
Getting Started on Linux
Most developers find that to truly make the switch to Linux development, they need to switch their desktop to Linux. There are options all the way from the drastic choice of turning off their Windows machine and installing Linux as their only desktop OS, to that of setting up a dual-boot environment to accommodate both environments, to that of installing Linux in a VMWare image that can be executed from the Windows desktop. The benefit of making the full switch, aside from not being required to purchase a Windows license, is that the developer will acclimate more quickly to the Linux way of doing things rather than constantly switching between the two mental paradigms of Windows and Linux.
Coming Up-To-Speed on Linux
A number of resources exist for Windows developers that can be used to learn the basics of Linux. One of the better resources, at http://www-106.ibm.com/developerworks/linux/library/l-roadmap.html, goes through a nine-step process of discussing the similarities of Linux and Windows (both are multi-user, have file systems, can run applications as services, etc.) and most specifically the differences between the two. Some of the obvious differences that are covered include: the GUI's, how to work in the Linux console, how applications are installed, etc. This is a great place to start for the developer that is new to Linux and wants to quickly ramp up.
Another helpful site, http://www.tldp.org/HOWTO/DOS-Win-to-Linux-HOWTO.html, may be useful as well, particularly for those who want to see some of the differences between the DOS and the Linux console commands.
Lastly, the site at: http://www.mozillaquest.com/indexes/Linux4Windows_index.html, is another series of articles intended to help the average Windows user move to the Linux platform.
Summary
It may seem, on the surface, like a daunting task for a developer to move their application from Windows to Linux. Hopefully, after reviewing this article, it is clear that options are available to make the task as easy as possible. While this is merely an abstract, over the next few months it is our intention to cover many of the important aspects of porting Windows applications to Linux in much more depth.