dmca/2017/2017-08-21-ZZZKBot.md

14 KiB

Are you the copyright owner or authorized to act on the copyright owner's behalf?

Yes.

Please provide a detailed description of the original copyrighted work that has allegedly been infringed. If possible, include a URL to where it is posted online.

https://github.com/chriscoxe/ZZZKBot which is a bot (AI) for the game of Starcraft: Broodwar. It uses the BWAPI library as an API for interacting with Starcraft: Broodwar.

What files should be taken down? Please provide URLs for each file, or if the entire repository, the repository's URL:

Two whole repositories, i.e.:
https://github.com/jasontody/storm
and
https://github.com/seontaek/storm

Have you searched for any forks of the allegedly infringing files or repositories? Each fork is a distinct repository and must be identified separately if you believe it is infringing and wish to have it taken down.

I just checked today and there aren't any.

Is the work licensed under an open source license? If so, which open source license? Are the allegedly infringing files being used under the open source license, or are they in violation of the license?

Yes - it is the GNU Lesser General Public License (LGPL) version 3. All files in the allegedly infringing repositories are in violation of the license, as I explain below:

The infringing repositories do not copy any of ZZZKBot's copyright/license (https://github.com/chriscoxe/ZZZKBot has files LICENSE.txt, COPYING.txt, COPYING.LESSER.txt, and mentions it in a copyright disclaimer comment at the top of every .h and .cpp file) and the infringing repositories contain an almost exact copy of over 2000 lines of all the source code I myself wrote (i.e. lines 81 to 2636 of https://github.com/seontaek/storm/blob/master/src/ExampleAIModule.cpp#L81-L2636 are almost identical to https://github.com/chriscoxe/ZZZKBot/blob/master/ZZZKBot/Source/ZZZKBotAIModule.cpp#L108-L2726). If you do a diff, you will see that apart from comments and whitespace differences, it is identical except:

FYI he did not fork in GitHub - he simply pasted ZZZKBot's code.

As far as copyright is concerned, I probably wouldn't have minded so much if he had made it clear it was based on ZZZKBot, but he hasn't as far as I know, and he even deleted ZZZKBot's copyright comment at the top of https://github.com/chriscoxe/ZZZKBot/blob/master/ZZZKBot/Source/ZZZKBotAIModule.cpp and replaced it with his own, pasting the following two lines verbatim from my code (I wrote these lines myself and I didn't paste them from elsewhere when I wrote them):

// This file was created by copying then modifying file // ExampleAIModule/Source/ExampleAIModule.cpp

I think this shows he intentionally removed my copyright and did not want to mention ZZZKBot or ZZZKBot's author and instead renamed it to ExampleAIModule, rather than forgetting to retain the copyright. Also, reverting the name to ExampleAIModule rather than e.g. "StormAIModule" might be an attempt to make it look as though he wrote all the code himself after copying ExampleAIModule.

Here is a detailed analysis of the diffs for each file in the repositories:

As-at today (21st Aug 2017), the master branches of https://github.com/jasontody/storm and https://github.com/seontaek/storm are identical (in fact, neither of the repositories have changed since 21st June 2017). I confirmed this by downloading the ZIP files then extracting them and doing a recursive byte-by-byte comparison of all files. All the file and folder names are identical.

There are only 4 files in each of his repositories. I will analyse each of them in turn, as follows.

https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.h:

It is clear that he renamed from https://github.com/chriscoxe/ZZZKBot/blob/master/ZZZKBot/Source/ZZZKBotAIModule.h to https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.h then edited it, rather than editing https://github.com/bwapi/bwapi/blob/v4.2.0/bwapi/ExampleAIModule/Source/ExampleAIModule.h because he uses "Reminder: don't" not "Remember not to" in line 12 (https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.h#L12): // Reminder: don't use "Broodwar" in any global class constructor! Note that ZZZKBotAIModule.h uses "Reminder: don't" whereas https://github.com/bwapi/bwapi/blob/v4.2.0/bwapi/ExampleAIModule/Source/ExampleAIModule.h#L4 says "Remember not to".

https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.cpp:

It is clear that he renamed from https://github.com/chriscoxe/ZZZKBot/blob/master/ZZZKBot/Source/ZZZKBotAIModule.cpp to https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.cpp rather than editing https://github.com/bwapi/bwapi/blob/v4.2.0/bwapi/ExampleAIModule/Source/ExampleAIModule.cpp because ZZZKBotAIModule.cpp contains many changes to BWAPI's ExampleAIModule.cpp and his file contains all the changes I made. See the analysis above to see other changes he made after he copied ZZZKBotAIModule.cpp.

https://github.com/jasontody/storm/blob/master/src/Dll.cpp:

It is byte-by-byte identical to https://github.com/chriscoxe/ZZZKBot/blob/master/ZZZKBot/Source/Dll.cpp except he removed the copyright disclaimer comment and added one line (line 2 i.e. is https://github.com/bwapi/bwapi/blob/v4.2.0/bwapi/ExampleAIModule/Source/Dll.cpp#L2 ) that says: #include <Windows.h> This change is required for compatibility with BWAPI 4.2.0 when he upgraded from BWAPI 4.1.2 to BWAPI 4.2.0 (you get a compiler error if you don't add the line).

https://github.com/jasontody/storm/blob/master/dll/ExampleAIModule.dll:

It was compiled from source code https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.cpp (which infringes, so ExampleAIModule.dll infringes too). The reason I know is because when I execute it using BWAPI version 4.2.0, its behavior clearly shows that it was compiled from https://github.com/jasontody/storm/blob/master/src/ExampleAIModule.cpp (not BWAPI version 4.2.0's ExampleAIModule.cpp). The reason is because it does not run using BWAPI version 4.1.2 (only 4.2.0) and it does not behave like BWAPI version 4.2.0's ExampleAIModule.cpp would do (which behaves very simply) and its behavior clearly shows the effect of the numbers used in the particular line numbers that I mentioned above, i.e.:

There are no other files in his repositories.

What would be the best solution for the alleged infringement? Are there specific changes the other person can make other than removal?

The GitHub support team should delete the whole repositories, like I said in my original takedown request. [private] at support@github.com replied to my original takedown request saying:

Hi [private],

We've received your updated notice, which I've included below for reference. Since your original work is licensed under an open-source license, please revise your notice to explain what changes the users could make to their repository to bring the project into compliance with the terms of your license.

The users would then be given 24 hours to make the requested changes. If no changes were made, then the repositories would be disabled.

You can read more about our process here:

https://help.github.com/articles/dmca-takedown-policy/#a-how-does-this-actually-work

After you've revised your report to include the required details, please make sure to resend the entire DMCA takedown notice, and not only the corrected sections.

Let me know if you have any questions. Once we've received your complete notice, we will process it expeditiously.

Please let me know if you have any other questions.

Best, [private]

Then I replied to support@github.com about six days ago saying::

Referring to the link you sent (https://help.github.com/articles/dmca-takedown-policy/#a-how-does-this-actually-work), step 3 says:

If the notice alleges that the entire contents of a repository infringe, we will skip to Step 6 and disable the entire repository expeditiously. Otherwise, because GitHub cannot disable access to specific files within a repository, we will contact the user who created the repository and give them approximately 24 hours to delete or modify the content specified in the notice. We'll notify the copyright owner if and when we give the user a chance to make changes.

I have alleged that the entire contents of the repositories infringe. There are only 4 files in each of his repositories, and the files are all small. Nevertheless, I have spent a lot of time doing due diligence by diff'ing and provide detailed evidence that the entire repositories infringe. So please skip to Step 6 like it says in your process? The process doesn't say anything about open source licenses. The entire repositories infringe. What does it matter whether it is an open source license? Copyright violation is copyright violation regardless of whether it is open source or not, and you shouldn't be more lenient about copyright violation of open source projects compared with other kinds of license. Authors of open source projects should have the same rights with regards to processes enforcing copyright violation as other kinds of license. The rest of step 3 makes it sound as though the only reason the user would need to be contacted is because GitHub cannot disable access to specific files within a repository - only whole repositories. In this request, the whole repositories infringe, so that doesn't seem like a valid reason why the user would need to be contacted - you can simply take them down. Your own process says you will take them down, so please take them down. If you still disagree, I suggest you update your process to state that the process is different for open source licenses, but like I said, I think authors of open source projects should have the same rights with regards to processes enforcing copyright violation as other kinds of license.

So, please could the GitHub support team delete the whole repositories?

Then the user should read LICENSE.txt and COPYING.LESSER.txt and COPYING.txt, so that you understand the terms of the GNU Lesser General Public License (LGPL) version 3 that you must abide by - for more information and guidance see https://www.gnu.org/licenses/gpl-3.0.en.html.

The whole repositories https://github.com/jasontody/storm and https://github.com/seontaek/storm should be deleted. Then create a fork of https://github.com/chriscoxe/ZZZKBot/releases/tag/v1.0 using GitHub. Then make your changes without deleting or modifying LICENSE.txt/COPYING.LESSER.txt/COPYING.txt. If desired, make a copy of LICENSE.txt to add an additional license for Storm, but whatever license you choose must retain the terms of the GNU Lesser General Public License (LGPL) version 3, and you should refer to ZZZKBot's LICENSE.txt in your license. Don't delete or modify any part of the existing copyright comments at the top of any source code files. Any licenses you add must be in addition to ZZZKBot's licenses (not replace them). If you want to add your own additional licenses/copyright comments, copy them alongside the existing licenses/copyright comments (e.g. add new files or insert additional comments above the existing comments). Don't lie about where you copied the files from - you copied them from ZZZKBot, not from bwapi! In your documentation (e.g. in README.md or README.txt), state that the bot is "based on https://github.com/chriscoxe/ZZZKBot/releases/tag/v1.0 which is the AIIDE 2015 version of ZZZKBot by [private]". I suggest you rename ZZZKBotAIModule to StormAIModule (not ExampleAIModule because that is misleading - it is not based on bwapi's ExampleAIModule).

Do you have the alleged infringer's contact information? If so, please provide it:

Yes. [private]

Type (or copy and paste) the following statement: "I have a good faith belief that use of the copyrighted materials described above on the infringing web pages is not authorized by the copyright owner, or its agent, or the law. I have taken fair use into consideration."

I have a good faith belief that use of the copyrighted materials described above on the infringing web pages is not authorized by the copyright owner, or its agent, or the law. I have taken fair use into consideration.

Type (or copy and paste) the following statement: "I swear, under penalty of perjury, that the information in this notification is accurate and that I am the copyright owner, or am authorized to act on behalf of the owner, of an exclusive right that is allegedly infringed."

I swear, under penalty of perjury, that the information in this notification is accurate and that I am the copyright owner, or am authorized to act on behalf of the owner, of an exclusive right that is allegedly infringed.

Please confirm that you have you have read our Guide to Submitting a DMCA Takedown Notice: https://help.github.com/articles/guide-to-submitting-a-dmca-takedown-notice/

Yes, I have read it.

So that we can get back to you, please provide either your telephone number or physical address:

[private]. If possible, please do not share my contact details with the alleged infringer. I am GitHub username chriscoxe so GitHub already knows some of my contact details.

Please type your full legal name below to sign this request:

[private]