Software that can be used in applications other than the one for which it was originally written is called