> GTA 3 and Vice City were originally written in [programming language] C++ . . . The compiled executables that are shipped are in machine code. So the general task is to go from machine code back to C++. . . . To go back to C++ is by no means a simple 1:1 mapping, but over the last 10 or so years decompilers have appeared that help with this process. . . . So what we typically do is work with the output of the decompiler and massage it back into readable C++
I know, as a software developer, I don’t consider that fair use, and I very much doubt any reasonable person would either.
It's as if person 1 built a machine (source+compiler) that generates paintings (binary) to sell, and then person 2 saw the painting and built an entirely different machine that can do the same thing. Person 1 can't tell person 2 what to do with their machine.
https://chart.copyrightdata.com/Colorization.html https://www.traverselegal.com/blog/can-derivative-works-be-c...
I think most groups that do this sort of thing understand that. Just depends on the company you are doing it to and how understanding they are of it and how much are they willing to spend to go after it. If you are spending thousands to go after something that may make you 200 bucks off of over the next 20 years you are just spending money on something that is basically worthless to the company. In this case they are probably burning a lot of good will. The mod community for those games is huge and in many ways keep those games interesting for people.
Why would decompiling be different from compiling? In both cases, you are transforming code from one language to another and ending up with something "new", which is a derivative of the original. In any case, you can have a human come in and clean up, refactor, extend, or make changes... and the result is still a derivative of the original.
It doesn't really matter if you are doing it by hand or machine. I just don't see how that is relevant. There's a process involved where the input to that process is the original GTA 3, there's a bunch of steps, and the output to that process is code based on the original GTA 3 machine code, but in C or C++ instead of machine code.
There are two ways to get around this. The first way is fair use, which is complicated but certainly doesn't apply here. The other way is the "clean room" reverse engineering, where one team reverse engineers a product to figure out what it does, and produces a specification, which a second team uses to create a new implementation which does the same thing.