I want to clarify some differences between desktop systems, development environment and production systems. Although every mature operating system can serve in all three roles, there is still a lot to consider in picking the best operating system for a particular job. A good desktop system is up to date to the latest trends while stable enough not to break your habits. Updating works without hassles and is usually done in the background. All in all, you don’t have to take care of it and enjoy working in a distraction free environment. A development environment can be either a stripped down desktop or a blown up production system. Since the state of the machine plays an important role during compilation and testing, all (automatic) updates should be disabled and the regular cleanup of the environment should be as strict as possible. After all you don’t want to chase a bug in your code while in real it’s a changed shared library. Finally, a production system is the minimal system required to run your production code. Minimal doesn’t mean “barely adequate”. The administrative tools should be hand picked and identical across all production machines on this site. Logs and other system information should not be diagnosed on the live system but sent to a dedicated host for backup and analysis. Every software not needed for system operations or by the production software is considered superfluous and should be deleted. Especially all compilers and not needed script engines. Although these guidelines are straight forward and don’t favor one of the three categories it is amazing to see which emotions are connected to them. For example, just Mac OS X and Windows battle for the desktop system, other OS being very careful in their ambitions into this region. Or the fact all Linux distributions want to be “server grade”.