A Juju charm defines how a piece of software is installed, configured and operated. Further, it defines the softwares APIs and what information it shares, the available operator actions, as well as what libraries it provides for external consumption.
Juju acts as the orchestrator, or information broker, instructing charms where and how to interact with other charms.