reDiverse.NET
This post is a reply for this post, you probably want to read that one first.
Basically, the problem is pretty simple. It is the chicken & the egg problem. There is a set of problems where it doesn’t matter. Rhino Mocks is a good example where it doesn’t really matter how many users there are for the framework. But there are projects where it really does matters.
A package management tool is almost the definition of the chicken & egg problem. Having a tool coming from Microsoft pretty much solve this, because you get a fried chicken pre-prepared.
If you look at other projects, you can see that the result has been interesting.
- Unity / MEF didn’t have a big impact on the OSS containers.
- ASP.Net MVC pretty much killed a lot of the interest in MonoRail.
- Entity Framework had no impact on NHibernate.
In NHibernate’s case, it is mostly because it already moved beyond the chicken & egg problem, I think. In MonoRail’s case, it was that there wasn’t enough outside difference, and most people bet on the MS solution. For Unity / MEF, there wasn’t any push to use something else, because you really didn’t depended on that.
In short, it depends :-)
There are some projects that really need critical mass to succeed. And for those projects, having Microsoft get behind them and push is going to make all the difference in the world.
And no, I don’t really see anything wrong with that.
More posts in "re" series:
- (19 Jun 2024) Building a Database Engine in C# & .NET
- (05 Mar 2024) Technology & Friends - Oren Eini on the Corax Search Engine
- (15 Jan 2024) S06E09 - From Code Generation to Revolutionary RavenDB
- (02 Jan 2024) .NET Rocks Data Sharding with Oren Eini
- (01 Jan 2024) .NET Core podcast on RavenDB, performance and .NET
- (28 Aug 2023) RavenDB and High Performance with Oren Eini
- (17 Feb 2023) RavenDB Usage Patterns
- (12 Dec 2022) Software architecture with Oren Eini
- (17 Nov 2022) RavenDB in a Distributed Cloud Environment
- (25 Jul 2022) Build your own database at Cloud Lunch & Learn
- (15 Jul 2022) Non relational data modeling & Database engine internals
- (11 Apr 2022) Clean Architecture with RavenDB
- (14 Mar 2022) Database Security in a Hostile World
- (02 Mar 2022) RavenDB–a really boring database
Comments
Also...
-Unity was released quite some time after the community had recognized the virtues of IoC, leaving ample time for the OS frameworks to gain the needed mass
-MonoRail on the other hand was released when most developers still thought that WebForms was the way to go, and, what's more, it's a front end (UI) framework. I think it was easier to sell to management or customers that "we're building your app in ASP.NET (Web Forms) .........(lowers voice).....with an .......ehrm.... OR-mapper based back end..." rather than "We're building it using MonoRail. What? Never heard of it? .....But we have a standard MSSQL backend!"
-Entity Framework v1 was just so intensely bad that no one dared to use it.. v4 does provide a bit of competition though
While it's sad that we had to wait for MS to provide us with NuPack, at least I think we can rejoice the fact that MS has now provided us with a chicken and the rest of us can start producing eggs. A good package management story can really drive OS adoption, even in MS land.
I don't think NHibernate is at that point. Imo, if ef reaches a point where it don't sucks, it'll be dragged by the "it isn't a blessed solution" vortex.
I wish MS would just put a stamp of approval on NHibernate instead of continuing with EF.
It seems to me that there is irrationality in Microsoft when it comes to decision making about building from scratch or improving/forking existing os-projects. The obvious examples are EF and internet explorer (why not fork chrome and change the ui back to IE9's ui so that only techies will notice?).
Developing EF was unnecessary. Improving NH convenience, writing proper linq support and some ui tools would have solved the problem better in many ways.
After all they are giving the tools and libs away for free anyway. They do it to build the ecosystem.
Hi Oren,
Thanks for sharing your thoughts. I think it is important to note that I believe the problem is more fundamental than outline here. I believe that the .NET space should be open to competition. There is no reason that the ORM choice need be limited to NH or EF. Why not something else if that emerges. There is no need to choose Monorail or ASP.NET MVC. Why not choose OpenRasta or FubuMVC?
I don't think this is OSS alone. I believe it als applies to commercial offerings. The point is the tendency of the community toward favoring a monoculture. Now in some areas market leaders that everyone adopts because they are the best solution will doubtless emerge, but we will never escape the resulting monoculture if the community is not open to discussing and talking about alternatives.
I believe that EF would never have reached anything like the feature set of EF v4 if it had not had to compete with NH. Why would MVC 3 have emerged if OpenRasta and FubuMVC did not keep trying to raise the bar. The IE experience suggests that once MS owns the space, they stop investing and innovating. We need that competition for the framework to thrive.
Consider from your own point of view. If MS releases a NoSQL solution, don't you want there to be competition?
The argument that there should only be one package manager folds under scrutiny. There needs to be a consistent standard for package definition, but not one package manager.
MS needs to define the contracts to allow other implementations to flourish. Without a shift in perspective we will not get the innovation the platform needs to thrive.
What are MS protecting here. None of these pieces generate revenue for them?
Ian,
Because it just makes sense to have few big projects (or even just one), than a lot of small ones.
It avoids fracturing the eco system, for one thing. Look at the Java world, and you see plenty of cases that just having so many choices is causing problems.
Oren:
With all due respect, would you think the same way if Microsoft announced today a half baked NoSQL solution implemented on top of .NET?
I'm not talking about the chances of that happening, simply if you would feel the same way IF it did happen...
@Ian,
"What are MS protecting here. None of these pieces generate revenue for them?"
This is the same "Steve" from the Codebetter thread. Microsoft generates revenue in a different way than most companies. By giving .NET (even half assed) that exist as OSS projects, they keep their customers on the product, and just keep racking up license fees.
Sure, we all know that on it's own, EF isn't as good as nHibernate, but it's a heck of a lot better than "hand rolled ADO" vs. nHibernate. So a customer who might have been scared to incorporate an ORM now has little fear in adopting EF4, even if it is only 75% as good as the best out there, because that's still infinitely better than what they've got.
All the while, it keeps a corporation tied to the Microsoft Stack, and they collect hundreds of thousands of license fees.
Ask yourself, and I mean this seriously, if you ran a company (and therefore made all the money decisions) and you magically had the ability to have the same level of expertise across all platforms, would you ever chose a Microsoft stack for anything? The answer to that is no, except for maybe Windows apps. But the reality is, Microsoft finds a way to get thousands of companies to pay them hundreds of millions (if not billions) of dollars for the right to use substandard software (from their servers Servers and IIS, to Web Forms, to Lightswitch, to SQL Server, to anything else you can imagine).
It's actually quite mind boggling when you really think about it. As an Economics major, I was taught waaaaay back in ECON 101 that this wasn't possible, but it obviously is.
Oren,
if it "makes sense to have a few big projects (or even just one)", surely you can see where MS not contributing to either NuProj as it existed or OpenWrap effectively gets us exactly to that fragmented space?
And surely if that was the case, most people that are now rejoicing about Microsoft providing a .net solution would've joined working on the existing .net package manager that was being worked on?
I can't quite make sense of the logic in this post and your comment. Both thesis are completely incompatible.
Just to be complete. Microsoft didn't get behind a project and pushed it. They went away and built a different tool undercover, then got to adopt the project name of the guys they showed it to, which then decided to ditch what they had and join MS with their new stack.
I'm getting increasingly concerned that the storyline is MS getting behind NuProj. It's not, it's not how it happened and it's not the end result.
I concur with Sebastien. I was part of the Nu team. I wrote the Nu for Visual Studio extension. The only thing in common between NuPack and the original Nu project is the name. Microsoft originally called it NPack.
@Steve
Your argument makes no sense. If MS just needs the .NET stack to support these features, but generates no revenue from them, then getting the community to build them under an OSS licence so that they don't have to makes huge economic sense. Because its OSS they can contribute to it, so they can keep it alive if the community stumbles or falls.
MS's approach does not even make economic sense
@Oren
I agree with the others here. If MS released a NoSQL solution, would you not want your solution to compete against theirs. As it stands the .NET community would abandon your solution regardless of merit becuase "we should use the MS stack".
All the ecosystem needs this to change. MS, its commercial partners, and OSS.
@Ian,
If you think my argument makes no sense, then you're ignoring history just to make you're own arguments appear right.
MS needs to put out their own version of popular OSS projects so corporate customers retain their faith in Microsoft's ability to deliver software. That faith is then rewarded by continued licensing fees.
If MS doesn't do this (or more importantly, hadn't done this in the past), soon projects would be almost entirely OSS projects running on .NET, and let's face it, at that point the "Hey, why are we using Microsoft anyways?" question starts popping up. Leaving MS when you have so little of your software dependent on them becomes very easy.
There's a reason a drug dealer gives you your first hit for free. Or why Infomercials give you a second set of steak knives for free if you just pay separate shipping and handling. These people are there to make money, not build communities.
My apologies, that came off a bit to asshole-ish then I intended.
The main point is, in 2010, I can build a project that has a poor man's Log4Net, StructureMap/Ninject/Windsor/ETC, xxxUnit Testing Framework all on an MVC stack all coming from Microsoft. Therefore I have no reason to even thinking about looking elsewhere except for a Mocking Framework. So what if Microsoft's versions aren't superior to their OSS equivalent, the truth of the matter is because they exist when I have to tell my developers "Sorry, you can't use Ninject or Structuremap, you have to use Unity" it's not really a big deal.
Take out the Microsoft versions of those projects, now if I'm a MS-only shop I have to use Poor Man's DI for everything, which doesn't matter anyways since I can't test anyways. I also have to roll tens of thousands of lines of Data Access code on my own too.
Suddenly, to a progressive Microsoft-only shop that wants to do things "right", using Microsoft becomes a serious problem. The rest of the large corporations still don't care because they are locked into MS for the foreseeable future anyways.
People have to remember that Microsoft's number one priority is to their shareholders. Everything they do (or close enough to it) is designed to increase the bottom line.
I think that Ian's remarks are mostly spot on, but the selected target for the discussion, NuPack, is unfortunate, since it's the first tool ever released by Microsoft which has the possibility to promote OS projects, from within a MS-centric dev environment. It's not as if there are numerous package management solutions withing the RoR environment (or any of the other frameworks that we have envied for so long), so I don't that is a function where we necessarily want so much diversity.
And while MS could certainly be more open to work together with OS projects, instead of just replicating, it's also up to us as developers to promote non-MS technologies more firmly. Don't just accept that your management or customers demand MS "components" all over. I find that it often quite possible to get them to listen when you describe that the non-MS solutions often are..
(1) More efficient to use
(2) Proven to work in real-life conditions
(3) More likely to have long term support
Sometimes it's impossible, I know, but don't default to not taking the fight
Juan,
Actually, MS already have several NoSQL solutions. Azure Table Storage comes to mind, for example.
And since I had the pleasure of working on NHibernate when Linq to SQL and EF came out, I think that I know how I would feel. See post above.
Seb,
Most of the people now rejoicing about MS providing a solution would NOT have joined any effort.
Most people want things served on a silver platter. If it requires work, they simply won't do it.
People, for the most part, do not like change. The Microsoft monoculture is no different.
Products do not have large numbers of users for simple reasons and it's business 101. Product does not solve the user problem, user does not know about product, user does not know about the problem, user does know about product but does not know that it solves the problem etc. OSS is no different.
Changing people is intractably hard - you will find it difficult to get them to embrace change! By comparison changing your product is easy and marketing your product is easy.
Ian comments "I believe that the .NET space should be open to competition." It is. Don't blame the users or the "community". The products need to get better, or be marketed better. That is up to the product creators, not the users. "Better" is not simply "has no bugs", it is everything and anything that might cause a user to choose a competitor or choose the status quo.
OSS is good, but as Oren pointed out, look at the problems that causes within the Java environment. .Net is not Java, it has the backing of a huge juggernaut. IMO it has to do with the mentality of the company funding developer's 9-to-5 as much, if not more than the developers that work for them when it comes to OSS adoption. Companies use MS tools because they are MS. Getting a third party tool into a MS shop is literally like pulling teeth.
The reason these companies resist OSS and stick with MS is that MS is "the standard". When MS releases a solution to a problem, it is the standard solution. While there is plenty to gripe about often sub-standard standards, there is one benefit to it. Many MS shops operate the same way so MS developers are cultured towards those standards, and will be familiar with them. Working in Java-land is a freaking HR nightmare because there are few standards, a lot of cross-competing solutions to problems, It's hard to match bits of apples in the bowl of fruit salad. When you do get a new team of Java developers together it's a pod of Rams in a china shop; attempting to head-butt each other into submission over what tool will be the standard for this project. Or you get an alpha gorilla which sets a direction then moves on, and the new silverback comes in and proclaims that tool A wont work and everything needs to be ported over to tool B.
@gunteman First I would note that there are numerous package managers in other environments (For OSX I know of Fink, MacPorts, Homebrew).
For sure though Gems is the preferred Rails package manger and you could make the argument that all the ASP.NET MVC team are doing is copying Rails in having a preferred package manager for their web framework. It's a point but I think it misses the wider set of issues.
The problem is that MS had an opportunity to do something different and thus improve the community instead of just parroting what they saw elsewhere. Just because Rails has one preferred package manager does not mean that is how it has to be. RoR's set of community constraints and context is very different. The Ruby community hardly have an OSS or diversity crisis that needs to be overcome. The .NET community, IMO, does. Everyone has to take responsibility for that.
I think its also interesting that MS did not approach this problem for MVC until after the community began trying to tackle it, and then failed to co-operate with them. That context is what is part of the issue here.
Does anybody else see the irony in ranting against a package that throws open the door to anybody as being monolithic?
www.amazon.co.uk/.../0713999896
this is an interesting book on how online communities are created, how critical mass affects open source projects - and what happens when the corp gets involved with OS. Very interesting book.
Large organizations like MS don't change overnight. While the individual feature in question (NuPack) may look like business as usual, the fact that they are willing to show you right there within their own IDE, how to get "competeing" technologies...is quite an amazing thing.
If you list the packages already there, there are easily 10 projects that directly "compete" with MS offerings.
I totally agree with you. There was nothing wrong with what Microsoft did. In my opinion an open source project popularity depends on two things:
1) What needs it will satisfy . If it provides a suitable solution for some common and public needs of the community usually there will be more projects that will use it.
2)How they provide support. If there's an open source project that doesn't seem to have a reliable support scenario usually it won't be successful in attracting the community.
My company made a quick study 6 months ago to choose an O/R and a DI framework: we decided to use Nhibernate vs EF and Castle Windsor vs Unity and the choice was quite simple to do.
6 months later, we are still confident that this was a good decision !
Comment preview