1. A computer-implemented method comprising: receiving, at a computer system, a first version of a software program; associating, with the computer system, the first version of the software program with a first type of computing device; providing a plurality of versions of the software program including the first version, wherein the plurality of versions of the software program are simultaneously available and each version is associated with a different type of computing device; receiving, at the computer system and from a user of the software program, information that defines capabilities of a computing device of the user; determining, from by analyzing the information that defines capabilities of the computing device of the user, a particular type of the computing device of the user; based on the determining, selecting a version of the software program associated with the particular type of computing device; and providing the selected version of the software program to the computing device of the user.