A common roadblock that IT shops facing when migrating to Linux is porting existing applications to Linux. Are there any guidelines for which applications can and can not be ported?
Gopi Kumar Bulusu: If an application can be ported to some version of Unix, it is safe to assume that it can be ported to Linux. In general, most applications can be ported to Linux. Where there is a choice of continuing to use both Linux and another (the original) platform, it is a good idea to port applications in a prioritized manner. The priority would depend on the main reason for migrating to Linux.
In general, those applications that are primarily developed in C, C++ and SQL can be ported first. This is not only easy, but will quickly build confidence in the migration plan.
So, what applications should be ported in the second phase?
Bulusu: Applications developed using visual programming languages like VB can be ported next. It may be necessary to use appropriate tools to automate the conversion of VB to either C++, Java, Tcl/Tk or Python. Irrespective of the choice of the newer language, this is a nice opportunity to move towards model driven development, using a language like UML for modeling the application and generating the actual code either manually or automatically using a rule driven tranformer or code generator.
Primarily client applications developed using visual languages will need some re-engineering for porting to Linux.
For Applications developed using COBOL or other languages, make sure that your compiler and version are available on Linux from your vendor. If they are, then porting these applications can be done next. If not, such applications may have to be ported to either C++ or Java. Again, it is a good idea to go for model driven development when moving over to a new language.
What's the hardest thing about porting applications from Windows to Linux?
Bulusu: In general, the most difficult thing when porting applications from Windows to Linux is porting the GUI code. There are free as well as commercial cross platform GUI libraries which make this manageable.
What open source tools (like compilers) do you use when porting applications to Linux? Are any of them universal? Can they be used anytime you're porting an application?
Bulusu: The most common tools used when porting applications to Linux, or more accurately GNU/Linux, are GCC (GNU Compiler Collection) C, C++ compilers, binutils (the assembler, linker and other object file utilities) and the gdb debugger.
These tools are available on most popular operating systems and can be used for porting almost any C or C++ application. GCC can also be used for porting applications developed using other languages like Java, Objective-C and Ada.
Which Linux distributions have the best tools for porting?
Bulusu: There is not much difference between the various Linux distributions in terms of ease of porting as far as tools are concerned. The larger distributions tend to pack together more features and may make it easier to get a particular library required to complete the port.
How long a particular release is supported by the vendor and quality and price of support for the GNU tools is a lot more important and should be considered when selecting a distribution of Linux.
What's the role of source-level debugging in porting applications?
Bulusu: Every application is designed to produce a particular, correct behavior including specified output, when executed with a particular set of inputs. When an application being ported does not conform to such expected behavior, additional analysis is normally required to understand the cause of such incorrect behavior. Source-level debugging is a valuable tool for identifying and resolving defects discovered or introduced during the porting process.
Source-level analysis using a debugger on the existing platform also helps a programmer understand how a particular function is used, the actual arguments passed to a function and values returned from a function. Such analysis can be used to improve comments embedded in the code or implementation notes, which results in making the most optimal porting changes.
Why port applications at all when migrating to Linux? Why not just get new applications?
Bulusu: Good question. In fact, asking your vendor for a Linux version of the application may just work. It is possible that you may even be able to get a free side-grade of your application to Linux. However, if you have a custom application with no similar application available off the shelf, you may have to port the application.