En relación con la anotación anterior sobre muchos .jar, me ha llamado mucho la atención en Ubuntu el gestor de paquetes de Synaptic.
El sistema operativo Ubuntu más las aplicaciones que se instalan está formado por -no recuerdo el número- alrededor de mil paquetes/librerías. El gestor de paquetes mantiene un árbol de dependencias de estas librerías, de forma que sabe en todo momento qué tenemos instalado y qué librería depende de qué librería.
Cuando instalamos algo nuevo a través de este paquete, él sabe todas las dependencias de ese nuevo programa, mira si las tiene o si necesitan actualización y las instala o actualiza si es necesario. También sabe si hay paquetes incompatibles con el que vamos a instalar y nos pregunta si queremos desinstalar el incompatible.
Cuando eliminamos un paquete, el gestor de paquetes sabe qué paquetes dependen del que vamos a desinstalar y avisa que va a desinstalarlos también.
Si instalamos además el paquete deborphan, Synaptic será capaz de decirnos, además, qué paquetes tenemos instalados que nadie usa, de forma que podamos eliminarlos.
En fin, una pequeña maravilla para gestionar dependencias. Tú no tienes que gestionar nada, se gestiona solo.