Friday, 9 April 2010

Invention is not invented here

In keeping with the subject matter, I want to rip off my own Go FUBUMVC yourself post by rehashing the idea and writing about it again.

It is a blatant rip off of the last post.  It is lazy and requires little thought.  I could write about something new but why bother when this is guaranteed to get some traction.

Now on with the show.........

Not a week goes by without my RSS reader mentioning a new .NET OSS project that is a complete rip off of an existing project.

The latest one to sadden my eye is the AutoPoco project by Rob Ashton.  We already have NBuilder and AutoFixture so what on earth do we need another one of these for?  

It then turns out that Karl Seguin or whatever his name is states that he wants to write another validation framework.  Are you absolutely mad? Another one?  We already have 3,089,298 validation frameworks muddying the waters and taking the word diversity to new levels.   What do you really hope to achieve by writing another validation framework?  Maybe we can really abuse lamdas into a totally ridiculous syntax.  Why not put a fluent interface on top of a fluent interface.

I think what saddens me the most is how many man hours are required for the new project to get into a state of parity with the existing project that is being ripped off.  

We will never compete with platforms like Ruby on Rails without invention or innovation.

There are of course some less time consuming acts that you can choose rather than a total rewrite of an existing system:

  1. Get involved with the existing project you are about to rip off.  This will never happen as the developer wants his name on the door.
  2. Fork the code of the existing project and save yourself the hassle of having to write all this crap from the start.
  3. Write another IoC container. 

I am further saddened by the fact that the developers in question are probably quite talented and could put this time to the betterment of the .NET ecosystem.

My theories as to the why of all this blatant plagiarism are this:

it is time consuming to find a worthwhile problem to solve.  

This time could be spent writing code.  Finding a good problem means placing your brain in unfamiliar places.  I know myself how difficult this is after spending two months coming up with a MicroIsv product idea to pursue.  My urge to go down the familiar routes of project management and CRM was strong but I stuck with it and eventually came up with a product I was able to in some ways convince myself has potential and has a market with some good and testable market research.  

I just want to write code

As developers we want to write code, we do not want to create mindmaps or brainstorm through a list of possibilities before going through the whole process again to define the problem space.  I could easily pop out a mocking framework or a .NET build engine in the same time with less effort.

I might fail

I know about failure on this front more than most as in a lot of ways horn has been a failure.  It is certainly a failure in the community I tried to build around it and it still has some failings in the technical solution.  I can though say I tried.  I can also say that my mind was placed in some very unfamiliar and unusual places as I thought about the problem.  With a pre-defined problem space like AutoPoco is ripping off, what do I learn on a non-coding basis.  Free your mind and your ass will follow.

Why not pick an existing problem and rewrite it?  I can change it slightly to my needs and if all else fails, I can always look at the source of the existing problem.

I will now court ultimate controversy and hatred from the .NET community by stating that one of its favourite son's is the ultimate plagiarist.

I speak of course of Ayende, before I list his list of similar projects, I do want to say that the guy has done amazing things for the community and at one point I looked forward to his blog posts with glee.  He has done more than most which is why I find it frustrating that he has not used his talent for more innovative ends.

Did we need another MSMQ with Rhino Queues?
Do we need another document database?
Do we need another memcached clone?
etc., etc.

The answer to all the above is no and I would say his most innovative project to date is NHProf which is ironically commercial.

I expect any Ayende sycophants reading this who take crawling to their master to new and sickening levels to proclaim a jihad against me.

Come and have a go if you think you are hard enough!!!!


  1. From what I've seen, the additional frameworks have done nothing but benefit others. One IoC container implements and improves on ideas from others. You, as a developer, are overwhelmed by choice. However, it's this diversity that's critical to the overall advancement in design. I'm not sure you can have your cake and eat it too.

  2. @Jimmy - I agree with you to a certain extent but it seems like we have taken this a step to far.

    It now seems OSS projecs have to accomodate every IOC container which means you end up working to the lowest common denominator or trying to implement the IDependencyResolver interface whch means you lose the power of the IOC you are using. This negates the benefits of the IoC you are using.

    I think the IDependencyResolver should not be taken seriously.

    For the record, I think automapper has been a nice bit of innovation and something I use in my deay job reguarly.

  3. One response coming up!

  4. Do you follow the ruby community? They have hundreds of different solutions to every software development problem. It's certainly not hurting their innovation.

    If someone wants to write another IoC tool and share it with the community, what's so bad about it? It could have a nice feature, that inspire another developer to write a even nicer feature and so on. And if this new tool turns out to be a complete clone of an existing one, nobody is losing anything.

  5. The only other entity with this opinion is Apple, do you really want to be banded with that lot? ;-)

  6. You'd better not go looking for OSS text editors. Still don't know why everyone doesn't use vim. It does everything right, quick to use, low memory footprint. Why would anyone want to write another, not so good text editor. Why doesn't everyone submit a patch or a fork for that? And look at the dearth of innovation in the oss world that has resulted.

  7. This is the point I am trying to make.

    Everybody wants their name associated with the new IOC, new mocking framework, new text editor etc.

    Each time somebody wants something new, they completely rewrite the solution in order to add their new functionality.

    The better answer is to refactor the existing to enable new functionality to be added.

    Never happens though.

  8. Do you think Castle's IoC framework would be better if was a refactored version of Spring.Net?

    Or Eclipse would be better if it was a refactored version of vim?

    Sometimes a fresh start is the best approach.

  9. Sometimes it is and I am not trying to say there is one of everything.

    What I am trying to say is that it has got a bit silly. The same frameworks or concepts are copied time and time again.

    Nothing new seems to come up.

  10. Instead of all the bashing and hate, could you write a blog post explaining your ideas with horn, plan future releases, create a mind-map of its dependencies, its future features, what problems needs solving and how horn now differs from rubygems?

  11. The point is not to bash and hate, the point is to draw attention to the amount of man hours that are being wasted in countless duplication of ideas.

    Now it seems that every new OSS project tries to cater for every IoC container which dumbs down the effect of the individual IoC.

    All this choice leaves to splintering with adoption of standards ever more difficult.

  12. I think the crux of the problem is that some very talented people spend their time rewriting existing frameworks, creating tools that aren't needed and looking for "cool" ways to solve problems that have been solved for years, rather than putting that effort into (for want of a better term) out of the box stuff.

  13. It is indeed the waste of talent that is annoying.

    ALT.NET has turned into clone-a-framework.

  14. So now that RavenDB has been released and shown to be massively different from efforts such as Couch or Mongo are you going to take that last bit back?

  15. Thanks for the information, we will add this story to our blog, as we have a audience in this sector that loves reading like this” web development