| There are several primary ways to run a Java Edition server: 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. ;) |
There's some history in the "Bukkit" family that might make their chaos make more sense.
In the beginning, there was Bukkit, which was a plugin API. And there was its reference implementation, CraftBukkit. It was very popular, Bukkit was the de facto API for server-side modding, and I made 50 bucks off of advertising revenue share for downloads of my plugin, which was a lot for me as a high schooler with one (1) year of java experience. Times were good. Where was I? Oh yeah.
So, for a long good while, times were swell. Then iirc Microsoft announced they were acquiring Mojang (I think this was the precipitating event? Someone correct me if not). And the main Craft/Bukkit guy threw in the towel and pulled a very clever poison pill: he DMCA'd his own repos. You see, Mojang essentially didn't care about server.jar distribution because they were a cool indie company. So CraftBukkit just included it. Which meant it was always in violation of Bukkit's GPL license since that code wasn't open source.
So anyway, CraftBukkit explodes in a supernova and the resulting stellar nursery produces Spigot which pioneered the distribution strategy that all successors would then use - they distribute a decompilation map and their source, then you run a jar that downloads server.jar and performs the unholy mixing of licenses on your machine.
This is where I left the scene so I only have a summary from here on out. Spigot is the main go-to for a while, but the stellar nursery is still hot, and so various creative differences produce Paper, which seems to have mostly caught on to replace spigot though it seems like spigot is still a nontrivial player as well. And these all still implement the same ole GPL licensed Bukkit API.