Между библиотекой и фреймворком есть сходство, и то и другое — это ранее написанный код, который программист использует в своей разработке. Академическое отличие же состоит в инверсии управления.
Когда программист использует библиотеку, он пишет код, из которого в свою очередь вызывается код библиотеки. Когда же программист использует фреймворк, ситуация обратная — код написанный программистом вызывается из кода фреймворка.
Также среди отличий выделяют расширяемость, наличие поведения по умолчанию, закрытость кода фреймворка для модификации. Другие параметры (размеры, предназначение, архитектура и т.п.) — это уже частности, не являющиеся принципиальными отличиями.