65 comments

[ 3.5 ms ] story [ 116 ms ] thread
I'm really happy this is the case.

I'm not the biggest fan of the ASP.NET ecosystem, but I'm becoming increasingly aware of how desperately the Java ecosystem needs genuine competition. This can only be another forcing function on other major ecosystems.

It's also the case that people have made credible points about how the windows platform actually provides better performance per price point for specific types of applications. While I found that very surprising, I think that ultimately we need to follow the data and provide similar pressure on Linux's I/O performance.

If you haven't already pinged one of my colleagues I'd be happy to hear your rants regarding .NET :) ( angocke @ msft )
I'll let you know once I play with the new drop for .NET Core.
> I'm becoming increasingly aware of how desperately the Java ecosystem needs genuine competition

Do you mind expounding on that?

Is Java that much of a major player on the backend? I didn't think so; especially for new startups.

> Is Java that much of a major player on the backend? I didn't think so; especially for new startups.

... Yes? Clojure and Scala are quite popular and normal. Java itself is still extremely common. Even if you end up writing your API endpoint in Node or Go, odds are you'll still end up using sidecar infrastructure that's written or maintained in Java.

The competitors are:

- Node, which simply has a hard time scaling. This gets better every year, but it is sort of in the "you do this and then commit to a larger capex" category along with Python. You can do it and many do.

- Go. Go is a funny language. It's quite good for small projects, but completely fails to scale for large projects due to issues with error handling.

- Rust. I don't think this sees wide adoption in the startup space yet, though.

- Nim. At least as cool as rust, but even more neglected.

- Haskell & OCaml: Lots of TALK but not many actual shipped products use this stack. Some pretty impressive groups do though.

Just my opinion though.

I'd have to disagree with Go not scaling for large projects. A primary goal of it's design was to be good for large projects, and there's plenty of large and/or complex codebases that have been written in Go. Docker, Kubernetes, and a lot of things in the CoreOS ecosystem specifically.
The error handing is terrible and it's well known it's a problem. It's a really bad situation. It's not to say you can't do anything with the language, just that you need to really understand the tools and strategies that mitigate the deficiencies and be prepared from day 1 to exercise them, or your project is in for growing pains.

What's more, I do not think the community has "solved" for those strategies. I know google internally has one set of guidelines, but other teams and orgs do other stuff.

Quite frankly, there are many aspects of its design that ended up being sub-optimal for large codebases. Look at the profound about-face the language took on bundling as an example.

We can bandy about all we want about this, but uh... certainly as a longtime user of Kubernetes I can say, "They have found ways to deal with the language's error handling."

The lack of a good debugger is something that sort of scares me personally. From what I've read it seems like you can sort of use GDB, and there's some experimental tools, which doesn't sound nearly as good as what you can get out of something even as new as Swift.
I dislike Go intensely, but nothing else currently fits its niche as well.

For a large or complex codebase, I nominate Cloud Foundry. About 1.5M SLOC of Go (1.8M LOC) in the main cloudfoundry repos[0]. Almost all new development is in Go.

There's still about 370KSLOC (470K LOC) of Ruby. Eventually most of it will be replaced, which will drive that Go codebase up a lot.

Disclosure: I work for Pivotal. Lots of my colleagues wrote most of that Go. I for one pity them, but they seem to have enjoyed it.

[0] https://www.openhub.net/p/cloudfoundry

I think ruby/rails are right there after java.
I will never voluntarily allow Ruby into any stack I control or work on ever again.
One of our systems is based on Ruby/Rails. There are things that I like about it but in general I think there are better alternatives.

Pros:

* Code readability

* Concise syntax

Cons:

* Ruby doesn't perform as well as many other languages.

* There is a cultural tendency among Rails devs to rely on a large number of gems. This creates dependency hell, especially a few years down the line when some libraries are not actively maintained.

* Unicorn is not the easiest server to manage. However I have to admit that I haven't tried any alternative, there might be better servers in the Ruby world.

You accidentally put "readability" in the Pros column, fyi.
I would love to hear why. Also, which stack/language would you choose?

Rails left a bad taste on my mouth after using it for one project. Many things about Rails are wonderful, but it feels like the entire project is in shaky ground with so many dependencies. Memory usage and performance aren't nice either.

Python sounds tempting, but I want to avoid dynamic typing if possible. That rules out Node (not that I would like to work with js).

That leaves me with either Java and .NET, which have the taboo of being enterprisey.

Are those the only major players?

These are just my opinions. I tend to state them forcefully, but they're not really anything but my idea.

I don't like Ruby because it hits a sour spot for me. It used to be very cutting edge, but then stagnated. It has all the problems of a dynamic language, but nothing to really offset it. Its tooling is fairly good for assembling new projects, but not maintaining them.

I think if I went somewhere today, on the spot.

1. FSharp & C#. The .NET Core stuff is exciting. I view, "enterprisey" is just, "I have libraries for lots of things I don't want to solve like calendaring." So long as I can quickly develop and deploy code, those kind of social things are immaterial. People worry about .NET core performance even as they ship Node code, so I find that concern somewhat manufactured.

2. OCaml, in the same vein as F#, but I think this lacks a lot of ecosystem stuff so I suspect it will always be secondary.

3. Go or Rust. I could just bite the bullet and do it. It's doable, it just requires a lot of thought.

1. so i love .Net ecosystem and have been using ASP.NET since webforms 3.5. But in no way do I believe microsoft will be supporting dot net core stuff 5+ years down the line. I know its opensource but ms is the only major player that is actively developing it right now and after the Oracle/Android debacle I don't think other big players want to try it.

2/3) I think the communities are way too small.

So if you are in the Linux world and want to work on Back end . Then Java is your only options. You can mix in groovy/kotlin/scala to make dev less painful .Look at dropwizard and play framework the are an improvement on JSF/JSP/Spring mess.

I think the Oracle/Android debacle is why people should move from the Java ecosystem. Oracle has demonstrated that they'll countermand the spirit of the Java ecosystem and license any way they can if they think it's valuable enough.

It's a tax on success they want to impose. They want to turn Java into the same business model as their databases.

(comment deleted)
Node scales pretty well in my experience, out of the box performance on a single instance is pretty good... The down side is you need to factor in scaling sooner, as running multi-process takes some of the same techniques as scaling mutli-server... It just means if you need a scalable app, that you need to bring those bits in sooner, as opposed to starting off with single-server in mind... Of course, as I said single instance runs very well.
This is great work! Congrats to Jon Skeet and the other Google people who made this happen!
From an Azure point of view, knowing that I have options makes me a lot more willing to build a business using those technologies. Really glad to see Google support it.
I just finished a project on Azure and am now doing a project on Google Cloud. I've been blown away by the documentation and user experience. It's by far my favorite between AWS, Azure, and GCP.

Glad to see Windows VMs are now supported. Any intention to add C# drivers for the services, namely Pub/Sub?

> Glad to see Windows VMs are now supported. Any intention to add C# drivers for the services, namely Pub/Sub?

You might want to read the article. About 1/3 of it is devoted to announcing their new .net client libraries.

I don't know if I should post this comment or not, but for the record this is one of the HN guidelines I try to abide by the most:

> Please don't insinuate that someone hasn't read an article. "Did you even read the article? It mentions that" can be shortened to "The article mentions that."

https://news.ycombinator.com/newsguidelines.html

I do too....but.....

"You might want to read the article" !== "Did you even read the article" in terms of intentional snark for which that guideline is intended.

Parent also points out that a decent chunk of the article is about the support libs,

To quote fairly early on in the article just from a quick scan (Ctrl+F "pub"):

"These libraries are in beta today, and include wrappers for Google BigQuery, Google Cloud Storage, Google Cloud Pub/Sub and Google Cloud Datastore, with more on the way"

(comment deleted)
Which is your favorite? thanks
Sorry, I couldn't quite understand which one was your favorite, GCP or Azure?
Whoops. Sorry. GCP has been my favorite.
GCP is head-and-shoulders better, at least in my not-super-involved experience (that is, I haven't automated everything). Azure has been buggy as all hell. Terrible confusing slow portal. Slow boots. Machines that hang, requiring the "Redmond shuffle" (resize a Windows VM twice to get RDP working again). Insane SSD situation.

AWS is solid but feels cluttered, I guess. GCP is just ... a breath of fresh air. And it's way cheaper than Azure (last I checked, some VMs were 1/5th the cost; our overall cost is 1/2 on GCP.)

When I did a price comparison (4 months) ago, GCP was the least expensive by a long shot.

Azure was shockingly expensive -but then again, I suspect they offer their enterprise customers discounts that may not be published.

The enterprise agreements don't help that much. Azure is banking on the fact that traditional Windows shops will pay tons to run MS's cloud. Hadoop... On Microsoft, and so on. Plus they have unique AD positioning.
This is great news all around. More flexibility for .Net developers, GCE gets access to a market segement Azure and AWS have dominated so far.

Well done.

Sounds good but lacks the management that Azure provides. For example, running SQL Server in a VM means you're taking on all the responsibility for uptime, redundancy, backups, security, etc. Whereas Azure SQL abstracts all that away and you can focus on your application code instead of managing infrastructure.
I know its not the same, but google has a managed mysql offering (https://cloud.google.com/sql/). Depending on what you are doing it may be sufficient. My experience with the sql azure performance has been pretty lackluster when comparing with sql running on even a tiny vm.
It's really interesting to me that platforms traditionally dominated by linux-based workloads are all now courting the 'presumed' enterprise windows based workloads.

As I .NET dev, I very much approve

I know it's just compute, but it still seems weird to run Windows Server on GCP.

That said it doesn't seem so weird to run Linux vms on Azure.

Is there any particular reason why it seems weird? Is it because they've never supported it, or something more involved?
Totally an irrational personal bias that I need to drop...

When you think of Google and deploying to the cloud, Borg and K8s come to mind. That's their expertise. Windows Server doesn't fit into that picture.

I guess it is the same with Azure and running Linux VMs there. Although a third of Azure VMs run Linux, the marketing and public awareness hasn't caught up with that reality.

I had half expected the article to center around the dotnet-onbuild docker containers or something similar... Which for my few tests has been pretty nice... though not everything is docker friendly, or even works outside windows, but with the option there, I'm sure more apps will make the effort to support that type of deployment.
If MS plays its cards well, .NET can take a decent marketshare from of Java. C# as a language seems more polished and friendly then Java/Scala. MS has some of the best compiler/language folks in industry. Next couple of years should be interesting, with .net core, VSC, typescript and all OSS, lets see if MS is able to capture any developer mindshare.
Yes! The only reason several projects I worked on used Java was due to its ability to run on several platforms (especially Linux). .Net is a very solid framework with C# being absolutely awesome and, in my opinion, far better than Java.

I'm excited I may be able to play with C# again in the very, very near future.

Also in my limited interaction, C# community has a very positive vibe and is noob friendly. I rarely see a discussion about any superiority over other language/stack/companies. Even the topline guys like Anders Hejlsberg are very humble and have strong empathy with a lowliest developer.
> I'm excited I may be able to play with C# again in the very, very near future.

Can't you just install windows as everybody else and start playing with your programming languages of choice?

I mean yes but that's an awful lot of effort and storage space taken up to install it and I don't have much storage left. I would much rather use it natively on Mac OS X and Linux with the option of deploying to Windows or Linux. When it's as flexible as Java in that way I'm going to use it :)
I don't think you'll get a visual studio build for linux or osx. That would mean making desktop .net cross platform and it's not in microsoft agenda. So i think you'd better wait until java becomes as awesome as c# is for you already :)
.NET Core & Visual Studio Code are current options, too.
JetBrains' Rider is looking really good in private beta, too. The last e-mail they sent out mentioned that the public preview version will be out soon.
I didn't realize this was a thing! Thanks! I'm looking forward to trying it out.
(comment deleted)
microsoft already has massive developer mindshare, but unlike elixir/elm/node/flavor-of-the-month the mindshare exists with 9-5ers or dark matter devs. The kinds of people who use it to get shit done but don't spend time blogging about it.
Yes, but more is merrier. They have negligible presence in colleges, startups, big data... Also Web development outside enterprise is entirely linux. So they have lots of area for landgrab.
mindshare exists with 9-5ers

That just reads as if they have a much less enthusiastic community.

Now that you mention it, I think that's actually true. When some adapter needs to be written to connect one system to another, nobody is doing it because that's what they are passionate about (I'm starting to hate that phrase) or because they are scratching an itch. They are doing it because somebody will pay them to do it.
Why didn't MS buy Sun? It seems like far more a natural fit, and would have shored them up against Oracle very nicely. MS even had a full Java compiler for .NET (and they still have a JavaScript one IIRC).

They were able to toss dozens of billions at Nokia. 25 for LinkedIn. Billions for Skype after bungling MSN Messenger into the ground (which would have also served as a perfect start for a real social network, including work!). But they couldn't find 6bn for Sun?

Was it just antitrust? Or were they that clueless?

.NET is pretty solid. F# is probably the "best" language once you figure in tooling, features, performance, libraries. If they made F# a first-class VS citizen, then it'd really be hyper competitive, but I guess they're hesitant to undermine C#. I've run F# on Linux for many years now and it's been pretty good. With Rust covering the true high-perf/no-runtime scenarios, I feel like I've got things well covered.

(comment deleted)
I think you massively underestimating how widely used .net is.

It's probably 2nd just after Java.

Offtopic but there's something thrilling about going through the Mono tutorials and getting ASP.NET apps to run on Linux. Kind of like it's a new world and I finally get to play with the bleeding edge toys as someone in Java EE land. As others have mentioned, the documentation is really good.

Maybe this is my chance to finally get some Stack Overflow karma...

I'm on the Cloud Foundry buildpacks team, my time is donated by Pivotal.

If you want to run dotnet core apps on GCP right now, you can do it by installing Cloud Foundry and the dotnet-core buildpack[0].

Of course, installing Cloud Foundry on CF is still harder than it ought to be for tire-kicking.

So we've added the dotnet-core buildpack in Pivotal Web Services, as a beta[1], looking for feedback. Please give it a go and come find us on Slack[2] in the buildpacks channel.

[0] https://github.com/cloudfoundry-community/dotnet-core-buildp... [1] https://blog.run.pivotal.io/introducing-the-net-core-buildpa... [2] https://cloudfoundry.slack.com/

Quick question, maybe someone here knows. Any plans to get .net core supported on app engine? This seems like a great fit for Web API web services as opposed to a full blown Windows compute engine machine?
The amount of .net apps enterprise runs is difficult to ignore by any cloud provider.This is a very good move by Google . But I feel they should also give a PaaS offering like Azure App Service (.net core on AppEngine may be) .Because enterprises who uses Azure IaaS VMs also need AD integrations most of the times and they will choose AZURE for that.