Minecraft came out a bit over a decade ago, as a game written in Java that runs on Windows, Mac and Linux but only x86! That’s because, while the game is written in Java, it depends on native libraries that are x86 (although I think now they’re AMD64 so you need x86 64-bit nowadays).
The game featured multiplayer mode, and server software was (and still is) available to download, as 100% Java application so the server can run anywhere as long as you have Java 8 (for example OpenJDK 8 JRE “headless” works).
Minecraft “vanilla” server
The server was very bare bones and did not have any form of cheat protection. It had a “no-fly” detection to kick players that were hovering in the air and that was about it. If you had a modified client, you could do whatever you wanted on a server and destroy other people’s things on a big scale. The server also did not feature any extensibility.
Eventually people figured out how to decompile the server and basically had a complete copy of the source code, which they could modify and recompile into a custom server. Eventually, a project known as Bukkit came along, which was a modified version of the official Java Minecraft server, that featured its own API to write plugins in Java to extend the server as you please. With it, a plethora of plugins came along including ones that could detect strange behavior from modified clients and block them, or plugins that could log every player’s actions and revert them if needed, or simply plugins that would add fun content or features to the server.
Bukkit was problematic, however, as it basically hosted the source of the official Minecraft server, and Bukkit servers were distributed as binaries that included the proprietary parts. Eventually, there was a DMCA takedown and the project died with it.
Then Spigot came along, which basically took the modifications from Bukkit and built upon them. But they had a different approach, so they didn’t face legal issues:
Spigot hosted only the source of the modifications on top of the Minecraft server, they did not, however, host the Minecraft server source itself, and they also did not distribute any binaries that contained those parts. Instead, they released something called BuildTools(.jar) which would download a copy of the official Minecraft server, decompile it locally, download the modifications, patch the decompiled source and recompile it into a binary. That way they did not distribute anything they did not have the rights to. And this is how it is to this day.
Because of issues in the past with server hosters asking for money for in-game content, and because children would then “steal their parents’ credit cards” to buy those things (you know, the usual story…), a lot of angry parents contacted Mojang for refunds they did not have anything to do with. This is why Minecraft servers nowadays contain an EULA that needs to be agreed to before you can run the server, which forbids selling in-game items that give an unfair advantage (cosmetic items are OK as far as I know). This is so that Mojang would stop receiving complaints and get a bad reputation.
This is a “short” recap of Minecraft Java edition servers, but there’s more!
MCPE / Bedrock
Eventually, Minecraft for Android came out, which was known as Minecraft Pocket Edition or MCPE for short. This version was a little sandbox game written in C++, which did not have all the functionality of the Java edition. It was basically as simple as the Minecraft Pi edition: Place some blocks in a small sandbox world.
This version grew over time, it got the near-infinite world, it got more content, survival mode and mobs were added and eventually, it grew into something that could compete with the Java edition. MCPE was ported to Windows 10, iOS, PS4, XBOX and Nintendo Switch and was known as Minecraft Bedrock edition at this point (Bedrock being the engine written in C++, that used to be MCPE) or simply Minecraft for short and is the official, main version now with cross-platform play.
While Windows 10, Android, iOS, XBOX, PS4 and Nintendo Switch run the “Bedrock” edition which features cross-platform play since the “better together” update, it is not compatible with the Java edition which means Mac and Linux players are isolated from the rest of the community. Furthermore, Mojang (or Microsoft) never released a server software for it. There is now an Alpha version of a server software but that only runs on Windows and Ubuntu (AMD64). There are third-party options for servers but usually, they either lack features or timely updates.
One important difference between Java and Bedrock editions is version control, which makes it a lot easier to run Java edition servers.
You see, for many years now it has been possible to create so called “profiles” in the Java edition, which support various settings including the game’s version to use (which then gets downloaded on first launch) so even if you use a third-party server software that’s stuck on an older version, users can still join!
In contrast to that, the Bedrock edition has no version control. The game is distributed with the platform’s official stores which only offer “the latest version”. While you can in theory disable automatic updates, it’s a bit of a hassle and you “can’t go back” if you forget. So, generally, on Bedrock an outdated server means “people can’t join”. And because there’s no official server software (except for an Alpha version, not meant for production use!) you can’t have a guarantee for timely updates.
Because of this lack of a Bedrock server software with timely updates, Mojang conveniently offers paid hosting known as “Realms”. Each “Realm” is a server hosted by Mojang/Microsoft.
These Realms are available for Bedrock and Java edition, but they too lack cross-platform play between those two.
Furthermore, console versions (Bedrock or not) cannot “Join by IP” which means you cannot host your own server and have console players join (unless you provide a proxy and what’s essentially a DNS based MITM attack). So if you want to play from console or want console players to join, you need to pay for Realms hosting. Otherwise, you are restricted to Windows 10 and the mobile clients. Furthermore, console platforms ask for money to be able to play online, which in the worst case means you pay twice.
Minecraft used to be great for Multiplayer, you had one version, everyone could join by IP, you had version control and awesome server software. Then Bedrock came along and split the community into two.
But on the plus side, I can now play in bed from the Nintendo Switch… So… 🤷🏻♀️