Note:- If you are a .Net developer you can straight away skip this post.
At Compassites we have projects getting developed using Ruby on Rails, Java/J2EE and .Net technologies. The development environment for the projects on Ruby on Rails and Java/J2EE are all open sources that can run on any operating system. Gone are those days when UNIX/Linux environments were only suitable for production environment. The main reason given by the software engineers who were addicted to the Microsoft environment was the usability of the system and the difficulty in using a command line based environment. But now Linux has penetrated the desktop environment and is making significant improvement. The level of usability and ease of use is on par with what Windows offers. The biggest plus is they are open source, free or with a very nominal fee.
We decided that we have to leverage this and slowly started migrating development environment to Linux desktop environment. While a Google search will give you links to several Linux desktop environments, we decided to go with Ubuntu as our desktop OS because of the simplicity in installation, configuration and very good usability. The following is a typical development environment setup that our developers on Ruby on Rails or Java/J2EE projects. All of them are open source and is available for almost all major operating environments.
Sun Java SDK - Java Runtime support
Ruby on Rails - Ruby and Rails programming environment
Eclipse IDE - Open Integrated Development Environment
RadRails Eclipse plugin - Rails Coding on Eclipse IDE
Subclipse - Subversion management from within Eclipse
Apache Ant/Maven - build and deployment automation
Apache web server - serve static contents of web application
Apache Tomcat application server - run J2EE applications
JBoss application server - run J2EE applications
WEBrick (Ruby library no separate installation required) - run Rails applications
Open Office (comes with Ubuntu) - Office applications
Firefox browser - Web application testing
A dedicated Linux box runs the following and is used by all the projects.
Apart from the above we have few more Linux boxes that run the applications for development testing and QC.
One caveat that we faced was the developers testing the web applications on Internet Explorer (IE). Since IE is still a major browser used by the internet community, testing the applications for compatibility is a must. A Google search on IE on Linux will result in the top sites that mainly talk about the open source software IEs 4 Linux and/or Wine. Wine is an Open Source implementation of the Windows API on top of X and UNIX. It basically cheats the windows based software to think that it is running on a windows environment (you can see folders like drive_c/program files/internet explorer/ etc being created under the installation directory). We tried using Wine and installed IE 6 on Ubuntu. But we were not happy at all because it was not close enough to how the application looked on a real IE on Windows. Finally we resorted to dedicating couple of Windows boxes that were enabled with remote login. Using the Terminal Service Client program in Ubuntu, developers were able to login to the windows systems virtually and test the applications on Internet Explorer. This has been working quite well and we are happy.
The other caveat is importing the existing mails from Outlook. This was a problem for only the developers who started with Windows and had to be migrated to Ubuntu. New joiners straight away started with Evolution or Thunderbird. Evolution or Thunderbird does not import the CSV/tab separated file exported from Outlook. If any one has any insights on this please do send a mail to me.
Why a Linux based desktop environment? The following are the advantages a Linux desktop based development environment brings.
- The ultimate production environment is a UNIX/Linux environment and it is better the environment be similar from the development. When I mean environment I mostly mean about the file system. This already solves indifferences like the file separator (Windows \ vs. UNIX /) problems and the text encoding (PC by default in Windows and you can see ^M characters for end of line when transferred to a UNIX system). Usually there will be images folder that contains the images used by the web application. In a windows environment if a developer opens this folder in explorer’s thumbnail display mode, windows creates a file called Thumbs.db. Windows uses this to cache information about the images so that it can display the thumbnails fast next time you open the same folder. This can be disabled through the folder options but usually is unnoticed by a developer because it is a hidden file. I have seen this file go all the way into the source control and up to the production environment. Of course all these are really not showstoppers and the application would run in the production but I think it is a matter of discipline and keeping the production environment clean.
- The strength of a UNIX/Linux system is the file system and the security. The chances of a UNIX/Linux based system getting affected by virus is almost zero. This means there is no need for an anti virus software. That means added cost savings apart from the operating system license costs.
- The third key advantage is to get used to working on UNIX/Linux environment. Working on a UNIX/Linux environment is fun. It could be hard initially to work with particularly if you are addicted to Windows but as you keep working you will know what I mean and it is difficult to get away from it. This also helps in working in a production environment and handling hosting and maintaining the application in the production environment.