1. Pure vanilla server.jar. Has horrible performance, little flexibility, but in the end, it Just Works. This is the server that Realms (Mojang's paid hosting service) uses. In recent versions, some modding is possible via datapacks.
2. Fabric Loader and some vanilla-compatible mods like Carpet etc. Here, "vanilla-compatible" means that a vanilla client can still connect. This is the preferred way of playing for the TMC (Technical Minecraft) community since the underlying server stays mostly vanilla, down to the smallest details and bugs, and no behaviors are changed. The TMC community becomes very agitated when someone tries to "fix" some bugs - they rely on those bugs.
3. Forge/Fabric with mods that change the gameplay, and require the mods to be present on both client and server. This is the traditional "modded" experience, as seen on TV.
4. Bukkit/Spigot/Paper/Purpur, various generations of server software that heavily patches the vanilla server, fixing bugs, adding new functionalities, and presenting a very comprehensive Plugin API, while still allowing vanilla clients to connect. This is the software used by servers that implement custom gamemodes, public servers that need griefing/duping/exploit protection. Many high tech farms don't work on Paper because of how many things it "fixes".
5. Folia - a fork of Paper that has multithreading support. It comes with its own can of worms.
Performance-wise, Fabric+Lithium is probably the most performant in the default configuration, though if you're willing to remove functionality, you can probably get better performance out of Paper (at the cost of losing gameplay features).
As for Bugrock Edition: well... there is Geyser that lets you connect to a Java Edition server with a Bedrock client. ;)