Tatsächlich können diese Begriffe je nach dem Kontext, in dem sie verwendet werden, eine Menge unterschiedlicher Dinge bedeuten.
Unter Mac OS X zum Beispiel sind Frameworks nur Bibliotheken, die in ein Paket gepackt sind. Innerhalb des Pakets finden Sie eine tatsächliche dynamische Bibliothek (libWhatever.dylib). Der Unterschied zwischen einer bloßen Bibliothek und einem Framework auf dem Mac ist, dass ein Framework mehrere verschiedene Versionen der Bibliothek enthalten kann. Es kann zusätzliche Ressourcen enthalten (Bilder, lokalisierte Strings, XML-Datendateien, UI-Objekte usw.), und sofern das Framework nicht für die Öffentlichkeit freigegeben ist, enthält es in der Regel die notwendigen .h-Dateien, die Sie zur Verwendung der Bibliothek benötigen.
So haben Sie alles in einem einzigen Paket, was Sie brauchen, um die Bibliothek in Ihrer Anwendung zu verwenden (eine C/C++/Objective-C-Bibliothek ohne .h-Dateien ist ziemlich nutzlos, es sei denn, Sie schreiben sie selbst gemäß einer Bibliotheksdokumentation), anstelle eines Haufens von Dateien, die Sie hin- und herschieben müssen (ein Mac-Bundle ist nur ein Verzeichnis auf Unix-Ebene, aber die Benutzeroberfläche behandelt es wie eine einzelne Datei, ähnlich wie Sie JAR-Dateien in Java haben, und wenn Sie darauf klicken, sehen Sie normalerweise nicht, was sich darin befindet, es sei denn, Sie wählen explizit aus, den Inhalt anzuzeigen).
Wikipedia nennt Framework ein "Modewort". Es definiert ein Software-Framework als
Ein Software-Framework ist eine wiederverwendbare Entwurf für ein Softwaresystem (oder Teilsystem). Ein Software-Framework kann Unterstützungsprogramme, Code Bibliotheken, eine Skriptsprache oder andere Software, die bei der Entwicklung und Zusammenfügen der verschiedenen Komponenten eines Softwareprojekts. Verschiedene Teile des Frameworks können durch eine API.
Ich würde also sagen, eine Bibliothek ist genau das: eine Bibliothek. Es handelt sich um eine Sammlung von Objekten/Funktionen/Methoden (je nach Sprache), und Ihre Anwendung "verknüpft" sich mit ihr und kann so die Objekte/Funktionen/Methoden verwenden. Im Grunde handelt es sich um eine Datei mit wiederverwendbarem Code, der in der Regel von mehreren Anwendungen gemeinsam genutzt werden kann (Sie müssen also nicht immer wieder denselben Code schreiben).
Ein Framework kann alles sein, was Sie bei der Anwendungsentwicklung verwenden. Es kann eine Bibliothek, eine Sammlung vieler Bibliotheken, eine Sammlung von Skripten oder jedes Stück Software sein, das Sie zur Erstellung Ihrer Anwendung benötigen. Framework ist nur ein sehr vager Begriff.
Hier ist ein Artikel über einen Mann zum Thema " Bibliothek vs. Rahmenwerk ". Ich persönlich halte diesen Artikel für höchst fragwürdig. Es ist nicht falsch, was er dort sagt, aber er wählt nur eine der vielen Definitionen von Framework aus und vergleicht diese mit der klassischen Definition von Bibliothek. Er sagt z.B., dass man ein Framework für Sub-Classing braucht. Wirklich? Ich kann ein Objekt in einer Bibliothek definieren, ich kann es mit ihr verknüpfen und es in meinem Code unterklassifizieren. Ich wüsste nicht, wieso ich dafür ein "Framework" bräuchte. In gewisser Weise erklärt er, wie der Begriff "Framework" heutzutage verwendet wird. Wie ich schon sagte, ist es nur ein gehyptes Wort. Manche Firmen veröffentlichen einfach eine normale Bibliothek (im Sinne einer klassischen Bibliothek) und nennen sie "Framework", weil es schicker klingt.