Am I right when I assume that it's usually insecure to specify maximum (or exact) versions of a library in project's requirements?
Dipende.
Se il requisito è dovuto a una possibile modifica dell'API nelle versioni successive, questo requisito ha senso. Troverete spesso che le applicazioni Java richiedono una versione specifica di Java poiché ci sono molte piccole modifiche tra la versione di Java che potrebbe (non necessariamente) interrompere l'applicazione. A volte il requisito dice solo con quale stack software è stato testato e che non verrà fornito alcun supporto se utilizzato con un altro stack software.
È brutto e insicuro se questo requisito significa che non è possibile aggiornare lo stack del software in caso di vulnerabilità.
... most Linux package managers that basically "force" developers to port their software to new versions of libraries.
Non proprio. La maggior parte delle distribuzioni Linux non impone la nuova libreria in caso di vulnerabilità con la versione precedente, ma invece tenta di riportare le correzioni dei bug alla versione precedente. Solo quando vengono rilasciate nuove distribuzioni includono versioni più recenti dello stack software, ma spesso includono anche versioni precedenti per fornire al software esistente le (più vecchie) librerie di cui hanno bisogno.
Alla fine ogni sviluppatore ha solo un tempo limitato per testare e quindi il test viene eseguito solo con alcune variazioni dello stack del software. E la maggior parte degli sviluppatori non ha il tempo di adattare e testare il proprio software con ogni nuova versione di una libreria o di un linguaggio di programmazione ecc.