A non-trivial, nearly independent, and replaceable part of a system that fulfills a clear function in the context of a well-defined architecture.
source code component, run time components, executable component
Package:
A package should be used in cases where a set of classes and/or other packages need to be grouped together for model organization purposes.
Though the contents of the package can have public visibility, which makes them visible to model elements outside the containing package, packages are primarily just grouping mechanisms.
Subsystem:
A combination of a package (can contain other model elements) and a class (has behavior)
Realizes one or more interfaces which define its behavior.
A subsystem should be used in cases where a set of classes and/or other packages need to be encapsulated within a container and hidden behind a set of well-defined interfaces.
By convention, none of the contents of subsystem are visible except the interfaces of the subsystem.
This allows subsystems to be easily replaced, and the implementations changed, provided the interfaces remain unchanged.
It offers a degree of encapsulation greater than that of the package.