The state of Open Source in the .NET ecosystem: A five year summary
I have been forcibly reminded lately that I have been doing this for quite some time. In fact, I have been doing working with Open Source on the .Net platform for over 5 years now. And a few conversations with friends have given me quite a retrospective on the state of OSS.Net.
5 years ago, it was 2004, .Net 1.1 was still a hot thing, and Stored Procedures on top of datasets where still a raging debate. Open source was considered a threat and Steve Balmer was busy blasting at any OSS project that showed up. The very existence or need for OSS on the .NET platform was frequently questioned.
I remember trying to find work in 2005, after over a year of actively working on Open Source projects and with Rhino Mocks making steady but sure progress in the .NET TDD community and not being able to leverage that experience into job interviews. It was only commercial experience that counted for the gate keepers.
The last 5 years have been quite interesting in the .NET ecosystem from the OSS world. It has gotten to the point where the use of OSS tools, frameworks and platforms is no longer a strange exception, but is quite common place.
There are several data points on which I am basing this statement:
- Books about OSS projects are commonly published.
- Microsoft is doing a lot to encourage OSS on the .Net platform.
- NHibernate’s download numbers are consistently above ten thousands a month, usually closer or above twenty thousands a month.
- I released Windsor 2.0 not even two weeks ago, and it has over 1,200 downloads already.
- The number of messages to the NHibernate users mailing list is usually above a thousands per month.
- My NHibernate course sold out and I have to do a repeat course to satisfy demand.
And then, there is my own experience, both as a member in the community and as a consultant. I see OSS being used quite often. A lot of my engagements are about OSS tools and framework, and I am rarely the person to introduce them into the company.
I think that there are several factors playing around here, but most of that is around maturity. The OSS players in the .NET world had had some time to work on things, and most established projects have been around for years. NHibernate is 6 years old, Castle is 5, Rhino Mocks 4. It is not the Open Source world that represent stability. With Microsoft replacing their data access strategy every two years, it might be best to use NHibernate, because it has been around for a long time already.
There is also the issue of maturity in the ecosystem itself. It has became quite clear that it is acceptable and even desirable to use OSS projects. And we have companies making explicit decisions to support Open Source projects (iMeta decision to donate 3 dev months is just one example, although the most prominent one). Recently I was working with a client on strategies for Open Sourcing their software, and how to manage a good Open Source project. In another client, a decision has been reached to put all the infrastructure stuff as Open Source, even newly developed one, because they are infrastructure. Infrastructure is seen as a commodity, and as such, there is little value in trying to make it unique.
There is a lot of value, however, in making it Open Source and accepting improvements from others. And I was able to point out to that client how outside contributions to the infrastructure has enabled us to do things that we would have to do ourselves.
Things are changing, I don’t think that we are at the balance point yet, but I think that we are seeing a very big shift, happening very very slowly. And from the Open Source perspective, things are looking quite good.
Comments
Much of the debate has been confused by the difference between Open Source and Free Software. The opposition really has had to do with the GPL, and unfortunately both sides of the debate confused Open Source with that particular license. The GPL proponents purposefully, and the opponents because they were confused. As that confusion has gone away with better understanding we are starting to see more of an embrace of Open Source.
That being said, the client I work for still won't touch open source. The reason is they have big corporate clients and when these clients send them security questionnaires there is a question on there "Does your software use Open Source?". So out of fear they avoid the question.
Good points, but I would argue that Castle (well, MonoRail in particular) has been far from "stable"--interfaces and inheritance contracts have been broken in "release candidates" in many unnecessary ways.
That said, without these open source projects, I doubt things like ASP.NET MVC, MSTest (maligned that it may be) in the Professional edition of Visual Studio, or Entity Framework would have happened when they did. So let's keep on trucking.
I totally agree wiith you. I've started to share my code with the community and to support .Net Communities actively. Three years ago I was working in a company where open source was seen as smoke in eyes. Now i run my own company and I'm thinking about opening all my code... there's no need to reinvent the wheel, it's better join an open source project and spend our efforts to build great software instead building all from scratch or porting every 2 years.
My first .Net project was using NHibernate and still today. Never used another data access layer up to now...
tnx.
And then there's Mono...
There are some mature OSS projects like Spring.NET and log4net that have been around for years.
One the other hand we have Microsoft Enterprise Library that is significantly changed once per year.
After this post I incline to think that it's better to learn log4net rather then logging with Enterprise Library.
@ Nicholas Piasecki: you got to be kidding, right?
Monorail had one major "breaking change" during its lifetime.
I say "braking change" because the change was in the API, not in the behaviour. thus a couple of hours of search-and-replace is all one needed to migrate.
On top of that, the introduction of IController and breaking up the Contexts was a huge effort, and a super important one. It was a significant improvement in the design, and allowed further changes and upgrades to be more easy, improved the testing ability thus made MR even more stable.
Now you stayed on the ancient RC2 for a very long time, and even though everyone involved in the project has always promoted the use of trunk, you just jumped ahead to do so in 2009 - about three years after.
This reminds me of people implementing Data Access in .NET, and trying to "improve" things by reusing IDbConnections and passing them around. then connections start to leak, then their DB hangs, then they blame ADO.NET. they simply ignore the best-practice that is given by the ADO.NET team (trust connection pooling - do not reuse IdnbConnections), then whine.
So - if you don't follow the best practices of the creators, please don't whine about it.
I've been a user of Monorail for almost four years now. Always for real code that goes to production. On many projects. And I followed the best practices of the team, and had a pleasure using that. That was way before I became part of the team, and is actually the reason I started contributing in the first place.
In a way I'm sorry for the rant, however what pissed me off was your saying on "unnecessary ways". Dude - it was necessary. If you don't like it - you can either stay on RC2, or come up with better patches, That's OSS.
And if you have a problem with the release cycle and wants to see MR2.0 RTM, you can always contact me and offer your help with that.
"Open source was considered a threat and Steve Balmer was busy blasting at any OSS project that showed up."
First they ignore you, then they laugh at you, then they fight you, then you win. - Mahatma Gandhi
Thanks for all the hard work.
@Jozef Sevcik
...and finally they join you (vide all MS-pl'ed projects like Silverlight tools, DLR etc)
Your link is broken: http://manning.org/rahien
One other thing to note is that dashCommerce has just been awarded a US Government contract, which means that dashCommerce will be used by the US Government. IMHO, this is a huge win for OSS - especially .NET based OSS.
Because duplicating software is basically free, there is an economic paradox at work: While it seems crazy at first to release code for free, it becomes clear under closer evaluation that sharing code openly is to one's own benefit in many cases.
No, we're seeing am embrace of Free Software. Things that are open source like Microsoft's various "Shared Source" initiatives but which are not Free Software have been largely ignored.
Good post!
The trend is definitely promising. Especially if you consider Microsofts small but significant step in supporting open source via jquery partnership.
But sometimes i can't help but wish it was going faster, there are still large islands where the misconceptions about open source still prevail.
And i am still waiting for Microsoft to support an open source .NET framework / tool instead of making their own (MSTest, MSBuild, ASP.NET MVC, TFS Build Server, Entity Framework, etc).
I still come across several companies with the attitude that if it's not the blessed Microsoft solution, it's not to be used in projects. Which is why even in 2009, I'm forced to write a data access layer. Maybe it varies greatly by industry or region.
It's a shame that MS will screw the .Net platform in a few years to force companies to upgrade and all your work will be forgotten.
"And from the Open Source perspective, things are looking quite good"
...yes i think this is surely true, but nobody talks about the possible
risks arising using OSS in real projects. Who knows how long the
contributors are be willing or be able to commit to the OSS? This is often an existential question for a company developing applications that must be sold over a couple of years. So you have to trust in continuous bug fixing and support. Sure you have the sources and could do it by yourself, but can a small or medium company offer the time frame and man power to afford this, mainly if the most employees have just moderate skills and are no Ayendes, Fabios, Krzysztof to name just a few?
Take GENTLE.NET for example. Years ago this was one of the ORM's
the .NET world talked about. And today...it's gone. Beside this, one
other problem case is documentation and support. In most cases the
documentations are pretty poor and good examples are missing. So
one has to invest hours and hours to google around the web to find
an answer or even a clue to solve one little problem. Sure you can
use the mailing lists, but even there it is mostly hard to get an answer.
So in my opinion these are some problems with OSS that leads
companies to take up the position "if it's not the blessed Microsoft
solution, it's not to be used in projects". I think this is a great pity, but
somehow understandable. NHibernate and Castle are both great
projects in technical terms. So why not for instance offering some
commercial support for NHibernate or Castle? That would spread the
word and could appease the decision makers...
So now I hope I will not be killed :-)
Belvasis,
First, I could point out quite a few commercial products that are now gone. And with OSS, you have the insurance policy of having the source. You can pay people to work on that. Usually, the project owners would be delighted to do so.
That is much harder to do with commercial software.
In addition to that, there are commercial support avenues for both Castle and NHibernate.
Castle Strong and Hibernating Rhinos are both companies that will offer commercial support for either.
Ayende,
you are right and we share the same opinion on that. What i wrote was form the perspective of the "managers". Right now I make some preliminary considerations about how our new application should be done. I want to use NHibernate and Castle but have to convince my bosses and they come up with the above arguments. Since they have poor technical knowledge it's hard to explain to them why it makes no sense to build an own DAL or why EF is n't a real alternative solution.
"It is from MS so it has to be good and will be good supported over the years"...this is the point where i have to come up with some good (nont technical) arguments :-)
Belvasis,
NHibernate is over 6 years old, Castle is over 5 years.
I would make the claim that they are much better supported than the other options.
All you have to do is remind them of L2S fate.
Comment preview