La maggior parte di questi termini è diventata molto ambigua.
"Libreria" è la più semplice. È solo un codice di utilità che risiede sul tuo computer, progettato per essere utilizzato da applicazioni o altre librerie. Potrebbe essere una libreria standard fornita con il compilatore / interprete o potrebbe essere una libreria di terze parti. Alcune librerie "pure" sono scritte solo nella lingua dell'utente, ma le librerie possono contenere DLL, SO o altri componenti di codice nativi.
"API" è talvolta usato per riferirsi a semplici vecchie librerie, meno l'implementazione. OpenGL è un'API, mentre Mesa è una libreria che implementa l'API OpenGL. Spesso, sebbene non sempre, viene utilizzato per descrivere le specifiche delle routine che, quando chiamate, devono comunicare con un ambiente esterno. Quell'ambiente esterno potrebbe essere il kernel ISR (nel caso di chiamate di sistema) o internet (per le web API), o servizi localmente attivi, ecc.
"Framework" è un termine molto ampio. Può fare riferimento a una libreria semplice, come nel "Java Collections Framework". È più spesso usato per riferirsi a librerie che impongono una certa struttura alle applicazioni che le usano, come i quadri MVC (Rails, Zend Engine). Può anche fare riferimento all'architettura di una grande applicazione modulare, come Eclipse o Drupal. Infine, può essere utilizzato per fare riferimento a un intero ambiente di esecuzione, come in ".NET Framework" che include il CLR e la libreria di classi.
"Runtime system" viene in genere utilizzato per fare riferimento a un interprete o all'architettura di una macchina virtuale. Per i compilatori nativi, può anche essere utilizzato per fare riferimento a una libreria di runtime che fornisce funzioni integrate. (Non so perché la "libreria di runtime" sia così denominata, di solito sono collegate staticamente.)