Pretty sure "decompiling" has always been the easy step - open the binary with a hex editor and dump the contents as some source code. Making sense of that is where shit gets really difficult - making it work was usually even harder.
post
The compiler was never meant to be a source code obfuscating tool anyway, the real sea change is Copyright being ignored. I've always wanted Copyright to go away, but it's going away in a way different than anything I'd imagined and I don't know what to think about that.
The obvious upside is we can sort of return to a time when every game was openly moddable. 25 years ago almost every hot game was a mod of another game.
It's not LLM decompilation is LLM de-obfuscation
We have been able to de-compile pretty much anything for alomg while now, what's been harder is making sense of what comes out of it.
Automatic Ai driven recompilation is not the same as manual user effort to decompile, document and build a human understandable and good source code. That's why I do not mix up the terms recompilation and decompilation.
I've been trying to understand the terms and the opening graphic on this site did a good breakdown.
So my understanding is that a decomp or decompilation is turning the machine code into something human readable. It's the first step but technically isn't anything the average person can use because it still needs to then be (re)compiled into a game someone can run.
However the term "decomp" in general usage refers to the human readable middle step, AND a way to create something for the average person.
Versus a recomp or recompilation is performing the conversion of machine code to some middle state, then immediately (re)compiling it into a game the average person can run.
However the term "recomp" in general usage refers to the same, but always with the use of AI.
Is that right?
I think you/that article are overthinking it. Compiling just means turning source code (written/readable by humans) into machine code (aka a program/game). "Decompiling" is the reverse of that, where you turn machine code into source code.
A lot of these AI de/re/comp/port/whatever projects are made by script kiddies/morons who don't know what they're doing. Sometimes you see them claim that a project is a "static recompilation", but when you look at the code it's literally just a bespoke emulator that runs the game.
Which is to say, don't get too hung up on these terms, since they're often misused either way.
It's important to understand that these terms are not standardized and people or organizations may use them slightly differently or interchangeably. This can cause confusion. But in the wild, people have come to use these terms (in my experience, I'm not an expert either) in specific ways. The article you linked seems to do a pretty good job, but we should remember that this is his/her personal interpretation. From your explanation, I would say it sounds about right "in my opinion".
I lost it and put this lengthy reply. Sorry about that. Edit: Some parts are still not good explained, I tried.
Source code and compiled binary
First, it is important to understand the two states of a game: source code and compiled binary. The source code is text form written in a programming language (usually by and for humans), with other source material. If you download source code, its just bunch of text files basically. To play the game, one need to use a compiler that compiles or transforms the text files into machine readable compiled binary files. There are other stuff too, but this is the important part. The game can now be run and played on the platform it was built for, such as Super Nintendo. If you create a backup of the Super Nintendo cartridge that holds the compiled binary, then you get a ROM file basically. And on your PC you can't run the Super Nintendo games without emulating the hardware.
Assembly
Every CPU has a set of codes and functions, the very basic at the lowest level possible. Assembly is basically that, it is basically the native language the CPU understands. If you code in Assembly, then it is for this specific CPU architectur, such as Super Nintendo. But the CPU only can understand zeros and ones. So you have to translate the Assembly into real machine code, but the logic does not change anymore. So Assembly is machine code, just wrapped up in a better human readable form. This is usually not the source code. Source code is compiled into Assembly and then machine code binary. You can think of Assembly as machine code for humans, if that makes sense.
Reverse Step 1: Disassembly
Disassembly is taking the compiled final binary (such as ROM files in example) and does just translate all the zeros and ones into human readable machine code. But the original variables names and such are lost, so that its hard to understand what this even is due to optimizations by the compiler. Humans have to go through each line and machine code (which is represented in Assembly format) and figure out what each of the lines, commands do, rename each function and so on. This is painful work. What you get is Assembly code that is readable by humans.
When you compile a fully reverse engineered Assembly code, you get the exact same ROM or machine code that you just disassembled. It didn't change the code, it just renamed stuff basically. So it will just compile to what it was programmed to.
Reverse Step 2: Decompilation
Now that you have something humans can read and reason about their logic, it's time to write some real and original source code. That means trying to understand the parts in Assembly, then writing in (in example C or Rust language) a language that can be compiled to any other target than the original machine code was intended. This new code is an approximation of what the original source code of the game developers were, but we don't know.
Now this process is painful and slow. And in the end it does not mean the code will compile to other platforms, it still aims to produce the original game logic for the original hardware (such as Super Nintendo). So they need to make adjustments to the source code, which is finally easy to work with.
Reverse Step 3: Port
Now that you have an easy readable source code in a programming language that is independent from the hardware, such as C or Rust, you can make adjustments. If you aim to play the game on PC, then adjustments are done so it can compile on PC. Whatever is needed, but in short they modify the source code to be able to compile it to other platforms than it was originally intended. That's a port.
What is a recompilation?
In context of this discussion, a Recomp is basically taking the binary of the game and automatically built a source code file (such as to C or Rust) in one step. This leaves out the manual work of humans to categorize, understand and write good human readable code. The produced code from recompilation is meant to be used by compilers only, that compile to binary. It is not intended to be read by humans, even though its technically source code. Disadvantage is, that if there are bugs then humans have a hard time figure out whats going on. Or to mod the game manually, its difficult too.
This is nowadays often associated with Ai tools, but doesn't have to. I'm not entirely sure, but the N64Recomp in example is such a non Ai recomp tool.
In general, the best case is that we have good high quality human readable and understood source code; Decompilation. On the other hand Recompilation is much faster to create.
how you can copy code with AI and claim it's made in a clean room, so technically you're not under any licensing agreements.
I argue if you use Ai to code, then you cannot proof that it was implemented in a clean room way.
I don't think that's actually true. I think it's more just AI propaganda. Most of the so-called "advances" that I've seen advertised seem to be far less than they seem when you dig deeper, often relying heavily on previous, human reverse-engineering efforts or simply being injection points built into wrappers for the actual binary game code. It's just suddenly cool and polished looking because AI padded it out with a bunch of fragile and flaky filler code whose only purpose is to make it look finished and beautiful at first glance when it actually isn't. The typical AI gameplan, in other words.
Can we please just skip the middle-man and start open sourcing everything instead of burning all the world's resources to achieve the same goal?
Oof I got a lot of conflicting thoughts on this. Going to need another coffee to mull this one over.
Can it decompile windows and make it Linux
It's called ReactOS :)
Imagine decompiling windows and merging it with Linux so that anything you wanna do on either platform somehow works native? Like if I do a fresh install of WINUX let's call it and then I can run any .exe and any game or program that's windows only and it automatically out of the box thinks it's a Windows machine and anything that's Linux only think it's a Linux box
What's is the token cost to decompile one of these games? I want to fix a game breaking 'bug' in an old game are we talking $10s or $100s to make that happen?
There is noting awesome about what AI does.
It could fix your spelling, at least.
I know a few games that are sorely out of date by active developers and the devs are always like "I don't have time" or "It's not that important" or "It's too hard."
And I'm like, why don't you release the code you prick, you don't care, so why are you still lording over it.
So this could be awesome.
Another exciting area is open firmware synths. specifically the $70 fm-1 (I think Pi based) is blowing up with synth engines/groove box apps. Its exciting new area for OSS. Its scary for closed synths.
Not scary at all for open source games! Or open source software. What, AI os going to decompile linux and 1000 AD?
They already decompiled indiegames demo and used that to build a clone of it and ship it, faster than the indie dev can finish their game. It's definitely an awful situation for small indie dev because they not only have to compete with bigger budget, their peers, and the f2p market, now they have to compete with cloners
I've been thinking about this a lot too, because of seeing all these decompilations (with all the implications that comes with, as you point out some of them), but also because my own "learning LLM tooling" project was reverse engineering Civ IV, and rereleasing in a 64 bit engine with more accessible controls at the expense of 3d (sort of like Unciv).
I did not do a decompilation, especially because the core of the game has restrictive-licensed source released, but i was able to build clean specs from that source, and then with as clean of context of possible, stage the production and testing of features. I honestly don't know how you'd prove a classic clean room implementation with LLMs (and definitely not in a one shot), and i can't really prove my implementation is clean either.
I really hate the direction of all this stuff (so so much), and i hate that my disabled ass feels compelled to learn such tools so I am able to feed myself. But I did try to have some good come out of it (generic reverse engineered specs, basic accessibility framework, game automation framework, and i definitely learned a lot, plus it does work pretty ok)
I haven't been able to figure out a way to release in a way that fits my ethical framework, without also resulting in people insulting me (which I don't have a lot of room for in my life right now). I'll happily take suggestions though!
I'd love for this to not be wasted effort, especially because of the accessibility enhancements for a beloved but proprietary game.
Are these AI decompiled games any good? I heard the Adobe ones looked good but we're actually really slow and buggy
This is very conflicting.
I daily a macbook, and so games aren't that readily available. To be able to play something like the original Syndicate (1993, SNES and other platforms) or Shadow Hearts: Covenant (2004, PlayStation 2) on my mac would be awesome. I'm very much a patient gamer, so there are so many old titles I'd very, very happily play through again.
But there's no way this would be restricted to old, dead platform games.
AAA games now cost millions or even, according to GTA 6 rumours, over a billion to make. If a studio publishes a game, and a week later there's a free AI clone of it, then there is no more AAA games industry. Actually, that also follows for some of the awesome indie games I've loved and enjoyed. How can you make money selling copies of your game if there's a free, or massively undercut, version of it available? Obviously most gamers would like to support creators, but in this economy? They'd probably rather eat and pirate games.
Pirate.
P-AI-rate?
Pir-AI-te?
Psst. Check out OpenEmu if you wanna play SNES games on your mac.
Maybe open source licenses are completely unenforceable now. Maybe critical software and hardware can be easily hacked into now, and we haven't realized just how bad it is yet. Maybe everything will have more invasive DRM on it soon. Who knows. We're about to find out in the next few months.
Oh my god, anything but DRM. It freaking sucks and only ruins experience to normal users
As some else discussed, apps where most infrastructure is on the server just for the sake to protect code might be popular. Which means even more reliance on the internet.
top 50 comments