Hacker News new | ask | show | jobs
by milkywayz 4065 days ago
Should have been implemented in Java :/

> A completely clean-room implementation of Minecraft beta 1.7.3 (circa September 2011).

> To get started, sign the Contributor License Agreement to establish that you have not, in fact, ever read decompiled Minecraft code.

> 'Clean room design is the method of copying a design by reverse engineering and then recreating it'

Not sure why it makes sense to say in the repo you reverse engineered it but then make contributors sign an agreement saying they havent read decompiled mc source.

Reverse engineering is a very broad term, but generally involves analysis of decompiled source, no?

5 comments

> Reverse engineering is a very broad term, but generally involves analysis of decompiled source, no?

Not necessarily. If you are reverse-engineering a file format for the purposes of reading and writing files compatible with the software, oftentimes you start by using the software to generate multiple files with small changes. Your analysis is limited to the output generated by the software, not the actual software itself (you treat the software as a black box).

CLEAN-ROOM implementation, it is even linked to an explanation. this means that he DIDN'T read the source-code.
Reverse engineering is usually illegal, but trying to reproduce the behavior of said software by trial and error is not. That's why they mark the difference.
Reverse engineering is legal in a large number of countries - I'm not so sure it's accurate to say it is "usually illegal".

There are exceptions, though, and it's worth people being aware of whether or not it is legal in their country, but the biggest risk with reverse engineering generally is not the legality of reverse engineering itself, but that it makes it harder to justify yourself if the newly written code happens to look surprisingly like the original code.

It is not unusual for people to come up with very similar structured code if the code is largely dictated by the same functionality and requirements, and then it's easier if everyone involved can truthfully say they have never seen how the original did it.

> Should have been implemented in Java :/

If you are looking for an open source Minecraft-compatible implementation in Java, I humbly suggest (shameless plug) checking out https://github.com/GlowstonePlusPlus/GlowstonePlusPlus. Glowstone++ like TrueCraft currently only implements the server portion, and it has some differences such as targeting 1.8.4 compatibility not 1.7.3 beta, but being implemented in Java has some significant benefits.

For those not aware there is a huge ecosystem of additions available for Minecraft written in Java. This includes thousands of "Bukkit plugins" available from http://dev.bukkit.org/categories/, Spigot plugins from http://www.spigotmc.org/resources/, and now an emerging community of Sponge plugins from https://forums.spongepowered.org/c/plugins/plugin-releases. Writing Minecraft-compatible software in Java has the advantage of being able to potentially support these plugins. Glowstone++ in fact implements much of the Bukkit API and Spigot API, as well as (currently a small subset of) the Sponge API through a bridge. Based on the original Glowstone server, Glowstone++ is completely open source, yet it ties into the existing "Minecraft" plugin development ecosystem.

Java has some disadvantages of course as well, so it's good to see alternative implementations in other languages (not only C# TrueCraft, but C++ MC-Server, Rust Hematite, JavaScript PrismarineJS, etc). The more choice the better =)

Or: Should have been implemented in a language without garbage collection pauses?
Garbage collection pauses work very much fine on a heavily modded server I monitor as part of BuildCraft development. The server, with its 40+ mods and about 20 thousand tile entities running at any given time generates about 50-100MB of objects every second. In fact, Minecraft's own explicit chunk GC is MUCH slower than Java's and causes actual 2-3 second pauses!