Hello everybody.
First of all, let me make very clear that this post is my own opinion; I don't represent either Amazing Ampharos or Thinkaman. However, I'm a programmer and a scientist, and this whole code credit debate blows my mind. I could take a conventional approach and reply to each of the posts over the last few pages in turn, but let's face it, that's not going to be very effective. I don't want to be confrontational; I just want to get certain points across.
This essay is divided into four parts. In the first part, I show that the paprika killer, zxeon, et al., are hypocrites, and feigning indignation. In the second part, I show that the doctrine of “codes as property” is patent nonsense. In the third part, I discuss the “reverse engineering” controversy regarding the throw modifier code. In the final part, I respond to the various emotional appeals that are being thrown around.
PART 1: A STORY
Instead of a point by point analysis, I'd like to start off by telling a story. This story takes us back to the end of last year, well before AA or Thinkaman had even conceived of Balanced Brawl. AA and I have always been academics. In December 2008, we observed that various basic Brawl game mechanics were still shrouded in mystery. For example, the exact workings of stale move decay were completely unknown. People had various vague ideas about how it worked, but the extant research provided only approximations, which were inconsistent with the evidence. We decided to figure out precisely how damage was calculated in Brawl, out of a love for the game.
I am a computer scientist, but I haven't done any Brawl hacking, partially because I never bothered to buy a USB Gecko. However, this didn't set us back—instead we adopted a traditional evidence-based, black-box approach to figuring out these mechanics. AA did most of the evidence collection, tediously using sequences of moves hundreds of times against various stage obstacles and opponents. Using the evidence, we made charts and graphs, and came up with a model that turned out to be
exactly right. At the same time, we also investigated a bunch of other mechanics, but our greatest accomplishment at that time was stale move mechanics, and I'd like to think this was a substantial contribution to the community.
We posted these results on December 13, 2008. The thread can be found
here. The Brawl+ people had been looking to modify the stale moves system in Brawl for quite some time. As it turns out, this research was exactly what they needed to create a stale moves code. It was published by spunit262 some time shortly after. His post in the Brawl Codes thread can be found
here. In this post, you can find the following “Thanks Note”:
spunit262 said:
Special thanks to ColinJF and Amazing Ampharos from SWF, Thanks to their research on damage calculations (poetically stale moves) I was able to make the Decay code extremely quickly, and provide me with a good foot hold for several other codes.
Clearly, no one is denying that our research was the basis of this code. If the present fiasco is to be any indication, key Brawl+ people—like The Paprika Killer—take attribution
very seriously. So naturally I would expect my and AA's names to be attached to this stale moves code everywhere it is appears. In fact, given the present fervency, it could be characterised as nothing less than an outrage for this code to appear anywhere without giving credit to AA and me.
The definitive place to get Brawl+ related codes is the
Brawl+: Code Agenda thread. Out of curiosity, I just now took a look at the stale moves code in that thread and this is what I saw:
Much to my surprise, there is absolutely nothing crediting AA or me for our research which directly led to the creation of the code. This is surprising because we are told in this thread that such an oversight is a heinous offense against property. Mere forgetfulness cannot excuse something like this—it's obvious that the credit was simply not worth giving in the eyes of the Brawl+ leaders. As will become obvious later in this essay, this lack of credit does not bother me. I do work because I want people to be able to use it, not because I want to get credit. But no one ever asked me whether I felt that way, and if people like the paprika killer are to be taken seriously, it should have been my call whether I wanted to be credited. Instead, the credit was just slipped under the rug.
What can we infer from this? That the brawl+ leaders do not actually care all that much about credit, and that their outrage in the present thread is nothing but a smokescreen designed to cause chaos. However, their ulterior motives do not make them wrong. Nor does their hypocrisy. It merely casts doubt on their character.
Quite a lot has been said about how AA and Thinkman relegated the code credit to the end of the opening post, rather than listing it after each code. But nothing has been said about why this matters. The code authors have been credited sufficiently. It is difficult to understand why anybody could care about the credit being given later in the post, rather than beside each code. In the following sections, I examine some possible reasonings behind this thinking, and show that they are all wrong.
PART 2: BUT IT'S MINE
The notion that the first person to publish a code should be able to control its use is nothing short of
preposterous. The basis of all property is
scarcity. There are only so many cars to go around, so if a particular car is in my possession, it cannot also be in your possession. This is why there is a market for cars; they are scarce, and as such their marginal value is above zero.
Numbers—including programs and codes—are not scarce. If I make a copy of a code, it does not necessitate somebody else losing a copy. As such, it is patent nonsense to call these codes “property” or to talk about “owning” them. As the original author, you choose when to publish a code. After that, the code will be on my hard disc, in my browser cache. Now, I can do whatever I want with it—if you say I can't, that means you are telling me what I can and cannot do with my own property, namely my computer.
I support property rights. That means I support the right to do whatever I want with my own property, including make copies of codes without consulting the original author. If you support property rights, you'll support this as well. The notion of “codes as property” actually
takes away from property rights and limits what you can do with your own property: your computer, your Wii, and whatever else. My computer is real, tangible, property. My rights to it are more important than your nonsense “code ownership”.
What's more, many of these codes are very short. For example, the infinite replay code consists of two numbers: 50071944 and 1610612736 in base 10. Nothing about these numbers makes them worthy of any sort of “protection”. It's entirely possible that this sequence of two numbers could appear in the binary form of the object code of an arbitrary program. To make matters worse, many file formats have sections where arbitrary data can be written.
- I could make a zip file containing anything, and cause the binary representation of the infinite replay code to appear in the binary representation of the zip file. Would I need to credit the author of the infinite replay code when distributing this zip file?
- A program made to generate random 32-bit numbers would generate those two numbers side by side almost surely at one point, and given the power of modern computers, it wouldn't even take that long. Does the author of the infinite replay code have a claim to all random number generators?
- If we split the second of these two numbers into bytes, in big endian format (descending significance), we get the following sequence of bytes: { 96, 0, 0, 0 }. Note that 96 is the ASCII code for the backtick (`). Does the author of the infinite replay code have a claim to my use of the backtick? Some other codes work out to letters in ASCII. Would the authors of these codes have a claim to my use of these letters in sequence? If I hit the keyboard at random, I could very well spell out something that a code author could have a claim to.
Consider this image of a red square which I made:
Now download this file and open it up in a hex editor—go ahead, try it yourself—and you will discover this in the file:
For the mathematically uninclined, the circled part is the infinite replay code in little-endian format. Do I need to credit the author of the infinite replay code when distributing this image of a red square? Clearly, this post itself is a heinous offense against property because I am showing this red square without offering any credit to the author of the infinite replay code—in fact, it's
my red square.
A sequence of two 32-bit numbers can be interpreted in very many different ways, and many of these ways are likely to have been used somewhere. From this “property” argument, it's hard to imagine any reason why I would have to credit somebody just because I happened to post about these two numbers.
However, there
is a reason why I should credit people who published these codes, and it has nothing to do with “property”. The reason is that I want to thank these people for writing the codes. It is something I do out of courtesy, and not because I am required to. There is no need to bring in an absolutely ludicrous notion of “property” in order to justify giving credit. How I choose to give credit is up to me, since I do so at my leisure. What AA and Thinkaman have done to give credit is
obviously sufficient, and always was sufficient.
Once a code finds its way onto my computer—including by viewing a web page—I can do whatever I want with it, because the computer is my property. That's
real property rights.
PART 3: “REVERSE ENGINEERING”
Now that we know “codes as property” is a nonsense doctrine, and that the credit fiasco is completely unfounded, we have to address the second issue that has come up: Thinkaman obtaining the throw mod code from an opaque gct file. Before we can jump into this issue, however, we need to consider the various possible meanings of “reverse engineering” so that we can fully appreciate what we are talking about. What is it that separates “reverse engineering” from just performing unit tests on a black box? More crucially, what separates “reverse engineering” from making a code that causes the game to write certain statistics to an arbitrary memory area?
Suppose that, instead of getting the code directly from the gct file, Thinkaman had done it indirectly. Suppose he had simply modified Gecko OS itself to output the codes to the video display, rather than execute them. Then he could transcribe the code without anything resembling reverse engineering. There is no substantiative difference between this and extracting the code from the gct file directly. If it's acceptable to execute the codes, then it is also acceptable to output them.
But the lack of a problem here is even more fundamental. How is extracting the code from the gct file any different from extracting it from a text file? The only difference is the format of the code. If it's acceptable to do the latter, how on Earth could it unacceptable to do the former? The only difference is the
intent of the code author—but since the code author doesn't own the code (see part 2), his intent doesn't matter in the least. Once he has released the code in any format, I can use my computer to do anything I want with it, including extract it from a gct file. If you say I can't extract codes from a gct file, you are placing limitations on what I can do with my own property—and that's baffling.
It's also mysterious that Thinkaman's actions are being characterised as “reverse engineering” when the actions of the original code authors are not. Nintendo clearly did not intend for you to poke around in the game's memory, and since this whole reverse engineering argument is based on intent, you doing so to make these codes is reverse engineering. Obtaining information on things like shield health from the data can be characterised only as reverse engineering as well. How do you think Gecko OS was made in the first place if not reverse engineering various aspects of the Wii? If reverse engineering is so horrible, why is it widespread in this community?
If the throw mod code was so incomplete, it simply should not have been published at all. Once it's published—in any form—it's fair game, assuming you respect my property rights to my own computer. The
only possible criticism of Thinkman here is how he initially lied about the origin of the code. Since there is nothing wrong with extracting the code from the gct, he should have just been honest that he did it.
PART 4: HOW WOULD YOU FEEL
Throughout this controversy, a large number of posts have focused on emotional appeals. “How would
you feel if somebody released your code without your approval?” or “How would
you feel if you weren't credited in exactly the right way?” Although part 1 already touched on this, I'd like to give a more explicit response to these questions.
The first thing to be asked of these emotional appeals is: why do they matter? People like the paprika killer are going to keep making codes whether AA credits him in his preferred way or not. So really, it doesn't matter how they feel.
But that response doesn't seem very satisfying so let me tell you how
I would feel. All of the software I write is
free—as in, you are free to do what you want with it, including modify the source and distribute your own modified versions of the software. I am quite all right with people incorporating my code into other programs and giving only minimal credit. In fact, even giving no credit does not bother me that much (as evidenced by part 1), so long as the work remains free (as in freedom).
I am the co-author of the most popular pokemon simulator,
Shoddy Battle. It is used by thousands of people every day to play five hundreds thousand pokemon matches per month. And the source code is freely available for people to do (almost) anything they want with. For example, one group used it as the battle engine in a MMORPG,
Pokenet. Notice how the credit to me and Shoddy Battle is minimal. They aren't deceitful that Shoddy Battle was used, but it isn't as obvious as the Brawl+ people would like. This is completely acceptable behaviour. Once I've released software, I understand that people are free to do as they see fit with it. If I don't want people to do something with software I write, I don't release it.
CONCLUSION
In this essay, I have resolved all of the issues at controversy. I have shown that “code as property” is nonsense, and I have shown that reverse engineering—far from being evil—is part and parcel of this community. Support for property rights dictates that codes can be used in any way whatsoever once they are released.