When .NET first came out, the framework only had abstractions for what seemed like a handful of Windows features. Developers were required to write their own abstractions around the Windows features that did not have abstractions. Working with these features required you to work with unmanaged resources in many instances. Unmanaged resources, as the name suggests, are not managed in any way by the .NET Framework. If you don’t free those unmanaged resources when you’re done with them, they’ll leak.