It's in the backend protocol: in Fediverse/ActivityPub everything has to happen through instances. Instances shuttle posts around, potentially moderating them, etc. Everything happens between instances, and users just interface with an instance to send and receive content.
Just like email servers.
In contrast, BlueSky is set up so that users can post their content to any one or more servers, and pull content from one or more servers.
Fediverse/ActivityPub is all about instances talking to each other while BlueSky is about users talking to each other.
This has practical effects when it comes to everything from moderation through algorithm through account portability.