General Requirements for a Software Distribution Mechanism
Introductory Notes
This document was originally written by Scott Thorne to record decisions
made at a 9/19/95 meeting of I/S and other MIT people interested and
knowledgeable about software distribution issues. It has been editted
for readability by Jim Repa, 7/15/96.
Software distribution issues are divided into three components here:
(1) version control, (2) distribution, and (3) installation. We discuss
general requirements and concerns for these three areas, to serve as a
starting point for choosing software or recommending techniques for
implementing software distribution mechanisms. Another document lists
more specific guidelines for developers writing installation scripts.
(See Installation Guidelines.)
Original Document Based on the Meeting of 9/19/95
We agreed that version control, distribution, and installation
were all separate, but related problems. If we keep them uncoupled we
will be in a better position to combine solutions in various ways.
(EX: If we agreed on an installation mechanism, we could use several
different modes of distribution, such as FTP, WWW, and Mandarin). We
really are concerned with Mac and Windows here, and should not worry
about Unix for the time being.
DISTRIBUTION
REQUIRED features and capabilities:
- Provide an easy way for users to get new applications (and all
associated pieces) and new versions of applications as well as
documentation , etc., for all software both internally-developed and
commercial.
- Be able to distribute more than one version of the same application,
at the same time for exception cases, where installation of the
current application would cause other things to break. Supporting
the distribution of more than one version of an application will
facilitate the distribution of alpha and beta copies as well.
- Be able to restrict distribution to "on Campus" people
- Not force people to upgrade at inconvenient times.
- Make sure that anyone who has a need to distribute software across
multiple departments has an easy way to distribute software (not just
IS software).
DESIRED features and capabilities:
- Keep as few copies of the binaries as possible (preferably 1), so
that they are easily kept in synch, and the "official" binary is easy
to identify, even if we provide several transportation mechanisms (Ex:
FTP, Techinfo, appleshare...) NOTE: If we don't solve this with a
technical solution, then we will require some human resource to do
this.
INSTALLER
REQUIRED features and capabilities:
- Make sure there is an easy way to deinstall.
- Ability to remove every component installed by previous
installation process. (required)
- Ability to put back everything changed or erased during previous
installation process. (desirable)
- Log of all components added, changed, or removed. (required)
- Be able to install more than one version of the same application,
at the same time except in cases where installation of multiple
copies of the application would cause other things to break.
- Be able to install all parts of the software in the correct places
and edit INI files (for example) as needed.
- Support the ability to avoid overwriting existing files such as
DLLs without checking versions (or asking the user).
- Behave differently Installer needs to be able to do different things
depending on hardware/software status and configuration or questions
answered by the user. (Example: Check disk space, operating system
level, type of CPU, etc.)
DESIRED features and capabilities:
- Installer should log what it does.
- There should be one installer for each platform, but it need not be the
same for all platforms.
- Installation script should be able to clean up after an error.
VERSIONING
REQUIRED features and capabilities:
- Know when a new version is available or when a piece software is
out of date.
- Support several states for updatable software, such as required,
recommended, and optional.
DESIRED features and capabilities:
- Check version at runtime.
- Check the version of everything on a whole machine.
- Each Component should be able to identify its version.
- Check that everything needed to run an application is available at
startup.
MISCELLANEOUS
- We should maintain a database of all applications and their components
and dependencies
- We may need to solf the "bootstrap" problem if special software is
needed for the distribution mechanism.
- "Mechanisms for license or counting uses, etc., are considered outside
of the scope of the software distribution requirements."
- We need some way of checking to make sure that the binaries haven't
been tampered with. For now this could be done out-of-band through a
cryptographic hash/digest algorithm such as MD5 or SHA. Eventually
this function might need to be built into the installer.