A system is simply a piece of logic that runs.
The description above is pretty vague, but this is because a system is not constrained in what it can and can't do, it can operate on entities and components (for example the SpriteSystem, which generates renderables from Sprites and Transforms), or it can operate without any entities and components, sending and receiving messages (for example a system that stops the game when the player is destroyed). These systems are Stateless Systems (does not track entities or components) and Stateful Systems (tracks entities and components).
Systems can override the
OnMessage method to handle messages, the base system includes basic handling already which
listens for an update message, and calls the protected
update which can be overridden to add logic that runs
on every update.
Be aware that if a system does override the
OnMessagemethod, the base
OnMessagemethod should be called if the system still needs to handle updates.
Stateless Systems (just referred to as Systems as they are the base class) do not track any entities or components, they simply send and receive messages.
See the Stateful Systems page for details.