Developer Code of Ethics: On the evils of stealing someone else’s work

Tonight a viewer of the Summer of NHibernate screencast series I was having an IM conversation with was kind enough to point me to a blog post (http://dotnetmagic.spaces.live.com/Blog/cns!709F68A62F06375F!184.entry) wherein an enterprising young blogger (I’m going to assume its a ‘young’ blogger since I’d like to think that a more mature developer would have more respect for the work of others smile_baringteeth) has taken some effort to document exactly how to setup the UnitTest Utility class I wrote to interact with NDbUnit to support loading and resetting one’s database environment to support database-dependent unit testing.

Imitation is the Sincerest form of Flattery…

They say that Imitation is the Sincerest form of Flattery so perhaps I should be flattered, but I’m not.  Plagiarism isn’t a form of flattery in my book.

This blogger has even produced screenshots for his posting which are apparently taken lock-stock-and-barrel from the actual Summer of NHibernate code download(s) — this author didn’t even bother to change the project name, the class names, the filenames, or anything else about even the test project he’s documenting to exercise the unit tests before he clicked ‘PrintScreen’ to capture his screenshots.  Its all taken 100% from my work.  Even the DTO model, for god’s sake.

Worse, this person has clearly taken the Microdesk.Utility.UnitTest.dll and torn it open using Reflector or some other similar MSIL decompiler tool and then posted the actual source code on his blog (interestingly, after of course removing the Microdesk from the class namespace designations in the code he’s posted so it looks as though its his own effort).

This blogger is even kind enough to provide his ‘version’ of the utility (with the binary and the namespaces having the Microdesk removed) for download for anyone who might be interested.

Very kind of this person indeed.

…but Theft is Theft is Theft!

I intentionally didn’t bother to obfuscate the binary of this library that was provided in the Summer of NHibernate code download for several reasons:

  1. I and my company never intended to make any money off this ‘product’ (and its doubtful anyone would pay for it anyway since developer tooling is a very tricky market in which to make any $$$ now that the VBX days of yore are over)
  2. Its a little niche utility that contains no IP worth protecting; any other competent developer who might think about the problems this library is intended to solve would likely arrive at a very similar solution (even if whether or not they too would spend the 2006 superbowl halftime show hacking together the first working prototype might remain to be seen smile_wink)
  3. I always considered that if there was sufficient interest in the thing I would probably create some kind of ‘NDbUnitContrib’ project to parallel the main NDbUnit project and make the whole thing OSS for anyone interested to do with it what they will

But even given all this, to do what this person has done in the way this person has done it is just plain THEFT no matter how you ‘slice’ it, no matter how much or how little ‘technical’ protection I chose to put in place, and no matter whether any license accompanied the download. 

We can leave it to the lawyers to decide whether its OK to decompile the binary if I didn’t provide an explicit statement that this was disallowed and downloaders had to first mouse through a clickware notice to accept my ‘license agreement’ but no matter that — this was and is outright theft.

I’m sure many will say that I shouldn’t be at all surprised by this; after all, in a place the size of the Internet if something isn’t explicitly disallowed, someone somewhere is bound to actually DO it (and in fact even a lot of things that are explicitly disallowed are in fact still going on on the Internet as anyone who wants to find an mp3 file can readily attest to~!).

But consider for a moment that for a blogger to do what this person has done would seemingly require all of the following efforts…

  1. Watch my screencasts (at least the one that introduced this utility)
  2. Decide the Utility is useful to them
  3. Decide the Utility might be useful to others (and so is worth a. stealing it and b. blogging about it)
  4. Decompile the binary
  5. Fix the usual minor troubles that arise from decompiling any binary
  6. Strip the leading Microdesk from the namespace hierarchy
  7. change the compile output target name to eliminate the Microdesk from the assembly name
  8. change the tests in the NHibernateDataProviderTest class to actually get Customers whose first name is ‘Paresh’ instead of ‘Steve’ (no, I’m not kidding about this one, this guy actually did that smile_embaressed — go download his crap copy from the link on his post if you don’t believe me! )
  9. Write the blog post
  10. capture the screenshots
  11. post ‘his’ code and ‘his’ sample project for download

What I really cannot reconcile is how someone could actually choose to do all those steps (which are clearly a not-inconsequential effort) and yet also be of the mind that says ‘its ok for me to pretend that this is my work’.

Sudarshan Paresh= Blogger, != Developer

I don’t know that I will ever come to understand what neurons have to misfire in the brain of someone that would consider this ‘ok’ behavior, but if you, dear reader, or anyone you know happens to have any idea who this ‘Sudarshan’ actually is (I’m assuming his name is ‘Paresh’ since that’s what he replaced ‘Steve’ with in all the unit tests of mine he ‘claims’ to have written smile_tongue), give him a message for me: tell him he’s really nothing but a blogger and will never be a software developer because nobody I could ever call a software developer with a straight face would be caught dead doing what this ‘Sudarshan’ has perpetrated here with these actions.

Sudarshan Paresh is voted off my Island…for good

Respect for the work of others is an absolute prerequisite for entry into the club we call software engineering; its a pretty wide-open club that accepts nearly all-comers, but this is an unforgivable offense that has been perpetrated against all of us.  We all owe it to ourselves to let Paresh Sudarshan know that this kind of activity is grounds for being voted off the software developer island.

Shame on you, Sudarshan Paresh.

And that’s all I have to say.

Oh, except for one more thing: Sudarshan Paresh, I just posted a version of the utility that is compiled against the RhinoMocks 3.5 RC1 release, so you should download it and get started decompiling that one and making it available to everyone too.

Update: A commenter has pointed out that my original deduction that the blogger’s name was ‘Paresh’ from investigating his unit tests was apparently wrong, and his actual name (or at least Windows Live! identity) is ‘Sudarshan’.  In the interests of ensuring that my ire is correctly focused and nobody named ‘Paresh’ is inadvertently target by my disappointment, I have updated this post accordingly.

BTW, thanks to any and all that actually visited this guys site and posted comments for him that were…uncomplimentary.  I’m sure it won’t change his mind about what he did, but for me its the thought that counts so I appreciate the thougths of all of you on this.