A Little Too Familiar
Last week an app appeared on the App Store under the name of "Homebrew Indie Games". This app, at first glance, seemed like any other legitimate app on the app store, however, on closer inspection it looked a little too familiar.
Homebrew Indie Games was first brought to my attention by @pheraph on twitter. This app claimed to bundle 18 'free' homebrew games for retro consoles such as SNES, NES, Genesis and GBA.
Coincidentally those are some of the same systems supported by Provenance, my Open Source emulator front-end.
Provenance is made possible by the hard work done by the developers of the included emulators and the OpenEmu and RetroArch teams. I'm more than happy to acknowledge their work, because A) they worked very hard to bring these emulators and libraries to life, and B) because the open source licenses require me to do so.
And that is one of the things Homebrew's developer didn't do when he took the source code to Provenance, bundled a few homebrew games with it and sold it on the App Store for $2.99.
The second, and arguably more serious, violation of the Open Source licenses was that Homebrew was being sold. Most of the emulators used within Provenance are under strict non-commercial licenses, which forbids anyone to sell that code. Homebrew's developer was all too happy to ignore these license terms and profit from the hard work done by other people, while taking the credit for it at the same time.
Nowhere did Homebrew's developer state that the code:
- was derived from Provenance
- included the emulators from:
- included code from OpenEmu
- included code from LibRetro (RetroArch)
- included 18 homebrew games licensed under a Creative Commons, Attribution, Non-Commercial, No-Derivatives license
Similarities? More Like Identicalities!
I believe the initial complaint to Homebrew's developer was sent by RetoArch after they thought he'd possibly misappropriated their code without attribution and sold it. In an effort to prove Homebrew was not using RetroArch, the developer did probably the most self-damning thing he could have done and sent some of the source files from Homebrew to RetroArch for inspection. RetroArch noticed the OpenEmu code and told them and OpenEmu told me.
It was immediately obvious that the code in Homebrew was exactly the same as the code in Provenance, with the minor exception that the class names had been changed to remove the
PV prefix and replace it with
HB... so crafty
Take a look and decide for yourself:
Four diff'ed source files from Provenance and HB. Provenance is on the right, Homebrew on the left in each image. Click for larger versions.
In fact, one of the funnier parts is where they had obviously done a search for
core and replaced it with
engine as you can see in last image above where
<QuartzCore/QuartzCore.h> was changed to
<QuartzEngine/QuartzEngine.h>. That code would not compile, generating a "header not found" error, making it plain as day that the search and replace was done only before sending the code to RetroArch, and not before compiling.
With this evidence, it was 100% clear that Homebrew's developer had not written the code they were claiming as their own, and so on the recommendation of the OpenEmu team, I submitted a DMCA complaint to Apple.
It took a day of waiting, but Apple eventually issued the DMCA complaint to Homebrew's developer, and the app disappeared from the App Store.
A couple of hours later I received a somewhat bitter email from Homebrew's developer telling me they'd already removed Homebrew from the App Store and that it had been unplublished hours before receiving the DMCA notice. I don't know how true that is, but I take it as a victory for Open Source that the app is no longer for sale.
Open Source doesn't mean "do what you want", despite many people thinking that it does. Open Source is about community, sharing, attribution and trust. Developers working together towards common goals and sharing solutions so that the community benefits from their hard work. Developers of Open Source projects are most commonly doing so in their own free time and not being paid for it. They do it out of love for the project and the community that builds around it.
When someone violates that trust and community spirit, stealing hard work from people in an effort to profit, the community is hurt. Developers become less engaged and more reluctant to provide free (as in speech) code to benefit the community.
So in the future, if you plan to use Open Source code, please read the license accompanying the code and abide by its terms, it's there for a reason.