Wednesday, December 19, 2007

Why Linux apps are easy to install

I was just thinking about how much easier it is to install something in Linux than it is for Windows. Windows apps have gotten better (remember Office 2000, MSDE?), but most everything for Linux installs with no end user effort, and works on first try. This baffled me for a long time.

Here are some of the reasons why:
1) Most everything on Linux is free to distribute and even reverse engineer. This doesn't mean distributing or reverse engineering makes things easier. What it means is no stupid copy protection that isn't tested or well designed. No having to enter a 40 digit key in a password-like field you cannot read only to find out you need to type the dashes. No having to defeat security on a legit install that was meant to stop piracy. No need to call Microsoft on the phone or activate over the internet. All of these things can be done well, and sometimes they are, but usually I think they are designed by the lowest programmer on the project as an afterthought under pressure to do a release.

2) External dependencies. My biggest problem writing installers is lack of
understanding (or apathy) by the developer team for what dependencies the program uses. I frequently hear "InstallShield can do that for us". No it cannot. And even if InstallShield could perfectly identify and package dependencies, who handles tech support for bad situations? Can InstallShield do that?

The big difference with Linux is a Windows install is written to run by itself on a fresh a machine, and contains copies of every dependency it uses. If any of these are shared with other Apps or usable by themselves, whoever wrote the app most likely isn't thinking about how to install them so they work with anything other than the app they wrote. Try installing 2 apps written this way and you may need to reformat. This did get better with XP, but only by restricting the installer developers.

Linux installs just contains what the programmer wrote, so they are much smaller, and many distros have the ability to automatically identify and download dependent packages. These dependent packages are written and maintained by the people who wrote them, rather than the team writing the app that could care less.

3) Linux apps have no options on what to install. A Linux module being installed is a binary thing - it is either installed or not installed. Windows apps give you lots of horrible choices on what to install, the worst of which lead you to believe you succeeded only to prompt you randomly later for the disk you installed from. This is a direct result of the size issue in 2).

4) Linux apps are configured after being installed. Windows installs need a babysitter - you cannot walk away, it may ask you for options at any point. There are hundreds of choices. Linux just installs, you can walk away, and you can change your mind on configuration later.