Despite being really busy, I could not resist the urge to write down a few things about the open source .NET news that has been making waves.
I can see a lot of optimism and that people are taking this as good news, that a significant number of people are excited about this.
In this post, I intend to rain on your parade a bit. Not because I am a nasty person who enjoys seeing others disappointed but because I can’t see the pink unicorns and rainbows everyone seems to enjoy as a result of this announcement. Let’s get started:
Who are you?
Are you someone who is getting started with a new project from scratch? That is, you have no investment into an existing solution in Microsoft technologies. You know .NET (C#, vs.net etc) and you now think that linux platform has just become available to you because .NET is now open source.
If you have no expertise with any other technologies, this may be good news. However, remember that .some use cases of .NET requires native functionality of MS operating systems. IIS is what lets you host WCF services. IIS hosts your web applications. You can move .NET runtime and languages/compilers to linux (as Mono has been doing for a long time), but what will you do about IIS? You’ll probably try to use fastcgi with nginx. The whole workflow, tools, configuration methods, test methods and practices you’ve build around the link between WCF and IIS is gone. You’re moving into a much less tested scenario. Good luck figuring out the problems that has been long dealt with in the MS only setting. You know WPF or Windows forms as the UI layer, yeah, sorry, you’ll need bindings from .NET libraries for UI to gtk/qt/cocoa and you’re also assuming you’ll have desktop linux accepted by your prospective users by the time you’re done developing your app (hint: unicorns…)
See? .NET’s connections to native MS OS layers means you must have invested into a very specific subset of .NET to have any benefit from this announcement. And that is when you have no existing code, I’ve only mentioned know-how.
Also notice my assumption that you don’t know any other technology. If you know Java/Scala/C++/Python and just getting starting on something, you have to have a very interesting reasoning process to ditch these options all of which has been battle tested for ages on *nix variants and Windows platforms and choose .NET instead despite the issues I’ve mentioned above.
Now let’s talk about me, because there are many, many people like me.
Who am I?
I’m a software developer. I work for Ocean Informatics. Great company, lovely team. Also, a lot of code. Big, big code base. Products (yes, plural) built on MS .NET. We use sql server, windows servers, WCF, ASP.NET, ASP.NET MVC. Windows forms, vb.net, Eiffel (with and without .NET output)
We have deliveries, customers, a whole business to run in a very competitive environment. We like exciting things, we innovate but we know we pay the price for every choice we make. If we make bad design decisions, we lose money. If we choose wrong technologies, design the wrong architectures, we lose time and our cost rises.
There are many, many companies like us. Maybe millions. We cant’ change our database just because we think it is a good idea. Despite what you read in most modern software development books and hear in courses, databases are not just some switchable components that you pick one from a group based on your mood that day. They take fine tuning, testing, specialisation, in short investment. You either do that or competition takes you over or your offerings do not perform as expected. We are not building address book software, we’re a company that delivers enterprise products that process clinical data at the level of tens of thousands of patients every month at some deployment points.
So for me, there is nothing exciting in this announcement. I can’t take my WCF layer to Linux. I can’t take my DB layer to Linux. I can’t take my UI layer to Linux. If I do, there is the risk & cost associated with moving into a much less tested setting.
Any experienced developer knows the real costs of software development. Maintenance, fine tuning, stability, configuration. Sure, there is something symbolic in a company such as MS going open source with a major stack but I’m not interested in that as a professional software developer. That does not solve my day to day problems, that does not let me compete with other technologies that has already established their footing in the *nix eco system in a better way. I don’t know what you’re happy about but MS is not doing me any favours here.