What's Wrong With Setup.exe?

Ned Batchelder shares a complaint about the Mac application installation process:

This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/07/whats-wrong-with-setupexe.html

As others have pointed out over on Ned’s site, the case he gives is a fairly pathological Mac app. For most of the apps I download:

(a) the download is a direct download of a .dmg file, not of a .zip file containing it (or, as in this example, a .zip file containing a folder containing the .dmg file)

(b) my browser is set to automatically mount the .dmg file once it has downloaded.

So installation is two steps:

(1) switch to the Finder

(2) drag the application to the applications folder

(with an additional third step of entering an admin userid/password if the user is not an administrator).

And cleanup is one step: click the “unmount” (“eject”) button for the application’s disk image. Two if you count deleting the .dmg file.

But the real problem, of course, is the eternal tension between security and convenience.

Undeniably, the simplest possible interface for installing a downloadable app would be a web page with a button saying “Download and install ThisApp” which–when clicked–would handle the entire download and install process. You click on it, there’s a slight delay, and the application is sitting in your applications folder (Mac) or Start Menu (Windows), ready to go.

Of course, if a known, responsible developer were capable of doing this, then a somewhat less reputable individual would be just as easily able to put the download-and-install code behind a button that said “CLICK HERE FOR HOT PIXXXX!!!” and have it install any and all sorts of stuff you really never wanted on your computer.

Jeff, still the average setup.exe seems to me far superior to the “manual” approach. At least you can just keep pressing “next” 5 times in a row.
@Dirty Davey: it seems to me that a click-to-install approach wuold be doable provided that the user enters his credentials. Two steps is the right balance between security and convenience: I think click-once technology does something similar, but I haven’t played much myself.

I have a more cynical view. The installer is the last thing that any software engineer ever wants to work on. It’s the last thing that the designer wants to specify. It suffers from a pathological testing mentality: 99% of the time the tester wants to test some feature in the latest drop, and needs to get through the installer to get to it, so the tester gets in the habit of following only a single use case unquestioningly.

There’s no glory in creating the world’s best installer. In my experience, installer work is assigned to the most junior person in each group (development, spec/design, QA) and once it is minimally functional it is never refactored.

And if you thing installers are bad, check out uninstallers.

I have to say, this is on the extreme examples.

For example, I just installed Firefox 2.0.

  1. Download to my download folder using Safari
  2. Open download and drag and drop to my Applications folder


I prefer the Linux way… I click the little checkbox next to the package I want installed. Then I hit Apply.

Of course the Linux way is more burdensome if the application isn’t packaged by the distro.

What’s also nice is that uninstalling software is just as easy as installing it.

Strangely enough, Windows Mobile does exactly what you want. You download a .CAB file and run it. It automatically installs, doesn’t ask a single question, doesn’t make you accept license agreements, nothing.

As said above, your example of a Mac install is fatally (and, presumably, intentionally) flawed. It’s usually a three-step process to install the app: click the download, click the “show download” once it’s done downloading, drag application to Applications folder (which is often linked in the Finder window; otherwise click the little “lozenge” to show your side bar and drag it there … so I suppose that would be four steps).

The Problem With Installers: it’s not installing the application. It’s the configuration and setup that the installer does for you.

For instance, if you opt out of Visualization in the WinAmp installer, can you ever (after having used the application for a few seconds to figure out what the jargon means) opt back in? Does that involve re-running the Installer, or is it buried in the menus somewhere?

A Mac app offering optional extensions (and not using an installer; remember that Mac apps can use installers, and Apple even provides one free of charge) would usually guide the user through installing those extensions inside the application, which means the user can always go back to install them later if they decide not to at first, and more often than not they also know how to remove the options if they turn out to be more trouble than they are worth.

In effect, most Mac installs are the “one button” “accept all defaults” installs. If you want to deviate from the standard “install” you are expected to let your preferences be known in the app itself.

It’s a different way of doing things, yes. Windows is really hyper-big on “wizards”, and installation is just one example. In my opinion, though, most “wizards” are too stupid to do things right, and/or rely on the user to make decisions the user is incapable of making. Installers are no exception to that.

I believe that Mac mainly makes you go through “manual hoops” to have some sort of standard.

With “Setup.Exe” you will notice that there are thousands of different installer programs. Theres the standard Microsoft one, then each company does it’s own little thing. Most games come with a flashy one with all kinds of colors and buttons.

On Mac, it’s always the same process, and it always “looks” the same.

I believe that Mac mainly makes you go through “manual hoops” to have some sort of standard.

Yet it’s NOT standard-- what happens if I run the app from the current location (running it from the DMG) without dragging it to the applications folder? Or what if they drag it to the desktop and run the app from there?

Why make the user run through this meaningless, repetitive step if the installer could do it for them? Why not make it standard and reduce work for the user? I don’t understand why Mac users accept this with a reserved shrug of their shoulders and say “that’s just the way it is”, or worse, defend it as some sacred act of drag and drop busywork that somehow blesses the application.

Never mind that drag and drop itself is an utterly broken and user hostile GUI convention.

Yet it’s NOT standard-- what happens if I run the app from the current location (running it from the DMG) without dragging it to the applications folder? Or what if they drag it to the desktop and run the app from there?

Well, I’d say that there are a standard set of choices. The simplicity of the application design (a “bundle” with a .app extension) allows you to execute it from anywhere. I often download .dmg files to my Download folder and run them from there to try them out. If I don’t like them, I dismount and delete the .dmg. That’s much more difficult in Windows given the odds that the app may not have an uninstaller or the uninstaller won’t really remove everything the installer added (ever look at the crap in your registry, or in System32?).

But I agree that the typical Mac installation process, while fairly consistent, does not live up to the simplicity and ease-of-use that Mac on whole is known for.

“Never mind that drag and drop itself is an utterly broken and user hostile GUI convention.”

I would like further elaboration on what you mean by that. (I can’t even disagree because I’m not sure what exactly you mean by it :slight_smile:

It’s possible to package your application as an MSI that can be installed and uninstalled very simply. Problem is, most applications have requirements that either go beyond the default UI that an MSI allows (afaik), or the MSI ‘code’ is just too much of a mess to figure out. Even Paint.NET has requirements related to updating and internationalization that made writing my own setup wizard in C# a better idea. Plus, that way it’s dead obvious and simple to customize and fine tune everything about the installer.

I’m glad that Office 2007 has a much simplified installation experience. You insert the CD, click “run”, and then it eventually pops up with a big “INSTALL NOW” button. Then it just goes.

In Paint.NET (not to toot my own horn here – okay maybe I am a little!) you only have to click Next twice to install it: the first page defaults to a radio button for “Quick” (aka “Default”) installation, the second is for a simple EULA (MIT License), then it just … goes. I did this because I personally was getting tired of clicking through 3 pages of options over 10 times a day. And I thought, “Half the people who install this probably don’t understand most of the options. And, they probably don’t even care about them. Let’s go ahead and optimize for the most common scenario …”

However, that still can’t get rid of the wonderful prelude to installing that IE7 puts in front of you: click to the download page, click the yellow infobar, reload the page, click the download link again, click Open, wait 30 seconds, click OK on the warning dialog from IE, click OK on the warning dialog from Windows (“this came from the Internet zone, it might harm your cat!”), then click OK on the UAC prompt … and if you downloaded it in a ZIP file you’ve got another double-click in there.

I really dislike setup.exe-type installations. I hate not knowing what the installer is doing, for one. Is it copying a bunch of files all over the place? Where is it placing it? I’m gonna have to hunt for it later, and it’s placing shortcuts all over the map. Sometimes I can’t say ‘no’ to those. I’ve little knowledge (and honestly I don’t really care to spend the energy to investigate for every single app) about the automated process.

In the Windows world you have executables and DLLs and config files strewn about every which way, however the developer sees fit… I won’t even bring up the registry links, and other hidden files.

On the Mac side, a .app is a self-contained entity. So, Jeff, if you run an .app from within the mounted .dmg, it will work. Run it on the desktop? It will run. Preference files are kept in a standard location. By convention applications are kept in ~/Applications. Makes sense, no?

I like being in control of my system and knowing that I dragged that .app to my Apps folder. Don’t do it for me, and don’t make me click ‘Next’ 5 times, what a painful process.

“Yet it’s NOT standard-- what happens if I run the app from the current location (running it from the DMG) without dragging it to the applications folder? Or what if they drag it to the desktop and run the app from there?”

I hardly ever drag applications into the Applications folder. You can run it out of the dmg if you want to try it before committing more disk. I typically have a totally different directory to run apps I’ve downloaded out of.

This directory is available on every finder window so I typically just drag the icon a little to the left and I’m done. Getting wizards to allow me to change the install path is sometimes possible, but rarely easy enough that I actually bother putting things where I want them.

What was the point you were making here?

And can you be more specific about drag and drop being utterly broken? It seems to be useful enough for me in the applications where I use it and have implemented it.

I have been using a macbook for about a year now and I have to admit that at first installing applications slightly confused me. Now that I know your supposed to simply drag-n-drop I prefer the Mac’s approach. It allows the user to easily install the application where ever they want as well as give it a test run before dropping it in the application’s folder (if thats where they intend to install it).

Also, in the time it takes a user to click through license agreements and install options in a windows approach, a mac user may have already dragged and dropped their app in their intended folder. This is why I don’t find apple’s method entirely meaningless or repetitive.

I have to admit my opinion is slightly biased, I come from a gentoo linux background, which means I love to tweak and customize my installations until my fingers fall off.

For some strange reason I find installaion on OS X easier and ‘cleaner’ than on windows. Maybe because most setup programs ask too many questions and require to press too much “Next”.
Draging app to the Applications folder on Mac seems like blessing then (especially if .dmg provides handy shortcut “drag here”).
As for drag-and-drop: what were you smoking?

This is ridiculous…none of these are apples to apples comparisons. You can find good and bad installation experiences for any OS…

I love Portage (on Gentoo), its really well thought out. But have you tried installing KDE on that thing…?

On Windows, how many of us have run into apps that try to install into C:\Windows(\system32)? Complaining about 10 steps where closing every folder is a step? Try getting rid of Symantec’s internet security suite a few years back…that thing was effectively a rootkit (and might still be).

Fine, the Mac installation process isn’t perfect, and has a lot of folder opening and closing. But if you’re whining about opening and closing folders, I’d hate to see the state of your Documents folder. And the Mac model of the application-folder is generally better than the behavior of most Windows apps.

  1. Most applications on Mac are DMG files that mount automatically and bring up the application folder.
  2. Dragging the application wherever you like is a convenience - it bypasses the whole concept of file paths and gives the user something visually to work with. They may just drag it to a the desktop and then later drag into Applications if they like. Can’t do that on Windows (at least not until there’s more .NET penetration).

You’re articles are almost always insightful and packed with understanding, so I don’t understand the recent Mac OS hostility backed with fairly dubious facts of late.

Also, the rise of Windows Installer based MSI files and OneClick means that Setup.exe’s days are numbered anyway.

I agree about the linux install: any application targeted at beginners is generally included in the distro… and installing a program is as easy is checking the box next to it and clicking ‘apply’

Some of this might be redundant, but it took a while to write. And it’s long. So sue me.

Unless you’re using an application that requires you to put support files in the /library/ folder or elsewhere besides the user’s library, you can use the application from anywhere. You can, in fact, run Firefox from the setup disk if you want to. The application will stick the support files it needs in my user library. Some of the additional components may not work, because they need to write to disk, and that’s not possible with a read-only disk.

The Applications folder is another misnomer. Unless there are specific application-specific dependencies, you can run any program wherever you want. They merely suggest the Applications folder because…you know…that’s where everything else is.

I should also point out you’re not installing Firefox when you drag that folder over — you’re installing the Firefox.app package. It’s just a special kind of folder that runs when you click it. On Windows systems, there’s an *.exe file that runs the program with a zillion support files nobody really knows where goes.

As far as the complicated setup procedure, in the middle of this page you’ll see what the typical user sees in the Finder, the place to get files (third image down):


Now imagine, if you will, the next-to-the-last image being there, with a removable disk there. The default settings will have the user drag the application file over to the sidebar to drag-and-drop onto the Applications folder, then can eject the disk using the eject button you seen in that next-to-the-last image.

Here’s the problem with Windows installers: they all look the same. They are so uniform in appearance, actually, that you could create an Internet Explorer webpage that closely resembles the installer.

Or, you could make an installer that doesn’t install what it says it does where it says it does. I’m sure that’s never happened before, an installer putting rogue programs willy-nilly all over everywhere.

Because its difficult to tell what goes where, I’m a little scared every time I install some new program. Last week I tried out GreatNews, just to see what the buzz was, and I have no idea what went where. I’m a typical Windows users, sadly, so I don’t know where the latest program files and dll files go.

While it’s nice to get that OKRecommended SetupFinish, but at least I know what I installed on my Mac.