Bibliotecas Dentre as diversas boas práticas de desenvolvimento de software está o reuso. Trata-se do velho ditado de não "reiventar a roda". Quando um conjunto de rotinas/funções/métodos de software compreendem uma funcionalidade em particular, uní-las em uma biblioteca que possa ser reutilizada é uma boa prática. Por exemplo, quando um reprodutor de áudio é desenvolvido, partes do software são escritas para decodificar os diversos formatos em que áudio é codificado hoje em dia. Decodificar áudio, no entanto, é útil para softwares diferentes de reprodutores de áudio, como editores, analisadores, tratadores, conversores, etc. Portanto, escrever o decodificador apenas uma vez em forma de biblioteca para que possa ser reutilizado nesses vários softwares é mais interessante que reescrever o decodificador para cada software. Bibliotecas Compartilhadas Entre as várias maneiras de reutilizar essa biblioteca é, em tempo de compilação, incluir o código em seu software. No entanto, isso significa que cada software que utilize a biblioteca inclui uma cópia em disco e, no caso de sua carga, em memória do código da biblioteca. O compartilhamento dinâmico de bibliotecas permite que cada software compilado faça as referências necessárias ao código da biblioteca sem, no entanto, incluir o seu código. Dessa forma, a biblioteca é buscada e carregada pelo carregador de programas. Assim, espaço em disco e, eventualmente, em memória, pode ser compartilhado entre os vários programas que fazem uso da biblioteca. Outra possível vantagem do compartilhamento de bibliotecas é a atualização da biblioteca, independente da atualização dos softwares que a utilizam. Versões de Interfaces de Bibliotecas Um cuidado muito importante, no entanto, na atualização de bibliotecas é que os softwares utilizam interfaces definidas pela biblioteca, que chamamos de API (Application Programming Interface) e ABI (Application Binary Interface). Se a ABI de uma biblioteca muda, é necessário a recompilação do software. Se sua API muda, é necessário a atualização (modificação) do código do software. Portanto, veremos que a atualização de bibliotecas não pode ser feita sem tomarmos o devido cuidado de verificarmos a necessidade de recompilação ou atualização dos softwares que a utilizam.