Open Letter to the .NET community, Jan 15, 2012
Going open-source for a niche .NET product (ImageResizer) is a very risky move. I did it with the optimistic view that at least 1 in 10 developers would be honest enough to buy licenses for the paid plugins they use. With 100% customer satisfaction rate across thousands of users, I expected more loyalty.
So far, only 1 in 25 have paid for the paid plugins they are using. I'm not even counting the much larger percentage of users that don't need any of the plugins, who don't have the traffic to justify disk caching, and don't need HQ GIF or advanced file format support.
The .NET software community is notorious for its treatment of open-source projects, but I hoped (and still do) that they were slowly becoming more intelligent, and realizing how self-destructive that behavior was. Nearly every other community has realized how the open-source model produces better quality code, but extremist capitalism still seems to be the norm for .NET. No intelligent reasons for this behavior remain, but who will mend their habits and shed the FUD first?
Someone has to change things, but who will start? How do we make the community less selfish and more willing to collaborate? CodePlex proved that while many .NET developers will donate their existing work, few are humble enough to collaborate with existing projects instead of building their own. I count 18 image processing-related projects on CodePlex; all with just 1 developer each, and none are maintained. Yet together, they could have created truly great software, instead of buggy, unmaintained, single-person's purpose libraries. Enough interested people in a project can keep it maintained and supported.
This project, although primarily supported, funded, and maintained by myself, seems to have received more community code contributions that any other similar .NET library. I actively encourage people to share code, and provide very high priority support to anyone doing so.
But it's still a fraction of the amount of sharing I see in, for example, the Ruby community. With Ruby, there's enough eagerness to help that you really don't need to charge for anything to keep it maintained. People apply patches, and you accept or deny them with a few buttons.
With .NET, 85% of the support emails reporting a problem don't even include an error message. I'm happy with getting a stack trace from .NET devs. When people share patches or plugins, I'm astounded.
I've tried to make this project easy to use in all senses of the phrase. The core and half the plugins are free, the paid plugins only cost an average of $15 each, and I provide free e-mail support. I answer 70% of questions within 1 hour (that's 451 of the last 647). I always make sure every problem is resolved. I've made the licenses allow insane amounts of freedom, and they're as business-friendly as a license can be. Microsoft could buy a bundle for $250 and use it across the entire company, re-using it in both proprietary and open-source projects.
I know that roughly 40% of my users live in a developing country, and have a very justifiable reason for any piracy they may commit. That's fine by me. If you have a hard time feeding your family, I certainly don't want your money. I feel the pinch of grocery bills myself. But if you live in the USA or the UK, it's unlikely that you're in that situation.
If you're a business employee and you don't bother buying a license because it's just too much paperwork or bureaucracy; well, I can't say I have much respect for you.
Businesses reap the largest gains from using open-source software, but because it's not a personal relationship, most employees feel like their hands are washed when the business doesn't bother sharing back with the project in code, money, or credit.
That's self-destructive to the business. Businesses need software that sticks around and stays maintained. Open-source software is three times as likely to stay around and stay maintained as proprietary code libraries (based on my personal, painful experience), yet some companies are still more willing to pay money to a proprietary library that figuratively locks them in a cell than to donate a quarter of the same amount to an open-source project they use to ensure it's continued existence and that their feature requests will be met.
Open-source libraries are so much more efficient with money than dev software companies that comparison is absurd. You can often get a change made to an open-source project for $100. Proprietary? You'll need a 10K partnership deal. Enterprise license? 100k plus royalties. And usually, the open-source project could be sustained for a fraction of the cost.
Open-source .NET is, admittedly, a challenge. You need very expensive dev tools, servers, and profiling tools; there are constant costs associated with developing in it. And developing re-usable code for ASP.NET is a nonstop job. There's a new bunch of bugs delivered with every OS update, a newly broken API every release, and performance challenges built into the framework that keep you running ILSpy non-stop. Supporting every combination of IIS and .NET is something few people even attempt. But it can be done.
I believe open-source can survive in the .NET community. It may be a decade before it thrives, but I think it can survive.
This project is a hybrid. It's half pure, MIT-style, open-source, and half 'licensed' MIT-wannabe open-source. Businesses aren't fond of spending money they aren't legally obligated to, so I've taken that into account while preserving as many of your freedoms and their freedoms as possible. I'm trying to show that open-source in .NET is possible for middle-size systems; those without big business sponsors, but too big to be a side job for a person.
Some day, I hope to make this entire project 100% pure open-source, without licensing fees for any of the plugins. I look forward to when the community has shed its selfishness enough that it can maintain what it uses; fix what it finds broken. But that day seems far off from where I stand, seeing less than 0.8% of users contribute anything back to this project.
By making only the more specialized plugins 'paid', I made the software free for 80% of users. I need you, the 20% that uses these plugins, to be honest, if you can.
If using these without paying, contributing, or publicizing in return makes you feel a little guilty, then please clear your conscience by giving back in some way. If you don't feel any guilt, well, this letter wasn't written to you.
I believe that more than 4% of you are honest. If the number had been 15%, I would never have written this letter. But 4%? Really?
I hate DRM - I see it as being both destructive and very ineffective. But I now understand its attraction; and how anger and sadness can make it seem justified.
Don't make me resort to license keys, protected downloads, or any other shallow methods to encourage honesty.
Please prove me right. Prove open-source can work, even in the .NET world. Share something. Give back something in kind. If you're time-poor and money rich, buy a license. If you're money poor and time rich, build one of the plugins on the ideas page. If you're poor of both, try to tell other people about the project, either in person or through your blog. Think about every open-source .NET library you use and love, and try to help each one in some way.
Make us glad we've gone open-source. Prove you're worth it.