You probably have already noticed the occasional qualification of ‘unmanaged’ used with packages. There are actually two types of packages: managed and unmanaged.
A managed package is designed to serve the needs of developers who are looking to sell their applications for use in other Force Platform organizations. Managed packages differ from unmanaged packages in the following ways:
Managed packages are designed to be upgradeable. Unlike an unmanaged package, which will not install if any like-named components are in the target organization, a user can install a newer version of a managed package over an older one.
Users cannot see your Apex code in a managed package, which protects your intellectual property.
Managed packages ...