I think that at some point, "Framework" became a dirty word, and I haven't noticed until now. From Guido's blog:
I notice that he describes what makes a good library good, but
there is no mention of what a good framework might be. The implied
conclusion, of course, is that there is no such thing as a good framework -
once you're a framework, you've gone off track and created something that
isn't very useful, and you should turn around and go implement a library.
Guido is not the first person I've heard make this assumption, but he is the
first person I'm inclined to take seriously.
My understanding of the distinctions between "frameworks" and
"libraries" is that frameworks, in general, tend to call your code through
callbacks, whereas libraries don't need to call your code. Under that
definition, all existing GUI-building tools would be "frameworks", but
nobody calls them that, the convention in the GUI world is to call them
"toolkits". The convention in the business software world seems to be to
call them "application servers".
I'm not sure that the definitions of these terms are generally accepted,
though. FOLDOC says a framework
is "a set of classes that embodies an abstract design for solutions to a
number of related problems", and a library is "a collection of
subroutines and functions stored in one more files, for linking with other
programs". Neither of those definitions say anything about what code calls
what other code, or how such things are designed. In fact, the way that they
are presented there, the terms are nearly synonymous in the context of
I think that regardless of terminology, all software has the obligation to
be minimal in size while maximal in features. Also, software should be
incredibly fast and well-documented, and user-friendly. Of course it's
usually impossible to be all of those things; the design
constraints imposed are a complex fusion of the application domain and the
However, in light of the growing acceptance of the word "framework" to mean
"a really bad library that started out as an application", maybe we should
stop calling Twisted a framework. What's a better word? "Toolkit"?
"Environment"? "Integratotron"? Discuss.