Software Installation is an area that has many issues, and for a variety of reasons. I have but one reason how this can be: Developers suck and very few possess any foresight. It baffles me on at least a weekly basis, how a person or team of people can be smart enough to write a functional application on any platform, yet be so stunningly ignorant of the environment in which their applications will be running. They build registration data into installers. They put registry keys in place at install time, with no heuristics in-program to handle things in the event they’re not there. I could go on for a while… Everybody is guilty of it, from the biggest shops (Microsoft, Adobe, Autodesk), all the way to some open source projects.
I have seen immensely complicated applications, that have stellar install experiences. And I have seen painfully simple applications that require me to rip them out of their installer and package them sanely in order for us to deploy them. There are exceptions to almost every rule, but here are a few tips for any developers, Mac or Windows:
- Installers should not be handling any interactive product registration / serial numbers. You fucking jerkwits.
- You don’t need to restart the computer. Really.
- You don’t need me to log out and back in either. Really.
- Installers should need to do 5 things:
- Preflight: stop processes/services, etc.
- Pre-install: gather any necessary data, set environment variables, etc.
- Unpack files and/or registry keys, dump to their right locations
- Post-install: build any on-the-fly things using utils you just installed, etc.
- Postflight: restart any processes/services, etc
- If you’re doing more than this in your installer, you’re doing it wrong.
- Installers should have a silent option. Yes, it really is necessary, you lazy tool.
- You should NEVER have to write your own fucking installer.1
- Installers should not be handling any interactive product registration / serial numbers.
- You don’t need me to quit my fucking web browser, or any other programs. Really.
- If you insist on some kind of stupid idiotic compression or container format, then extract to a TEMP space, and clean up after yourself.
- Installers should not be handling any interactive product registration / serial numbers.
- Installers should not do anything that is dependent or tied to the current user. Including interactive product registration / serial numbers.2
The entire concept of requiring an installer is one centered around the clusterfuck that is Windows. In the best case scenario, the above installation steps could be reduced to one: Unpack Files. More complicated programs SHOULD only require 3: Preflight, unpack files, postflight. Some packages like Java, for instance, would require at least those two scripting steps, to search for existing versions, modify the registry as necessary, etc.
Mac-side, any program that has progressed to the point of not being a drag-and-drop .app bundle, and is looking at doing some form of “installation” needs to step back and take a serious look at how their app is structured. If you’re including a lot of secondary content, or installing frameworks used by multiple applications, etc., you’re exempt from this, of course.
1. On writing your own installer:
Using your Application should be a unique experience. Installing it should be something consistent, and should happen at the OS level. 90% of software should not NEED admin privileges to run. That includes your stupid ass installer. Build an MSI or a PKG, and if that proves too challenging, save us all some trouble and start flipping burgers. If you can’t comprehend how an installer package should work, or why your application should be able to be installed by one, we’re better off without your shitty software anyway.
2. On doing things that muddle with the current user:
When you start doing stupid things at install time, like creating configuration data, etc., that is all per-user, you’re breaking automated installs, making your software impossible to deploy in large environments without a lot of administrator time invested. Anything that is user specific needs to be handled by your app, either at first run, or on demand, and not at install time. If you demand the ability to handle per-user product serial numbers and provide no way to do per-machine serials, you’re an idiot. If you don’t provide a way to automagically install a serial number, either via a license file, MSI / installer parameter, dumping it into a registry key, <whatever>, you’re an idiot.