a piece of computer software that can be added to a system so that it can do more things