Wednesday, November 07, 2007

I heard some great news earlier in the week and just got around to checking it out. There's another C# implementation of the BitTorrent protocol being developed! Good stuff! They've been working on it for about a year, and have "the core of the beast" pretty much complete. Thats great stuff! Considering i thought i was the only person with a C# based bittorrent implementation, i thought it'd be great to have a chat with them, see how they solved different issues etc.

So, about 15 mins ago, i loaded up that link and decided to download their alpha client, just to see how it works etc. Thats when i became seriously pissed off.

Without even having run the 'alpha client' i realised that the seedpeer codebase was actually MonoTorrent*. Yes, these guys had the cheek to take my code and pretend it was theirs. They tried to pass off about 18 months of my development time as their development time, without so much as giving me credit or mentioning that they were, in fact, lying when they said "we have almost finished coding the core of the beast". The worst thing is, they weren't even smart enough to do it properly.

So, for anyone out there who has actually used SeedPeer, or has a blog who've blogged about it, please try to make it known that seedpeer == MonoTorrent, except that they don't even use all the features i have available. For example, here's there 'TODO' list:
  • MultiTracker
  • Torrent Creation
  • Custom DHT (faster)
  • Rss Feeds
  • Integrated Search Function (with commenting)
  • Custom Peer Exchange
  • Fast Resume
  • Global/Per torrent Settings
  • Download Priority
  • more...
Here's a list of the features that are already in monotorrent that are in their TODO list:
  • MultiTracker
  • Torrent Creatio
  • Rss Feeds
  • Fast Resume
  • Global/Per torrent Settings
  • Download Priority
  • more...
I suppose this is what you expect by making the code public. People will use it (which is what i want), but then they'll try to pass it off as their own (which is just plain wrong). So, if anyone wants to email the seedpeer people, their contact form is here, so feel free to let them know you know ;) Also, if you want a nice GUI for monotorrent, check out www.monotorrent.com :)

* Yes, i am 100% sure of this. I haven't used reflector to verify, but i'm 100% sure that at least 95% of the code is a direct copy/paste from monotorrent. It might even be 100%. If someone is bored, they can use reflector (or whatever) so they can see i'm not lying. No better proof than looking yourself.

Also, if the seedpeer guys do read this, using an obfusticator won't prevent me from recognising my own code. I can think of a dozen ways offhand to check if a client is my client without having to see the code. It's ridiculously easy.

EDIT: For those of you who know these things, The middle paragraph of the MIT/X11 license states:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Does that mean if they distribute a binary, they have to include that license header in some form or other?

16 comments:

Anonymous said...

Here's the comment I left on their site:

Hi folks,

It's pretty disgusting that you've stolen a codebase and passed it off as your own. You could have just tried, you know, contributing, or attributing, or any one of a number of "-ings" which would have been both ethical and legal. Instead you've resorted to theft.

Now is the time for another set of -ings: apologizing, and reconsidering. If you have the basic decency, but given your actions in the first place, I doubt it.

Have a shitty day,

Me

Anonymous said...

Alan, since you've released the code under the X11 licence, they are not required to give you any credits. Sad but true :-(

Alan said...

Aye, they are not required to do anything. They can make any number of changes they want, they can charge for it, use it in a commercial application, whatever. I don't really care what they do.

The thing is, they're lying. It's not that they just didn't say, it's the fact that they blatantly *lied* about developing the code. They pretended they were working on the code for a year or more, when in actual fact they probably just copied and pasted the code I've been working on (for well over a year) last week and released it.

They're under no obligation to say anything or do anything, but it's common courtesy.

It would have been interesting watching them 'implement' that list of TODO's by adding 3 lines of code to their GUI and then claim "Look how fast we're implementing features" when in actual fact they were just calling into what was already there.

Finally, while the code is under the MIT/X11 license, I still own the copyright on it. Last time i checked, that still means something ;)

In fact, i'd be willing to bet they violated the MIT/X11 license by removing my license headers. This, i believe, makes it illegal for them to use my code. Read the middle paragraph in the license:

http://www.opensource.org/licenses/mit-license.html

Amber said...

Alan,

I appreciate that you are trying to light both sides by still insisting that code should be open, and this sort of thing might be expected to happen once in a while.

However, what strikes me as 'psychologically' out-of-zen is your apparent reluctance to provide any proof.

Why no just show the steps to verify the signature - if it is that rediculously easy :_

You are not disclosing anything secret or something. After all, otherwise the code would'nt be genuinely open in the first place. [let that sink in]

It would fit the 'no weapons' attitude of open-source dev.

Alan said...

Ok, the method used to load the torrents (placing .torrent files in a directory called 'torrents') is exactly the method used in my sample client.

The screenshot of the console app shows the tracker message is 'AnnounceSuccessful' (one word). This is gotten by calling .ToString() on an enum i've defined, similarly for 'ScrapeSuccessful'.

The 'Tracker Message' "The tracker could not be contacted" is also exactly the same as the hardcoded string i use in monotorrent.

The client still has the same hardcoded limits as in my test client for upload speed and download speed. (100kB/sec down and i believe 25kB/sec up, it might be 20).

Then there are more advanced behaviours which I could check if I was so inclined which cannot be faked no matter how much the code is obfusticated or altered.

Igor said...

That's sad... lets use GPL from now on :)

j/k, anyway there's a good thing about it... MonoTorrert *IS* the only Bittorrent C# implementation.

Anonymous said...

Actually, monotorrent is not the only C# bittorrent lib.

It is the only from scratch, fully OSS bittorrent lib.

Btsharp is closed source, written in C# and supports torrent. And there's an open source C# port of the old Python mainline lying around unmaintained somewhee.

mdi said...

It addition of being poor taste to try to pass someone else's work as yours and being deceptive about it (pretending that they had been working for a year) the person has few chances of maintaining a good product because he is not familiar with the code base.

Chances are, he wont be able to bug fix it effectively, he wont benefit from peer review, he will diverge from the codebase and all of that for no good reason.

If he was writing a paper he would have been failed for trying to pass someone's work as his.

Miguel.

dBera said...

Just curious, I compared the output of "strings" for the both the exes. No wonder there were matches. Then even more curious (and sort of challenged by one of the SeedPeer devs in one of the comments) I did a "monop2 -p" (and removed the Monotorrent/Seedpeer namespace). There was whooping 109 matching class names! Boy ... they should at least learn how to steal better.

Alan said...

"and sort of challenged by one of the SeedPeer devs in one of the comments"

Did they try and pretend that they didn't rip off monotorrent? What exactly did they say (if you remember). www.seedpeer.com is down at the moment so i can't read the latest comments. I'm just wondering what logic they used to try and defend themselves.

I wonder what would happen if i did a binary comparison of their .exe and my .dll files. I bet i'd get a ridiculously high % matching.

With 109 class names matching (and probably only about 109 classes in the library), i think that's pretty damning proof that they ripped off monotorrent, especially when taken with my previous comments.

dBera said...

SeedPeer is down since I post my last comment. ^_^ I wish I was a conspiract theorist :)

I only mentioned that I found a lot of common strings in the output of "strings", and some of them look more than a mere coincidence. One guy told me to go right ahead and post the list and claimed that to prove everyone wrong, he (they) are going to open-source the client once its done. I accepted the challenge, posted _some_ of the common strings (chose the private names in MT source code) and the site is down since then :-/

Anonymous said...

The site is back up but all traces of the rip off client seem to have disappeared. I guess they realised they weren't going to get away with it.

Anyhow, I'll be keeping an eye on the RSS feed in case they try to slip it back in.

Andy

dBera said...

They blocked my IP! Thats why I friggin could not access their website. I tried another computer and now I can access their site. All the articles from 29-32 are deleted (the offending article in 31.html). I pdf-ed that article from my FF cache, email me dbera.web_at_gmai... if you need it.

I so want to blog about it and also post the "monop2 -p" output, running out of time right now. Its such a disgusting behaviour.

Anonymous said...

Hi Alan,

this is a disgrace to the developer community. OTOH, I doubt these people are developers, if they were, they'd know about licenses and wouldn't lie about who developed the code.

Btw, I have a fairly complete (from scratch, not a port) C# BitTorrent implementation too. If you'd like to discuss various issues (particularly DHT, I'm about to implement that next) feel free to email me at ntorrent . 20 . draza at spamgourmet . com (email slightly obfuscated [remove spaces], will respond with my real email when you contact me).

Regards,

Drazen

Lacadaemon said...

guys leave out the evil DHT

when trackers are using ipfiltering with a BlueTack blocklist to stop anti-p2p peers from logging swarms then the evil DHT is letting them back in

drop the evil DHT, it is well wrong

successwithusana said...

Really helpful data, lots of thanks for the post.

Hit Counter