From a practical sense, ActivityPub may be the obvious choice as it gives easier interop with the largest federated platforms.
But what else? There are existing platforms built on these protocols, such as movim for xmpp, and another for matrix I forget.
From a technical standpoint, are there any major pros and cons?
I would even say XMPP would be a better underlying communication protocol under ActivityPub, as it specs many aspects that ActivityPub does not.