A _______ is a collection of software routines that can be used by other software. Licensing terms for this type of software are important for programmers who use the software.