Non-Windows .NET is Still Second Class Citizen

I am very early in the Linux .NET development experiment.  I am pretty busy with work and life so that I don’t have a ton of time to play around with these things.  Having come from a background where most of my recent development (last several years) has been technologies other than .NET I have a double hurdle to clear: getting used to .NET and getting used to doing .NET on Linux.  Therein lies the rub.

When I am learning a new Java feature I don’t ask myself, “Well that’s how they do it on Windows, but how do I do it on Linux (or Mac)?”  In Java I do it the way you do it in Java.  There are some subtle differences when I go from one platform to the other with things like file paths and case sensitivity, but for the most part Java really is cross platform.  I could choose to make my life a little harder by bringing in platform specific libraries, like some of the Eclipse foundation software, but that is the exception not the rule.   The same is not true for .NET.

I decided to start my tour of Linux .NET by doing a very simple application: a one panel app that will update a text field every time I hit a button. I’ll document my exploration with that but a simple thick client application shouldn’t be a dramatic exercise.  In fact it truly was, and the only reasonable way to build it easily in a cross platform way was on Windows.  Okay, that’s not the best example.  I honestly can’t remember the last time I had to build a thick client app anyway, so I decided to try my hands at a “simple” web service.  That shouldn’t be too hard right?

Maybe I’m pampered by Spring, Jersey, Node, and other web technologies but setting up a simple web service should be something you can do in minutes.  My example web service would do one very simple thing, return a random number.  From start to finish, even with the brain damage of learning Node or Spring Boot shouldn’t be too much.  How about we try doing that using MonoDevelop on Linux; screeching halt.  Almost all the examples are for Visual Studio.  The few examples I found for the same thing under MonoDevelop seemed dated, at least the screenshots did.  Maybe I’ll try .NET Core instead.  Well, that is a whole other build chain now too and one that doesn’t integrate into a real IDE and instead the really cool but not quite an IDE Visual Studio Code.

If I’m to believe all the examples doing this under Visual Studio is pretty much as easy as any of the Java platforms.  The gulf between that experience and what I have on Linux or Mac is pretty staggering.  I’ll be continuing on with my experiment but whereas I’d be doing stuff like following guides it seems like I will instead be trailblazing a path and maybe writing guides.  That wasn’t my intention when I started, it will probably take a lot longer, but in the end it’s a good way for me to give back (if I can find the time for it).