Minecraft comes in two flavors, Java and Bedrock. All of the mobile, console ports, and windows store versions are based on bedrock. Java is the one you download directly from the website. Bedrock isn't really about custom hosted servers, but there is a way.

You can run a standard Java Minecraft server however you like, and then you can wrap it to also work with the Bedrock using Gyser[1] which will protocol translate it on the fly. It can require some workarounds on the more restrictive bedrock clients but it does work. That will let you setup and control the server from Java which has more options available.

[1] https://geysermc.org/

Apologies for hijacking an advice thread, but I'm another dad who's had to deal with this incompatibility nightmare, and I really really want to know what the hell happened within Microsoft & Mojang to end up with this mess.

No, seriously, I'm fascinated by the story. It's been over ten years. I'm happy to assume that most of the people involved are smart and good with decent intentions. I also bet there were many kinds of commercial and organisational pressures, especially because it's (a) Microsoft and (b) one of the biggest gaming acquisitions ever.

Does anyone here have any insider knowledge they could share?

Minecraft started on Java, a massive mod and server community created around it. Consoles won't run JIT/JVM/Java, so the Bedrock C++ version was created. People don't want to give up the massive mod community, so OG pc players stay on Java, while console players and newer PC players go to bedrock (with some of those PC players jumping over to Java after servers or mods are discovered).

They almost have feature parity, but there are some small differences around the edges. There exists modded server options for enabling bedrock and java users to connect to the same server.

It's absolutely crazy that a game so popular - let alone any game - was originally written in Java.

Why did notch do that?

There were next to no libraries, ecosystem, or support for Java at the time. It was such a bizarre choice.

Not to mention the JVM, GC, and all the other oddities. It was super off the beaten path to have done this.

Might as well have been Ruby or Perl.

Even at the time Java had some great tools and IDEs (NetBeans, Eclipse) and both computers and the JVM were fast enough for any performance issues compared to fine tuned C++ to not matter much, especially for a game like Minecraft that didn't (at the time anyway) push the CPU much.

Java allowed Minecraft to run pretty much everywhere, including as an applet (very important in its early time) and it relied (and still relies) on LWJGL which provides access to the most common stuff you'd need to make a game (OpenGL, windowing, input events, etc) - and at the time it also worked for applets too (you needed to download the LWJGL applet code but it was signed by the devs so you didn't get too many scary messages).

I used the same tech (Java+LWJGL) at the time to make a few simple demos/games and it was quite easy to make stuff - e.g. i made this[0] in a few hours using Java, LWJGL and Eclipse on the iMac i had at the time.

[0] https://www.youtube.com/watch?v=xXn8VhH6GFs

At the time, Java ran on the web so he could easily share demos.

He used LWJGL, which probably covered a lot of his library needs.

Java has a JIT, so it's not comparable to Ruby and Perl.

Minecraft gained popularity super fast in its early days, probably because it was a free-to-play game that worked in the browser (thanks to Java). Notch had no reputation or marketing at the time.

> It's absolutely crazy that a game so popular - let alone any game - was originally written in Java.

It did not start being popular :)

Seriously though, I think Java helped it get so much traction initially. Writing mods was tedious but not that difficult, and it was multi-platform for free. Nowadays I assume the vast majority are playing bedrock on consoles or PC, but at the beginning it was rather nerdy and being playable on Linux and Mac was nice for some tech-minded people.

Different era. At the time choosing the JVM and Java language for a multiplatform project that targetted a portable runtime was not controversial at all.

I spent my first 12 hours glued to Minecraft back when it was a Java applet. Probably wouldn't have bothered to install...

I remember some early posts from him about how he really liked how the debug mode made the iteration loop very short. Here's a video of him doing exactly this - it does look like a very pleasant development environment even now

https://www.youtube.com/watch?v=BES9EKK4Aw4

There were plenty of low level libraries available then, less in the way of frameworks. It was an environment that he was used to coding in and cross-platform (in the PC world anyway).

Given what it was in the very beginning versus what it very rapidly grew into, I guess it was just something that made sense at the time.

At least for libraries, Java was actually pretty good for game development at the time iirc (Admittedly, I wasn't there, so I could be misled). It was kinda your only option if you didn't want to use C++

Am I missing sarcasm here? Minecraft was developed in 2011 and Java was conceived in 1995; it was (already) an extremely mature and popular language at the time.

As a couple of others have mentioned, the original split between the original Java Edition and the now Bedrock Edition happened in 2011. This is several years prior to the 2014 acquisition of Mojang by Microsoft. So while Microsoft may have had motivations in Mojang promoting or expanding Bedrock adoption, that train had already left the station by the time Microsoft entered the picture.

Bedrock started as "Pocket Edition". Probably the best place to get the story is at: https://minecraft.wiki/w/Pocket_Edition

I like Minecraft quite a lot and am not concerned with interoperability between Java and Bedrock... but will only play the Java Edition because of game-play differences between the two; differences in which Java Edition comes out as being materially better than Bedrock... at least from my perspective.

The developers are used to Java, and as someone who's worked with both Java and C++, Java is simply better for the kind of iterative development minecraft seems to do. From what I've seen (which admittedly isn't much more than the public facing history and the minecraft live/minecon events), there isn't really a strict roadmap and they seem to value messing with features a lot. Also, the game was only rewritten in C++ to support multiplatform ports, and bedrock isn't even the first time they did it (though, the other C++ versions, also known as legacy console, weren't handled in house). The existence of a windows version is a strange curiosity stemming from the microsoft buyout and their ability to do so since that codebase is insanely portable.

Also, mojang (not microsoft) really appreciates modders, which java edition is strictly superior for

No insider knowledge but as far as I know, bedrock is written C++ not Java. They did that for porting to other devices and consoles, as well as preformance. It also allows them to sell skins, server hosting, more micro transactions since it's more locked down. So I think it's just a thing that happened, and it has been going on for a while and if they did anything to either the Java edition or the bedrock edition then it would make a lot of people really mad.

Here is something you can consider: https://pumpkinmc.org/ it's Minecraft rewritten in Rust. It's very fast and you can make your own mods.

Consoles hate having a jit vm so java is a non-starter for them.

The real reason is you want to run your game on the latest greatest WiiStation(tm). if it is written in C/C++ you sit down with a copy of their development library and change your code to fit. If it is written in java you port the jvm to the device. And I don't really know how hard that is(having never ported the jvm) but most people sort of balk at that step.

Microsoft thought it was easier/better to rewrite minecraft in C++ than port the jvm to the xbox. There was a big enough customer base attached to the original java version they did not want to discard it(backlash would be too huge and messy).

In Microsoft's defense at the time the java code base had a ton of technical debt and overtime they've essentially done a full rewrite of everything.

That said, I'm convinced that 90% of the reason that the current mess exists is because Microsoft was convinced that most users would be migrating from Java to bedrock. And they probably would have (modding and other things aside), had the Microsoft team not decided to "fix" many aspects of redstone.

Since then there's been the constant issue of parity between the two versions, which will likely never be achieved. And 90% of the time it's because the Microsoft developers working on bedrock edition decide they know better than mojang does, so they can implement a feature in a different way, or just implement a new feature entirely.

Ugh it's a mess, and I've spent way too long thinking about it.

As someone who's messed with redstone on both, Bedrock is uniquely infuriating because it adds some really cool things (being able to move entity blocks like chests and furnaces comes to mind) while completely destroying the groundwork of even moderately advanced redstone. The most visible is the timing for certain things becoming nondeterministic, and while technically a bug originally, quasi-connectivity is extremely useful

Unless I've got the product genealogy wrong, the rewrite predated Microsoft. The mobile version was also C++ based, and I think it is the distant ancestor to bedrock/windows/console editions.

> Microsoft thought it was easier/better to rewrite minecraft in C++ than port the jvm to the xbox.

I don’t think that’s quite right. IIRC, the mobile iOS version was released before the Xbox one and neither were developed by Microsoft. I think eventually it’s the mobile version that became Bedrock and replaced the older console version, which became a dead end.

The mobile version (released in 2011) could not be in Java, otherwise it could not have been sold on iOS. So at least initially it was more a business decision about which platforms to target than a technical decision to do away with Java.

All this happened years before Microsoft bought Mojang.

I know this is probably not as easy as it is in my head, but doesn't xbox have a .net runtime? It would completely take away the portability aspect, but if the original 360 port was handled in house I could totally see them using that weird Java on .net thing in at least some capacity

Bedrock has much better performance so it was used for consoles, but there were already hundreds of thousands of mods for Java edition, thus the split.

Bedrock does have better performance but it is also hella buggy and unstable.

And also it has worse performance than Java if you just install a basic optimization modpack like Adrenaline on Java, which many players do. There's effectively ~zero reason to use Bedrock if you're on PC.

Yes it is. The lack of mods was already a dealbreaker for me, though.

Geyser sounds very interesting especially if you know some or all players wouldn't be willing or perhaps able to play Java Minecraft and so they have to run Bedrock, but some would play Java and they'd enjoy being together.

Java Minecraft is just a better toy, I'm not altogether sure it's a better game, depending on how you define game, but it's a better toy because it's so flexible. I assume Geyser can't magically donate much of that flexibility to a Bedrock client, but if the players can co-exist then that's a boon in itself.

Aside from being more flexible they are mostly the same game. The original excuse for bedrock was that Java was slow and a native game would render much better, it was also easier to put shaders in a a native codebase. But Java edition is pretty performant nowadays and computers also got much more stronger than the game became heavier

As far as I can remember the origins of Bedrock are the original console releases which couldn't ship a JVM. So a whole new codebase was developed, and ultimately it was more performant as it had to run on 7th gen consoles.

Console releases were done by a different studio originally, 4J Studios. Bedrock spawned from the mobile ports, and eventually replaced the console editions and had different features.

Java edition still horribly underperforms. It’s mostly single-threaded and even if they’ve rewritten the lighting engine a few times (those decade old black-block bugs disappeared), the Sodium family of mods show you how much it can be improved.

Sure, but the fact that you can just install Sodium completely obviates the need for the Bedrock version to exist at all.