Rob,Ayende. .NET

In regard to:

While I find most of Ayende’s posts to be well reasoned, I feel we may end up agreeing to disagree here. I understand completely your argument that good software can be written on the .NET platform. I understand as well that you can build things like RavenDB on the .NET platform including CoreCLR. Myself and our team have also built such software.

Your conclusions however are absolutely wrong. We have been supporting a linux operations story for coming up on four years. We actually prefer to run in linux as opposed to windows (though we are written in C#). This is due to many reasons but the largest is the quality of operations people and the maturity of devops tools on the linux side.

We have experienced where your logic falls apart.

RavenDB nor EventStore should be written in C#.

A different environment such as C/C++/Go/Rust would be far superior to haven been written in C#. Cross compiling C# is a pain in the ass to say the least whether we talk about supporting linux via mono or .netcore, both are very immature solutions compared to the alternatives. The amount of time saved by writing C# code is lost on the debugging of issues and having unusual viewpoints of them. The amount of time saved by writing in C# is completely lost from an operational perspective of having something that is not-so-standard. We have not yet talked about the amount of time spent in dealing with things like packaging for 5+ package managers and making things idiomatic for varying distributions.

Maybe you think you will avoid this and include instructions for how to install ravendb for *x* distribution. They want packages. They want things they understand. Most linux admins will flat out refuse to install coreclr (rightly as it is immature) or mono (rightly as its a shitshow)

The costs associated with this are prohibitive. At the end of the day the kinds of code you discuss could likely be implemented by mediocre C/Go developers but you need to hire the very top of the line C# developers. Finding a C developer that understands the concept of a B+tree is far easier than a C# developer. Finding a C developer who has some clue about how memory works and is able to optimize is normal.

When you get into looking at TCO the amount of time spent dicking around optimizing GC and understanding/supporting your underlying abstractions having written in C# becomes negligibly less expensive than writing in a systems programming language in the first place.

Once you start looking at support operations (trust me we have experience on this), having written in a systems programming language will be far cheaper.

TLDR: The fact that you write systems code in C# (or Java!) does not refute Rob. You are in fact writing systems code in C# in spite of being in C#. This is the biggest mistake we have associated to event store, you should recognize the same, we keep things running but recognize that we would have been better off with other decisions. Given our investment we can not easily change but given a chance to start from scratch would make different ones.


  1. Posted June 17, 2016 at 8:49 pm | Permalink | Reply

    I find this post to be absolute lunacy to say that Go and Rust are more of a systems development language than C# and Java.

    • Posted June 21, 2016 at 11:19 pm | Permalink | Reply

      note C/C++ was the primary example.

    • Ben Kloosterman
      Posted November 19, 2016 at 1:02 am | Permalink | Reply

      Ever done any systems development in C# , have a look at Singularity ? .. The Memory safety gets in the way Rust is good for this low level stuff but Go would be worse than C#.

  2. Fabio
    Posted June 21, 2016 at 6:44 pm | Permalink | Reply

    I totally agree with dotnetchris.

  3. Posted June 21, 2016 at 8:15 pm | Permalink | Reply

    What makes you think everyone cares about Linux? What makes you think everyone likes the extra work and setup OSS puts you through.

    • Posted June 21, 2016 at 11:18 pm | Permalink | Reply

      Well not everyone cares we can only look where the vast majority of people are going. I have met very few people who have used both windows and linux operationally in cloud environments and want to use linux. The windows-as-a-server ecosystem is become irrelevant, the writing has been on the wall for a while.

      • Posted August 8, 2016 at 2:38 pm | Permalink

        “The windows-as-a-server ecosystem is become irrelevant, the writing has been on the wall for a while.”

        You might as well just say 2017 will be the year of linux gaming too. This line has been said for the past 15+ years. The only way this statement can be remotely true is that Microsoft is evolving way past metal hosting. If you build systems using Azure Service Bus, is it Windows, is it linux? It just doesn’t matter. Microsoft is moving far beyond simple compute.

        That’s more of a symptom that hosts are becoming irrelevant, it’s all about the platform that exists far above the host layer.

  4. Posted March 6, 2017 at 4:39 pm | Permalink | Reply

    I wouldn’t put C# and Java on the same plate. Java ecosystem is much more mature; the amount of infrastructure tools written for JRE is gigantic. Most of your arguments don’t apply to Java world. So that’s .NET/C#, which falls behind when we talk about infrastructure tools. And it’s not because .NET is worse, it’s because the ecosystem is poor – the engineering culture.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: