What is the difference between a framework and an SDK? Take, for example, the MS platform SDK and the .NET framework. Both have API\'s, both hide their inner workings, and bot
Microsoft SDK could be used by a developer to create their programs. Final users normally do not need it.
Microsoft Framework instead is mandatory if you want to run .NET applications on a machine.
In one comparison, you could say:
Library -> Framework -> SDK
Framework consists of several Libraries, plus some tools (compilers, etc), and does not target a specific platform. For a platform, there might be several frameworks developed each serving a different purpose.
SDK offers you frameworks and everything else you need for developing software for a specific platform.
I'll just copy from Wikipedia:
Library:
A library is a collection of subroutines or classes used to develop software. Libraries contain code and data that provide services to independent programs. This allows code and data to be shared and changed in a modular fashion.
Framework:
A software framework, in computer programming, is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code providing specific functionality. Frameworks are similar to software libraries in that they are reuseable abstractions of code wrapped in a well-defined API. Unlike libraries, however, the overall program's flow of control is not dictated by the caller, but by the framework. This inversion of control is the distinguishing feature of software frameworks.
SDK:
A software development kit (SDK or "devkit") is typically a set of development tools that allows a software engineer to create applications for a certain software package, software framework, hardware platform, computer system, video game console, operating system, or similar platform. It may be something as simple as an application programming interface in the form of some files to interface to a particular programming language or include sophisticated hardware to communicate with a certain embedded system. Common tools include debugging aids and other utilities often presented in an IDE. SDKs also frequently include sample code and supporting technical notes or other supporting documentation to help clarify points from the primary reference material.
So:
A class library provides classes that usually share the same rough application area (mathematics, rendering) but are intended to be used mostly independent of each other.
A framework provides classes that together form a basis for an application that you only extend and flesh out.
An SDK contains everything you'll need to use the technology the SDK is provided for. It's often containing dokumentation, samples and tools alongside the actual core-content which might be a framework or a class library or even something completely different.
It's a grey area but Frameworks tend to be the libraries you code against, SDK's often have extra tools to help you get more out of the Framework. A good example being the .NET Framework SDK which you install separately, the SDK has extra tools such as ildasm, cordb which aren't really parts of the framework.
An SDK is expected to offer tools to program against a certain system resource or feature. A Framework not necessarily (although .NET offers a whole set of tools such as the compilers, etc - but these are mandatory for it to work anyways).
So, you could develop a Framework consisting solely of libraries, but if you call it SDK you will be expected to offer something to support development.