See the entire conversation

Cloud Native Computing Foundation (CNCF) projs are Go & all this OSS used to be Java Kubernetes - Deploy (Go) Prometheus - Monitoring (Go) CoreDNS - DNS (Go) Jaeger - Tracing (Go) Vitess - DB scaling (Go) NATS - Messaging (Go) ETCD - Key/Value store (Go) NOBODY considers .NET
503 replies and sub-replies as of Jan 23 2020

Nobody wrote in Kotlin. Things can change.
Kotlin is so irrelevant still I have no idea how to respond to this than _shrug_ lol
Majority of new android apps.
Okay, I have no idea what this has to do with OSS infrastructure projects then lol.
Kotlin got the majority *quickly*. I think within the year. Go tooling is nothing compared to .NET. The disqualifiers of .NET are probably easier to address than Go’s gap, but the tooling advantage of .NET might not matter. Or it might. Just a different optimization point.
I don’t think the situations are even remotely similar. Kotlin runs on the JVM. People enjoyed writing Kotlin more than Java on the same runtime. Completely different situation.
The game is bullshit minimization. Anyway, to each their own :)
I literally have no idea what any of this has to do with OSS infrastructure projects.
That is almost precisely the argument people used about why the Windows NT Server stack was the only thing that mattered when every single new service was being built on a Linux stack.
Use ABCL or Clojure if you really want to write on the JVM imo.
What improvements would you like to see made to golang to get it in parity with .NET? Google / golang's maintainers have made some neat improvements to the language and its tools without breaking compatibility with the previous way of doing something (anything is on the table).
What tooling are you talking about? .Net developers I know depend on ReSharper from JetBrains and they’ve got good Go support too.
I’m talking about one thing and you’re way off in a different direction.
It was late in the multi-platform game, and late to get proper concurrency. (Proper for task at hand.)
Why would you choose a language that is (as far as I know) only for one operating system? And why when that operating system isn't the dominate one in the server space?
It’s available on Linux, and has been in various forms for around 15 years.
Mono? I tired that 10+ years ago when I was decidibg which language to learn. It was painful. I assume it's better now. But I would want offical support for my os.
No, not Mono. .NET Core is officially supported on Linux, macOS and Windows.
Not to mention that C# also now runs on iOS and Android.
NET Core is available and fully supported on many platforms at many versions (including LTS ones); including Docker container images
It also runs on iOS and Android, and in the browser, all natively. Its really the only language/platform that's free and open source and runs everywhere
NET core was too late to the game, everyone moved on already
And what about other oses?
Do you mean MacOS? .NET works fine there. Or the various 36 flavours of BSD that nobody uses? I’m not sure it’s supported but I’d give it a fair chance to work
I know a few people who use bsd for their servers. Not one that uses OSX
OMG!!! We made a huge mistake by creating a viable business based mostly on .NET. Excuse me, going to delete a lot of code.
Oh sweet, what infrastructure software do you sell?
What an entirely not useful comment. Way to blue pill a red herring right into the convo.
yes, agree, I was sarcastic then again, how is the original comment useful "NOBODY considers .NET" really? in that sense I proved it wrong, at least 1 company is making money using .NET
Are you in the infrastructure space?
You still haven't provides if you're in the infrastructure space so no, you haven't proven anything. In addition, one anecdotal provision does not make a provable trend.
The original context was open source infrastructure code, so you haven't provided a counter point at all.
We use @IdentityServer for auth in our Kubernetes cluster. So there is at least one .NET open source infrastructure project :).
ah, if the context is "nobody considers .NET for infrastructure/low level stuff" then I did not catch that and would agree not to use .NET for that then again, what is the point of original tweet? should we now list LOB apps and say "nobody uses C++" ?
The original tweet inferred "nobody considers .NET for infrastructure/low level stuff" and it's lost that market almost entirely. You could list LOB apps and say that. But that's just more red herring "whataboutism" which really doesn't add anything constructive or on point.
Many of @kellabyte's tweets of recent were in reference to the incitement of more conversation around the .NET community lacking ... that inspired the January 19th tweets. Likely rooted in earlier tweets from this thread
We're all very aware that technology has a huge representation problem. I absolutely adore the .NET community that has been my "spiritual home" for almost two decades. But here's an uncomfortable truth - it's a number of orders of magnitude worse in our community. 1/?
and ongoing concerns in the community writ large around .NET (and F#'s etc) lack of memetic independence as referenced by ...…
I think after a few years I found a term for why I primarily left the C#/.NET stack: lack of memetic independence. Thanks @Adron and @k_cieslak for sharing and @dsymetweets for the talk.
Λdrøn on Twitter
“I concur.”
I inferred something wrong then and was too sarcastic I'm not upset that .NET is not used for low level stuff, I don't remember it ever was in large scale so, comparing Go and .NET feels a bit like apples and oranges (.NET being much more heavy, don't know much about GoLang)
and .NET community has a lot of problems, mainly that it is looking at mothership too much
You probably should. Go see how visual basic 6.0 source code is getting support from Microsoft
Could they all be Go because many of those projects originated in Google? "Google accounts for 53% of all code commits to the Linux Foundation's CNCF and has seven times more contributions than Red Hat, which only accounted for 7.4% of the contributed code."
Not the OSS communities fault Microsoft open sources very little infrastructure code.
I was thinking maybe Dapr but that looks like... go, womp womp. @kellabyte ‘s point is timely as I’m a long time C# dev who has been looking for a way to get more exposure to infra level stuff but don’t see an obvious path in the .net world
While a valid statement, some people might read into it more than it says. Microsoft employees are very active contributors to many Linux Foundation, CNCF, W3C, IETF projects related to infrastructure. More so perhaps than some other cloud providers that benefit from the work.
Perhaps but that’s not the discussion. The discussion is that .NET OSS in the infrastructure space is a really isolated bubble. People pushing back on that aren’t really paying attention to anything outside their bubble.
Sure, I was following the original thread about .NET, but I saw that you mentioned Microsoft's role in contributing to OSS infrastructure projects. Just wanted to make sure that people didn't over index on what you were saying.
We have a significant size team that writes Go code for all sorts of CNCF projects, and we are key drivers on several of those, Kelly. It’s no longer only .NET here.
Oh I know that. My discussion is around .NETs footprint in OSS infrastructure. I know there are a lot of efforts elsewhere.
Does OpenAPI description processing count as infrastructure? ;-)
The part being vastly forgotten here is .NET is popular in writing web application backends in. For awhile these were simple MVC+SQL Server apps. Nowadays you have various OSS infrastructure projects like etcd, redis, mongo, cockroach, postgres, mysql, dozens more.
Since .NET is so irrelevant in OSS infrastructure client library quality available to web application developers using MVC have serious quality issues. Some cases some are very mature. Many cases they are very immature, broken, behind or even non-existent.
Over time since .NET has such less relevency out in OSS land, since these client libraries are very problematic, I can’t write a lot of what I need easily in .NET MVC. I can find a web framework for any language with better client lib support elsewhere. This is problematic, no?
oops you are shifting from infra to web frameworks and all now. #justsaying
This is a slow grind of a situation that IMO hurts .NET web application development and the architectural options you have available to you as a business. Maybe less so if you go all in on Azure services however.
The best clients for all of those CNCF projects are Go, Python, etc. Some cases some of those have great .NET libs, but not all of them. This growingly makes .NET MVC less and less useful to me and to many in the industry, even if C# is my favourite language.
The CNCF OpenTelemetry project has multiple active Microsoft employees working on it and are writing the C# client. Hopefully that will be a good experience.
I own the C# client for CNCF CloudEvents
I think an interesting metapoint here is that I believe writing client libraries is a hugely underestimated and unappreciated effort. I think there are many places where client libraries could be vastly improved. Maybe this is worse in the .NET ecosystem. I don't know.
It’s vastly worse but it’s also IMO an impossible problem to keep up with. It’s death by a thousand cuts for .NET MVC developers these days unless you stick within a very supported set of tools and services.
I would imagine that making some tangible improvements to C# client libraries for popular OSS infrastructure projects is a smaller mountain to climb than convincing devs to build infrastructure in .NET. Seems like a good place to start.
True, but in my experience this just means some random thing I need most likely doesn’t work. There’s just so much stuff out there. I have to ask myself: Am I just using C# because I like it but limiting my production systems? Often the answer is yes.
I'm not here to sell you anything :-) Do what works best for you.
I don’t like the idea of polyglot programming because it means I’m no good at any of them, but I do realize now after being around long enough some high level language takes over after 10-15 years and a shift happens. So maybe juggling is bad but shifting is good?
I used to think the .NET framework was amazing at so many things and it still is but I thought it’s primary strength was service backends but it’s no longer strong at that. So what’s the purpose of .NET now? That’s an interesting question.
We run services written in .NET that have effective reliability and availability exceeding 99.999%, some are even a 9 better. Define “strong”.
You’re living within your ecosystem of stuff though. Of course it’s strong for you. For people outside the Microsoft bubble of enterprises etc it’s not strong though. You have every dependency you could ever need internally with great libs.
This has been the problem for years. M$ had fantastic SOA IDE and products, hidden behind $50k license. Even coming out of college with free MSDN I had no idea why I would bother because Java was free and I figured companies would like that more than the huge cost for .NET stack.
I don’t think you realize the pain of trying to write .NET MVC or other types of backend services in .NET in today’s OSS world where .NET is this step child nobody cares about.
Which particular services/products do you have in mind here, because that simply isn’t true as a generalization. Which product’s client sucks?
Zookeeper sucked off and on for aaaaaaaaaaaaages. Etcd didn’t exist and sucked for a long time (no idea where it’s at now, I imagine good). NATS didn’t have a client for quite awhile (not sure of the quality now). These are major CNCF projects. I assume they are much better now
ZK and etcd are services for a small circle of folks who need those features. SF exists as a direct competitor to both, has much more features than either, and is a rock. I am not surprised. NATS has a C# client that I just wrote a wrapper for.
I highly disagree with that first statement and the second statement ignores people had pain for years with NATS. It’s easy for you to discard this pain.
You know how clients in OSS project happen? Someone with an interest in them starts writing one. You lament that no hero stepped up and did the work. If everyone has that attitude, you end up at that point. The projects you enumerate have competition with great C# support.
ZK was around for 10 years before SF even was around, and existed in many organizations for database failovers. I am so tired of Microsoft people discarding the pain so many people face. This is very dismissive.
I disagree with the ZK statement. It is widely used and is very reliable. The stability issues I had to deal with over the last 8 years are mostly related to using ZK incorrectly. And we have moved into better observability and security in the last couple of years.
But it’s always death by a thousand cuts because it’s a language most of the OSS community doesn’t care much about. As @jbogard said, it’s always this off and on struggle.
It’s usually multi-year lag behind before something that’s pretty mature in OSS before some enterprise comes along caring enough to push for a port of a client library.
It’s funny how you define “OSS” as “anything not written in .NET or not having a .NET client”
If you think .NET has healthy support with OSS infrastructure as a whole you’re REALLY mistaken.
Days after days, your vendetta against .net seems like ... Off subject... Infrastructure code is out of concern of .Net since it's a APP first language/framework. Now dotnet core is out, please consider giving it some time before being an infrastructure first choice !
Honestly, what's your goal ? Why are you lobying so hard against .net ? It really seems .... Political
I don’t see a path to smoothness. Sure you can make some gains in major OSS clients. But how many years of pain would I have had to endure until a good Zookeeper or Etcd client would have existed?
Maybe you folks don’t see the pain because you primarily sat an entire career within an ecosystem talking to supported services but the rest of the industry seems to migrate high level languages once every 10-15’ish years?
Or if the purpose of .NET isn’t to be a great service backend framework, then where is it going next?
can you give some examples what you can't achieve with .NET? What major client lib is missing, for example?
I know the .NET ecosystem is giant in it’s own as a whole but I actually don’t see the point of it moving fwd because it’s degrading in usefulness in this day and age where architecture decisions are very diverse. I used to see it as primarily for service backends but no longer.
is Orleans or PowerShell "infrastructure"?
Orleans for sure is great!
and entirely .NET ;)
Yeah absolutely! But one project :P
Tbh, I think it’s coming but it takes time, I was surprised when I surveyed a few folks on this and the historical nature of the responses, image/reputation, the present, and future all take time to propogate. The key is an ecosystem of projects, and another gen or two of devs.
I keep getting Microsoft people telling me “our numbers show” it takes 5 seconds to look at GitHub and see the OSS and startup industry went from Java to Go. .NET never had traction here and never will. It’s okay not to, but ppl within the bubble keep pushing back as if it does
Likewise, I'd hazard a guess that that the 11k contributors to the OSS .NET Foundation projects are mostly in C# (with some F# and VB)
That seems somewhat reasonable.
Kubernetes alone has 3K contributors. Most of the projects I mentioned were not created by Google people and are not libraries to extend the language functionality. These are all OSS infrastructure projects people run in production across the industry.
shouldn't one use best tool for the job at hand? not all software is infrastructure and system programming
The .NET ecosystem and all its partners and the whole bubble it encapsulates writes infrastructure in C#
Are Web servers infrastructure? Kestrel is OSS .NET infrastructure that people run in production across the industry (its new and very different to previous aspnet, so its position in most used web servers is new projects)
Also very popular only within the .NET bubble. It’s a self fulfilling bubble. Sure a lot of .NET devs write their web application code using other .NET infrastructure.
i dunno why MS would create any of those things instead of just building an Azure PaaS solution
I didn’t say they had to. Again I’m just explaining why .NET and the .NET community missed the infrastructure boat that has been Java->Go. There’s many Microsoft and .NET community ppl upset at me but it’s the truth. It never had traction.
To be clear when you talk about "infrastructure" you mean self-contained appliances/apps that you interact with via configuration rather than programming? (remote apis aside)
Generally though, doesn't a community build the tools that it needs? I'm sure some .NET devs use those tools, but they don't really seem like things a majority of the community requires. Those just aren't problems this community has, hence no work to make such infrastructure libs
no those clients *need* sponsorship to survive. all the tools she listed have awful .NET client support and they lag very far behind, if it even exists. or we look to PaaS solutions instead
It reminds me of the Windows Server situation. It became less and less useful because so much infrastructure couldn’t run on it so it became less relevant. Same situation for .NET happens if more and more infrastructure ppl need runs poorly on .NET MVC. It becomes less useful.
NET Core but yes right now i'm looking at integrating w/ RabbitMQ, Kafka, Zipkin, Splunk, MongoDB and with each, they've got a company behind it, and those companies put .NET last in support
it's a classic chicken before the cart problem
Sure but time and time again we see Microsoft do this. Why would I stick with a language that keeps putting me in this situation? Writing the web application code is the easy part, man.
i'm on PCF atm so literally nothing is easy for me but tbqh the hard part for my job is not the code OR infrastructure. it's all upstream
The sheer number of web applications that are horrible, inside and out, regardless of specific tech, would suggest that they are not, in fact, "the easy part".
Probably not "the hard part" either, but I don't think dismissing them as "easy" or otherwise unimportant or unworthy of attention is either warranted or a fair dismissal from this argument.
You either stubbornly limit your career and your architectural decisions or your uptime or you just write your damn web application in an ecosystem that is smoother and more supported. Then when that deprecates you move to another. Why pitch a fork in your career for 30 years?
I guess that's what I don't get about all this. Just because a lang/plat/etc. doesn't do everything well doesn't diminish the things it does. Like many .NET devs, my career is fine and I expect it to continue while I create software that does what it needs to do easily and well.
Yup and some of those are the better supported ones. Imagine if you deviate from those to other popular OSS projects with lesser companies behind them? Brutal that’s what.
But why run your own infrastructure. Serious question. Infrastructure on its own doesn’t add value to most orgs. PaaS helps and let’s teams focus on the application later, where the value is.’s too bad we can’t be friends no more
We know you really mean: You'd prefer significant tabs rather than significant spaces 😉
Tab (noun): something you pay for later; usually a leading cause in getting drunk.
ahahahahahaha That means spaces is something I dish out and tabs is something I recieve :P
So that’s what that setting in git is for
Microsoft tried to fork and run their own port of Redis for Windows because so many people wanted it. But in the end very little OSS infrastructure ran well on Windows and everything ran better on Linux.
I don't think a library would qualify for the "infrastructure" @kellabyte is talking about. It sounds more like self-contained systems that you configure not program.
How much do you (all) think this has to do with the app packaging story? Seems like Go's ability to output a statically-linked single binary file is a pipe dream compared to how .NET apps are currently deployed... IME, that's the sort of things sysadmins care about.
i mean JVM had the same problem. this is as much as a JVM thing too, except Java developers were on *nix
i dunno about enterprise java devs moving to Go either. Spring is frickin' huuuuuge my current client was looking at Spring vs .NET, not at all Go vs .NET
I see a rise in Go in enterprise but I wouldn’t say that’s where the big shift is. I’m mostly talking OSS. OSS infrastructure projets went from Java to Go.
i mean of course...there was an attempt to go to Erlang i guess?
Erlang never had any real movement, just a few loud people on Twitter :P
I think the last time I seriously heard people talk about Erlang was pre-Twitter. Actually I think it was the last time I heard Erlang mentioned *at all*
all my MS enterprise clients are looking to go Azure PaaS. none of those OSS infra tools really affects them atm (except dist tracing, there's no offering there)
Not all OSS is infrastructure though. And right tool, right job.
Ok so Go stands out as a tool for building infra s/w. What is .NET really really good at ? In which domain is .NET *clearly* better than any other ecosystem out there ?
Interoperability? Whether platform (p/invoke, hard C struct layouts); platform reach (il can run most places, macOS, Linux, iOS, Android, XBox, Playstation); the processor (platform intrinsics); from and call into other languages (C, Objective-C, Swift , Java, Android Java) etc
It's a managed language that provides safety including GC; but doesn't hide the platform behind its idealised version or prevent you using it directly or other ecosystems' platforms. If you want to get a bit gritty with it; its not going to get in your way and will try to assist
Good example of interop, it only took me an afternoon to crank out dotnet bindings for Haywire... No JNA or extra parts required 😁
Did that ever work even? I never tried! I have no idea if Haywire was suitable for interop.
Yes, it actually worked decently on real Linux. I was expecting a big perf hit with handing a managed function as a callback to native code, but the CLR handles it quite well.
This is called reverse P/Invoke
Productivity building applications and good tooling are we have historically been better than everything else.
George's question is deeper than that. George should have been an MVP, instead he moved away from .NET. He's invisible to the local subsidiary who only cares about pushing Azure licenses. There haven't been local dev events for almost 5 years, and other events are for partners
In another thread, @SMantziaris tried to explain the perception problem .NET Core has. Sotiris should have been an MVP, he was an active participant to the local .NET UG until he switched to Go and went to work for @theBEAT_GR Again invisible to MS
This isn't a discussion for Twitter though. A better place would be the @dotnetfdn Teams or Github forums. .NET Core has a problem and local MS behavior is a major cause
For business software it was pretty killer. Then the web took over. Now I have to use pure utter vomit like workday, salesforce, and zillions of other web based apps. We went back to the 70s. For most tasks .net is vastly superior to anything else.
The few viable .Net OSS projects that had any traction back in the day were copied by Microsoft. Either it was a copy/paste of the code or Microsoft created a competing project and bundled everything into Visual Studio. That's super demoralizing.
Historically. Net was run on windows servers and it had all the tooling you need, therefore there has been no need for this. There was no missed opportunity coz noone actually cared. With the rise of mono and #dotnetcore in just 4 years we see a huge uptake in tools for. Net
It’s okay not to compete here but don’t tell me it’s happening or it’s been fine or Core CLR fixes all of this. The industry has never cared about .NET here outside of a specific bubble.
I spent 15 years as a C++ developer, then, like a lot of folks I switched to C# in the early 21C diaspora. Others went to Java. Why? Because they were better application programming languages with less accidental complexity (memory management) and more essential complexity.
But C++ remained an important took for systems and games programming where that complexity around memory management was essential. One language was not good for all contexts.
And for sure, if I needed a better systems programming language today I might choose Go. As many have done and you correctly point out. But it’s not necessarily a great application programming language. Nor does it need to be.
It’s possible for us to have more than one tool, master it, and use it as appropriate. None of this devalues either system or application programming languages that are used for what they are. For sure, if systems are your thing use Go.
I don’t think anyone has said use one tool for a long time, even in the C# community
I’m not sure I understand what you are arguing? No one uses <<application programming language>> to write these OSS <<system programming projects>> And? I mean, what point are you trying to make? It’s like saying no one uses coffee to make tea.
Well you say that but ... years ago, when Kirstie was pregnant, I ordered a decaf tea for her at a motorway service station. The resulting drink contained decaf coffee *and* a tea bag. 🤦🏻‍♂️ That happened twice, before I gave up and asked for a decaf coffee instead. 😂
OK, excusing folks at UK service stations no one uses coffee to make tea :-D
It would be weird if those systems were built with .net. They didn't consider php (or js) for these system either. I fail to understand what it means
I’m confused too, this is a square pegs go in square holes conversation
But I ditched this model because often enough .NET clients for various major OSS databases and other infrastructure was always way behind. Nobody cares about .NET sparing a few mature Redis or whatever libs
4 out of 7 of the projects you mentioned originated at Google or by a Google employee as far as my investigation go. I mean, we were late to the Kubernetes game anyway so I don't blame anyone for using the best tool for the job.
Apples and oranges comparison here. .NET foundation projects primarily center around supporting the .NET bubble. CNCF projects and the surge of Go in OSS are services people run.
*cough* OrchardCMS *cough*. BTW what MS product is built with .NET again?
Docker, Cloud Foundry, Terraform, Packer and many other non-CNCF coffee is in #golang because it's superior for the work, nothing to do with Google. @kellabyte's point stands on the current reality we have in industry today.
How many of the projects that Kelly gave as examples are Google projects? (Honest question. I'd like to know the answer.)
Some are definitely ex-google employee started but after leaving google I think.
Facebook recently switched to using VS CODE as their main editor... so it is not all bad news
I'm ambivalent about .NET, and haven't tried Go yet, but ANY displacement of Java is a Good Thing™. #DieOracleDie
Java (Like C#) is still a great language for learning Intro and Intermediate OO programming.
So is Python 3, without the legal shadow.
Sure! And I teach Python! But outside of any legal turmoil, Java's familiarity to the C syntax and style make it more desirable broadly speaking. Especially when coupled with a decent IDE. But you would never catch me building large scale projects using Java. 😎
Python is the second best language in almost every field of computing.…
Not part of CNCF but I recall reading somewhere that even MS Azure is mostly Go(?). Please correct me if I am wrong.
Linkerd (also CNCF) was Java but switched to Go+Rust with 2.0
TiKV is also written in Rust
v1 was Scala iirc.
The thing that bother me, why anyone need to do DNS again? It’s solved, we need radical shift, not doing the same in another Lang. like Nile Language or OMeta that let u write much less to achieve the same goals letting u invest in big dreams. Like Jai which builds ex fast >>>
No JavaScript either
>>> maybe c# that compile in fraction of seconds and hot reload. Today, the simplest NuGet thieves me seconds to download x projects x deps - and I already in Twitter again :)
I always go back and forth on how much programming language choice is driven by technical requirements, and how much is fad. Both clearly are at work. *Goes back to writing something in Rust*
My new "New Year Resolution" is to learn go. :)
Is this a case of CNCF charter _standardizing_ on Go or simply a best fit for their projects?
A lot of these projects were started outside of CNCF and got considered because they fit.
Amazing. What a joy hearing that.
The CNCF has zero requirements or standards re: languages. We have projects in Go, Rust, Python, C++, etc.
Thanks for the heads up!
Anything projects with .NET ? 😜
Explain to me again why stuff like Orleans isn’t infrastructure? It’s clearly pioneering some great work and enabling scalable solutions that don’t need all the container-goo listed above.
You could argue that things like Orleans are more "infrastructure" than containers are.
COMPLETELY agree and I will add the same for @AkkaDotNET, @vlingo_io and other Actor platforms. I understand they come with with different programing paradigm but they are the PERFECT runtime for all kinds of Application Domain/backend logic.
I think the actor model is a slow-burn idea that is finally getting the hardware and type of problem it needs to shine.
I think actor frameworks are inefficient and suck for performance and are not nearly as applicable as people think, from my experience with performance optimizations.
Actors are great for scale-out of things you can do concurrently. They're not so much for making an algorithm cloud-scale. So, depends on what you have to optimize.
Actor models imply a lot of memcpy and this is inefficent and actually are counter productive to how CPU’s are actually designed. Why would we make processors do the wrong things?
An Actor model implies that you want to do many many things concurrently. No CPU is designed for that. Instead, an Actor lets you write lock-free optimized code using a single CPU efficiently. If it runs slow it's not because of the Actor model.
Totally false! Memory bandwidth is an issue. If I would have implemented Haywire with the actor model I wouldn’t have reached 15 million requests/second. You’re just repeating hype not actually how CPU’s and memory architecture work.
Memory architecture has nothing at all to do with how stuff scales across machines. Don't mix apples and oranges.
I think you should read up on the Actor Model. It’s a mathematical model of concurrent computation. It was designed for within a single system that’s why a lot of the material talks about lock based synchronization. Memory architecture is absolutely at play here.
I am talking about Actors in the sense of a modern distributed achitecture (like you'd build with Orleans). I don't know anyone building scalable systems by optimizing what you can get out of a single CPU, except where you have ultra-low latency requirements.
Erlang actors are separate processes that exist either on the same local machine or distributed. I assume it’s fairly similar with Orleans. For sure Erlang based databases like Riak still attempted to optimize what you could get out of each CPU.
And that absolutely makes sense: you wan't scalability and fault tolerance, but also fast responses. Orleans' twist with virtual actors (always addressable) makes it reasonably easy to achieve all of this. It's certainly a significant OSS contibution in the infrastructure space.
Yeah Orleans is a big deal. I was really excited when it came out and I’m still really excited about it! I love interesting projects like this :)
You kinda wrote it off as "too little too late" recently, but I suppose that was just being a bit of Twitter trolling ;)
Love the actors subthread, but I thought the discussion was about "infra software" and not "software infra". Like, in my mind, infra software is the kind of stuff you use which is external to your process, and software infra are libs and frameworks used in-proc. Makes sense?
Orleans provides both, so it's hard to separate. Easier for something like Kubernetes, which is just tooling.
Ok i'm not super familiar with Orleans: can I use Orleans purely by inter-proc / networked APIs? Which implies i can write my process in any language i want to? Or does it require me to host it (and the CLR) inside my proc?
The latter, but the restriction exists largely because Orleans is implemented .NET. If someone created a port for another language, I suppose they could interact seamlessly (you can plug in different transports and protocols).
:sigh: yeah ok, but then it still falls into the libraries & frameworks bucket. See, there are tons of open source libs for .net, maybe some were ported, but I think what@kellabyte pointed at is the lack of .net-based OSS "products", the things that run on their own.
I don't see how that distinction is really relevant. Some "products" (like Orleans) require that you use an SDK to interact with it (or take full advantage of it). Stuff like ServiceFabric or AppDynamics are also products, but also provide dev libs.
Sure but, the Actor model doesn't make performance claims. Its a programming model that makes it easier for people to reason about concurrency, and to write lock free code.
I would argue that the trade-offs for some systems are worth it, particularly if you are network constrained & not CPU constrained in your application.
Yeah for sure the tradeoffs suit some systems absolutely. My first programming job in my career was using an actor model that was actually at the OS level with transactional memory.
OS Level optimization for Actor models is Maybe an area where .NET can get into the OSS infrastructure game ;)
The project was a failure by the way. I learned a lot but it was a misuse of the actor model :P The actor model has some real tradeoffs that can be great but important to really understand.
I think the company spent $1 billion trying to make that project work after $400 million deep in investment across 1200 engineers.
1200 engineers? OMG? I think that may had to do with the failure more than choose platform. Too many cooks in the kitchen problem!
Not too many cooks. 400 hardware engineers and 800 software engineers. It was a big project. The architects spoke highly of the actor model and it just was a bad fit for this particular project but they stubbornly pushed it no matter what.
That's some real sunk cost happening there wow.
Yeah but I imagine investments into Windows have been similarly as large if not larger, right? This company was 90,000 employees and this was their flagship product aka their “Windows” at the time :P
It was their first multi-core system and they were convinced the whole thing including the OS should be actors. The debugging experience was AMAAAAZING though, you could see actor interactions in real time using a visual tool. It was so cool!
Yeah absolutely! It can also make it easy to write excessively distributed code as well though.
That is certainly one of the drawbacks, but that is probably true for any distributed system. The first rule of distributed systems is, don't.. :)
Not necessarily as much memcpy as you think, in Erlang binaries are shared between processes and garbage collected on count by reference, its just as variables are immutable there is no action-at-a-distance
Yeah some of the implementations can have really interesting optimizations! Not all of those translate to every OS though. Not every language can do them easily either. Some actor frameworks do everything over TCP as well :/
Indeed, once you hit the network it's all over baby blue
lock-free datastructures about _when_ to share data and _when_ to copy. Actor models imply copying at times where it is inefficient to do so. Actor model can seem much faster if you write really really poor concurrent code and can seem like “this is the way” but has major limits
Actor models are inherently message-based, which is the same for any other programming model involving network messages. Whatever you do inside the individual actor can be optimized just as much as code you write anywhere else.
Linkerd - Service Mesh (Go + Rust) Yes I am pushing for better representation and inclusion of the Rust minority!
Not to forget containerd (CNCF) born out of Docker which itself was one of the killer applications for Go.
To be fair, many of these have the requirements of a systems language. Many more things are being (re)written in Rust for that reason.
Talking about systems/infra soft, in this field c/c++ been the king with just few java. .NET its a desktop language, can't compare.
Nobody considers runtime security yet. 😛 Falco - Runtime security (C++)
The CNCF is brand whitewashing for Google, hence all the Go. I’m not saying Go is a bad choice for these things, but it’s popularity in this little pocket of the internet has nothing to do with how good it is
Projects start on their own and only later they eventually get under the CNCF umbrella. It is not CNCF that gets to influence how the projects are built. IMO resembles the early days of distributed computing with virtually all proj written in Java&adopted by Apache Foundation.
Completely true. Go became visible and successful in cloud because of Docker. Docker moved to Go because of productivity. Give people the credit they deserve. Google was not that interested in Go in the early days.
Is Go new "Java"?
I disagree.
But here are some systems JVM-based and well known, that are consumed/used by apps and devs from non-JVM languages: Kafka (Streaming) - Java Spark (Processing) - Scala ElasticSearch (Search) - Java Jenkins (CICD) - Java Neo4J (Graph) - Java Cassandra (DB) - Java To name a few.
Are you kidding? Both languages have their own space, Golang is a simple language designed for infrastructure projects, have you tried to code business logic with it? Golang can replace Java for certain tasks, but saying it can be used for anything is just nonsense.
Go is the new Java (in the infrastructure and dist sys niche!) and CNCF may be the new ASF. That being said, there is a lot of legacy enterprise code built on top of various j2ee servers that is not replaceable by Go. Nor should they be, just them rot along with COBOL.
In the case of services that talk to services and “using OO to model the universe” is overkill ... yeah I’ve been hearing this for two years already
Not close (and I like Go more than Java.) Go has a way to go to catch up to Java's ecosystem (not to mention the JEE specs, which as convoluted as they are, they provide enormous ROI.) Then there's all the Java-based OSSs - Kafka, Spark, Cassandra. Big data runs on Java, etc.
Because Google controls the technology so there language is the main focus.
I've no idea why, building infrastructure, one would choose .NET. seems like inviting extra, largely unnecessary bloat and conflict into a space that doesn't have any reason to accept it.
It’s not like Microsoft never explored one such path, a few dozen world class engineers and architects probably still suffer PTSD from that experience.
I think Go and .NET have different use cases. I would have a hard time selling Go for a line of business application. At the same time, even Microsoft chose Go for Dapr.
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. - dapr/dapr
Why wouldn't you use go for a LOB app? Are you unable to run them as a web app and unhappy with the gui options?
Seems like we should learn to Go...
While I agree with your point, .NET never was a very popular in OSS, specially in high-caliber projects (not only a raw count). As an example, very few (if any) Apache Foundation projects were coded using .NET.
Somebody picked go super early (docker), then Kubernetes , then everything else follows. Typical network effects . That’s not to say there isn’t merit in Golang, but you might be overly biased because that’s the space you live in
I am (was) a .net dev (I am now DevOps). I think .net is not used by the unix community because it is Microsoft. The unix community is the cloud. So this is the problem of .net core agabt go. The trust...
I think Microsoft need to have his own Linux distrib. Like aws. This will send the msg needed... We need to be honest... Windows is not for the cloud.
NET Core != Windows
I know. I use it on RHEL. And it worls better than on Windows. (Libcurl). I speak about the msg. Sadly not everything is technics... WSL is not enough. I speak about a AKS with a Linux distrib from MS. Dont misunderstand me. .net core rocks 🤘
And in my opinion the GAC was a mistake... too much tied to the kernel of Windows. @jsnover
I use Windows at work and at home I use macOS (think David was the same on the latter, though I think he may've switched. Traitor. Kidding). Since Core, I've been able to work predominantly on the MBP in macOS though at times needed to pivot to Windows (ie scaffolding)...
Since the recent update to Visual Studio for Mac, I don't even need to do that pivot. I've been able to stick to macOS. I can't speak for Linux side as I think it is limited to vscode/shell at the moment, but vscode/shell is pretty nice from my limited usage of the two.
What is macOs ? Lol Some marketing company ?
you're joking, right? If not, this seems to counter the "Microsoft Linux distro" messaging recommendation because it is a Unix-like that is Apple's focal point on desktop.
Apple is nothing tecnically. Desktop == Windows, Server == Linux. MacOs is a hoax. Nothing more
I think it's more than just that. I was amazed at how quickly "rewrite world" happened with go. Something about go really attracted system and framework level people that they were excited to "rewrite X in go."
Go was masquerading as a systems language in the beginning
Mostly because a founder called it one LOL. But I guess it depends on your definition of “system”. I kind of put most GC’d runtimes on a similar category. You can write service backends in the CLR/JVM/Go. Some GC’d runtimes I wouldn’t though like Ruby.
Definitely not a systems language like rust. Then it found it’s place into the services space
Doesn’t most GC’d languages though? My take is every 10-15 years a high level language takes over in the services/infrastructure space. At least until a non-GC’d language becomes more approachable
doesn't have to be fully no-GC. There is some unexplored language/RT space where some of the ownership model of rust is handled by convention or context instead of explicit. A reference could then be elevated to GC when/if it escapes a local scope, etc...
Project Verona would be really interesting to me to see writing real stuff in to see how it would feel to work with but I don’t think that’s going anywhere.
I personally define “systems languages” as having more system level control like explicit memory control, control of threads etc.
You can write an OS
I helped write an OS in a variant of C#. It had a garbage collector, thread pool, etc ... Would you consider that a systems language?
M#? Maybe. How GC was the GC?
Not substantially different than the .NET one. Had some features specific to Midori and our async model. But end of the day it's still a GC that can cause a pause.
Background GC? No control over when things happen? Not problematic for a kernel?
Myself I'd say no. When you're building an OS you have ultimate control and hence can absorb items like GC and thread pools if you plan properly for it.
I think of a systems language more in terms of what "policies" does it require in the host: a GC, thread pool, etc ... Every policy is a restriction on where the language can operate and how it could be used to integrate into existing systems.
When we did experiments integrating M# into existing systems the prob wasn't the interop boundary. Yeah it's annoying to define, define lifetimes, etc ...but it's doable. The prob is the host saying "wait, we have carefully managed threads here, u can't just add a thread pool"
Ability of compiling to native executables played a big role I think, along with built-in tooling which enabled profiling, race detection, etc. out of the box.
There’s a lot of reasons I think at play. A lot of people didn’t particularly like Java they just tolerated it. Go also statically compiles.
Static compilation is not the holy grail of compilation (I mean you have C, C++, Rust, yea, no GC and sometimes that can be a good thing too), JIT can be useful too. Depends mostly on what is gonna run actually. So in essence, it's all about what you want / need to achieve.
That’s not the order things happened exactly. Etcd existed awhile ago. CockroachDB existed awhile ago as well. OSS infrastructure people even the people who are not fans of Docker or Kubernetes flocked from Java to Go.
Docker came out before etcd (at least according to my limited research)
Could be, my memory is foggy but one didn’t really have much to do with the other. When the Raft paper was published a bunch of implementations popped up in Go including some from Hashicorp who has invested a lot in their products written in Go
Could be wrong about this but Go has allowed users to generate statically linked binaries but .NET didn’t have that ability until recently? Single downloadable artifact allows a lot of flexibility in my mind
Yes absolutely. Not having a runtime involved is a growing pro in the community. The appetite for runtime installs is shrinking. People love go binaries. However the JVM “hotspot” JIT often can compile and hot swap optimized code on the fly that’s way more optimized than Go can
- No runtime install - cross platform tools and builds - dependency resolution at build time These all make a bunch of things easier
But but generics... 😁
It’s coming actually. The uproar was big enough finally lol
I’m very aware that go2 will solve “everything” 😬
Why not just skip the 2.0 nonsense and go straight to Go3 or GoPi?
And why does this have to be a competition?
Like .net core did ;)
Historically speaking, C and C++ gave us THE ULTIMATE OSS project, namely, Linux (and all its ecosystems) Sounds like Go is enjoying the popularity that C/C++ use to have when it comes to systems programming. But is Go that much better and will have the same longevity?
I don't have to install a runtime to publish my .net apps. I have a docker image that already has it installed.
In my experience Go while it has some stuff I hate, it’s fairly simple of a language to get started with and people enjoyed starting new projects with it.
Like at the time writing a socket server was waaaaay simple in Goif I remember correctly. People just jumped over and started having fun.
I wish I could have a mix of Go and C# though. I would much rather async/await than goroutines and channels but I enjoy how less concepts I need to remember with Go. But Go has some really hidden gotchas that are nasty from lack of thorough language design consistency
During my adventures into Go I sorely missed things like linq when querying lists or arrays.
Yeah there’s things I missed too. In my old age I also am enjoying less things to memorize how they work for my own code and code reviews though lol.
One of the things I became OK with in Go is the lack of rigidity in project layout - it grated at first, but I learned to let it go and just do what made sense to me. By that I mean stuff like the equivalent of aspnetcore controllers, services etc. very different world!
Yeah I was so confused by go project layout at first. It was an odd start. I could read go code really early on and be productive really fast but I struggled with all the tooling lol. It’s much better now
I also just enjoy the go community in general. It’s more about building cool stuff, collaborating. IMO it’s so hard to find collaboration in the .NET OSS community. And it’s just tiresome pattern discussions. It’s like can we just build a fucking thing please.
What do you want to build Kelly? Lets do it.
I dunno! Hahaha.
Build an aggregated API with dotnet core using gRPC, before we do.
Aeron in C# would be nice! :)
Now that you said "let's do it", can you check out SharpPulsar on github? Am trying to port @apache_pulsar Java client to c#... But Java language wordings are a bit of an issue to me. Little help will take me far. Take a look at connection and connectionpool class under Impl pls!
i’ll definitely looking at making a kafka in .net, there’s no way that should be written on java
It depends where you go I guess - I’ve often not had the best experience on the golang slack, but we have a decent small .Net community on Jabbr. I don’t think in either case there’s one cohesive community, so it’s just a case of looking around for better.
Maybe if you hadn't spent the last couple of days trashing the .NET community it would be easier to find collaboration? Pattern discussions are tiring for sure, but community bashing is equally as tiring.
I remember getting torched because I didn’t use xunit or something or I should do TDD or BDD tests or whatever bullshit omg I get some of this shit matters sometimes but
In .NET you get torched for using RPC and not doing event sourcing meanwhile the rest of the world is just using gRPC but Microsoft WCF didn’t go well at times. It’s just omg wtf
Net I think suffers from the history of it being a corporate orientated language (you paid for VS for example), so a lot of the big guns in the community come from that aspect. Go is more akin to PHP in approach - easy tooling, you pick it up and create something with it.
I think also Microsoft provided all the dependencies you needed both libs and services for a long time but now people need more things. People eventually wanted to talk to Mongo and Kafka and Zookeeper and the list goes on and on.
Yup. But then I’m working at a place where we dev on Macs, using .Net Core, Mongo, Elastic and deploy to Linux containers. We are about as far from the old school MS orientated ways as you can get. So the world you talk about is happening 😁
You’re not using NServiceBus? You didn’t go to my course?!
Sorry I’m ranting unhinged :P
Because you want to see more things written in C#. Our techempower push has been a huge positive in this direction perception.
That’s a really good point. I had a blast doing all of that even though my code was a complete waste of GitHub space lolol
Haywire in a container... 😉 The benchmarks are missing you! I think the history starts showing up again when there is a current entry
That’s true, but is it worth it? My C code isn’t that production worthy. One company I know of uses it in production but that’s it. You folks here in this tweet have always been so encouraging. ❤️
Haywire put 90%+ of the other webserver's in the shade. Lot of love went into it, shame not to have it on the board. Though competition has become a lot fiercer at the top; but if it's there maybe others will contribute and improve.
Yesssss I’ve been thinking about that!
liburing has gone dual licence with MIT if you want to go that way instead
I've changed the liburing license from LGPL to dual licensed LGPL/MIT. This should make it easier for some folks to adopt.
You’re one of the kindest people in the community btw, thank you!
Aww damn that’s very kind of you. Now you’re inspiring me to take a peek. I’m pretty sure it won’t hang anymore but maybe I should fix it up a bit just for the completeness to get it back on the board.
But I like C and C# so it’s maybe not surprising I enjoyed a simpler but higher level language that shared some properties with C as far as limited things to remember.
A lot of people kind of coincidentally adopted Go at the same time. Heroku was maybe the first (doozerd) years before, we built Packer at the same time Docker was built (Packer came out first but we were all devving the same time). I think it was just independently a good choice.
I’ve given a few interview things about how we chose Go, I imagine others did basically the same logic. It was an obvious end point at the time.
There was good evidence dynamic languages were not right, JVM was coming off a peak with growing negativity (post Scala, Clojure, etc hype), Rust was literally changing syntax, .NET I think was still “closed” and feels like the JVM. You naturally get left with Go and C basically
It’s network effects now but circa 2012 and 2013 when a lot of this critical software was being paved, I also think it was one of the only logical choices. Then the rest is history. As they say, success requires timing as much as anything.
“A good idea at the wrong time is just a bad idea.”
I actually have a really crazy database idea that involves some C perhaps, some WASM and *ANY* language that can compile to WASM. It’s a crazy idea I would love to take a shot at.
Yeah it was a bit of a gamble but you can sometimes make smart gambles where you pay attention to trend hints. I’m not a “Rust is the future” person but I also see some people building the same types of things in Rust from scratch today that was happening when Raft+Go
There’s always a next language and the only other language I see that momentum building is Rust but time will always tell the truth. But if you survey the landscape where a shift is happening that’s currently where it may go in 5-10 like Go in 2012
whats your take on NIM? Seems to have similar features as Go. Plus it can generate Javascript code too. It doesn’t have as big community as GO and the backing of a large company like Google.
The simplicity of Go, the idiomatic api design, git-based module system, and the opinionated syntax are all good language design features in a distributed development ecosystem -- all big reasons for its success. I am currently in love with Go.
I don't think "network effects" had much to do with it, personally. Go is a language purpose built to be shared. It's an excellent candidate for an OSS development stack in general.
Net is not a framework to build something like kubernetes IMO. Also go is a language not a framework. Wanna see what c# does? Check unity! Jellyfin also one of the best open source media streaming is in. Net core. Why is the. Net bashing continuing?
Answer: religion. Pointless in all cases/forms.
net is for meat and potatoes lob apps and scales beautifully in size/perf/complexity. Also games. Consumer apps were fumbled with xamarin/wpf/uwp but Blazor and Avalonia are hopefully making up for the lost time.
yep, with .Net Core that should have be forgot...
I think it is still a pretty valid prediction. There's no point in picking JVM-based languages (e.g. Java) or CLR-based languages (e.g. C#) to write systems or infrastructure tools. Go/Rust are the new C/C++. But for business/domain apps, Java/.NET FTW
Predictions 2025: - #Rust to become a major systems language - #Go to become a major infrastructure language - #JVM (#Scala #Kotlin #Java) & #dotNET languages will continue to be major general purpose languages for business, mobile & big data apps - #Javascript will kill us all
Yeah. This really makes sense
But here are some systems JVM-based and well known, that are consumed/used by apps and devs from non-JVM languages: Kafka (Streaming) - Java Spark (Processing) - Scala ElasticSearch (Search) - Java Jenkins (CICD) - Java Neo4J (Graph) - Java Cassandra (DB) - Java To name a few.
Owned by one company not an organization and not a lot of outside contributions. RavenDB is a lot more similar to Redis in that way than any of those mentioned projects.
I still think that C# is a pretty good language and Microsoft really does an amazing job to keep it competitive to the new stuff that comes out. Unfortunately, though, it was never enough to overcome the community's beef with MS despite all effort MS put to change that.
I still get a lotta surprise from people when they know that dotnet are now running on Linux and Mac. And it is Open Sourced and MS contributes a lot. but even then, most people don't care anymore. They recognize that's nice and everything, but there's plenty of other cool stuff.
When I was looking for a new job, people were using Go, Elixir, Kotlin, even Rust and freaking Clojure (I loved Clojure). Only big companies with a lot of legacy stuff offered me jobs using .Net or Java... to be fair, I even found out a startup doing Java, but no .net.
And, not that I resent working for a retailer company or using .net. But, to be honest, I feel a little depreciation from some people when they notice most of my career was dedicated to MS platform. It takes a lot to prove your skills when you're trying to be hired by these ones.
Are you saying that big companies are not writing any new software in Java? I hardly doubt on that. And legacy is not a bad word either. Thank legacy for your always consistent bank statements, payroll and taxes.
The programming languages that will get you a banking job now. #Java #Python #Cpp #JavaScript…
Plus, if writing new code in Java (24 years old) today is considered using a legacy platform, then let's please stop using "legacy" languages like JavaScript (24 years old) and Python (30 years old).
And, look... I'm just telling my own experience trying to find a new job last year. I have some colleagues that felt the same, but still it could be a very short sample to make such conclusions.
But, as far as I can tell, from my own personal experience, I totally agree with @kellabyte. I think it's a shame 'coz I really think C# is great. It has aged wonderfully, being up to all the new stuff the comes out. But most people doing cool stuff don't take it in consideration
A lot of misspells... :(
That's not what I said. Big companies still use them, mostly because the massive amount of code they already have to maintain, and they don't trust new technologies nor even they care about what techies find to be cool working with. Surely there are exceptions, as always.
What I meant is, most cool available projects are not using any of those platforms (meaning Java and .Net). It has nothing to do with the platform's age. It has much more to do with how techies look at them, and how new stuff respond to it.
Very much true. But SOMEBODY is using .NET.
Literally 0.000001% use that. No offence intended but.
Small tools, small heaps or lot of free space in heaps - go.
Does Powershell count as an infrastructure tool?
Powershell is C# and .NET Core; also only mainstream fully cross platform scripting language (Windows, Linux, macOS), looks to be experiencing incredible month-on-month growth in use (as previous chart shows)
I’m going to take a wild guess and assume most use cases are already Microsoft ecosystem friendly people. I don’t know a soul who writes code in Ruby, Python, Go, Java who use PowerShell. I’m sure SOME exist but I would assume it’s quite low in comparison to Bash or others.
Those Microsoft ecosystem friendly people loving Linux (orange on graph) vs Windows (blue on graph)
Right but my overall point is OSS community is primarily not within the Microsoft bubble. People just don’t care about 90% of this stuff or don’t even know it exists.
The people you keep talking about are a type of programmer I’ve never met in person tbh. Most of us are concerned about web apps and mobile apps. I can’t tell you rewriting a core part of my stack came up.
From what I've been hearing about interviews, surely the first thing any new programmer does is rewrite the `.Sort` function in their tech stack? 😅
I tell them just trust I have @ben_a_adams on my side to alleviate any built in framework constraints. Seriously - your work has been awesome. #Thanks
I'm waiting for @damageboy's PR that rewrites Sort 😀
Waiting for me to publish sorting stuff? It's coming... Rewriting two key parts for the PR: 1. Partitioning: to decrease code-size (also improves perf, as a side-effect). 2. Bitonic Sort: Going for code-generation, to make review process simpler (It's 1500 LOC). For now: 10.55x!
I'll start by publishing my repo and blog posts this weekend. Just added one last silly feature where for any sort less that 128 elements I just copy+bitonic+copy-back. This way there is no single point where I'm slower (like 100 in that screenshot above)
I use .NET pretty extensively and I cut my teeth on Perl and Bash. I do not use Powershell unless I have no other choice
When I'm doing .NET on Linux I write Bash, not PowerShell. Even though I prefer PoSh for scripting it is not everywhere, and Bash is.
I actually use Bash both on Linux and Windows by bundling winbash in my OSS projects lol
If PowerShell's your thing and you already have dotnet installed; then you can just global tool it…
Only for Linux, right?
Same on Windows; just a different doc page :)… PowerShell Core rather than the other one
Only if I use 7 preview. Version 6 of the global tool is broken in several ways. I have no idea why we are having to wait months for those fixes and they don't land in v6. And until recently there wasn't the possibility of using 7 preview as a global tool. Decisions were made...
Wild guess: mostly folks who have previously used Windows, now also into Linux for e.g. Container reasons and want to stick with PS. Also: Does PS run inside WSL report as Linux?
Java doesn't even have the tools for writing high-performance code. No value types, no pointers, can't even pass values by reference. .NET/C#, on the other hand, have always targeted this type of programming and have had a lot of investment here lately. It will only improve.
Yes they do. Newer runtimes have more support now and there’s been some libraries that offer workarounds for some of this stuff. There’s java code based that handled a ton of requests/second with some tricks.
More than a ton. Check benchmarks. Java is often in top 5.
Yeah and some of the fastest message queues on earth are written in Java. Lots of tricks but it’s been done.
Java has primitive types but does not yet support custom value types, e.g. structs. Java generics can't be used with value/primitive types, requiring copy-paste implementation for every non-pointer type unless you want boxing.
Java's generics box you in (no pun intended) at the implementation level. Every large enough system ends up having to re-implement "okay I guess we have to pack/unpack everything into byte[]'s again". In C#? Just switch over to structs.
Depending on a particular JVM implementation, it's certainly possible it can do a certain thing faster than .NET. Benchmarks will tell the truth. But your engineers will be able to reach .NET's limits MUCH sooner than Java's. Java is just very labor intensive for optimization.
How familiar or up-to-date are you with OpenJDK these days?
I haven't done any Java since early 2018, and it was on Android. I haven't used OpenJDK. But, the language literally doesn't have pointers or value types? And the RFC I was reading on the proposed value types system was super facepalmy, loaded with awful restrictions.
If Java can add the language features that catch it up to C#, I don't see any reason why the JVM can't perform really well. My impression was that the best JVMs are quite fantastic, they weren't the problem.
The problem is that Java is just a goofy lobotomy of a language, with design choices that paint you into a corner all the time. You can get great perf, yeah. But it requires WAY too much work to do so. Way easier to get awesome perf with C#/.NET.
That doesn't mean the "best performing" whatever can't/isn't in Java. It's adoption across the industry is massive, much to my own chagrin. If you choose Java for your project then you've got a lot of battle-hardened libraries to choose from, and that's important.
If I were e.g. a CTO at a startup and I had to make the choice between Java or C#/.NET, I'd want the latter but it wouldn't be a slam dunk. Java's advantages are numerous, and you'd instantly have access to a very large pool of talented engineers to hire. Context would matter!
Anyway, point being, I disagree with "There's no point in picking ... CLR-based languages (e.g. C#) to write systems or infrastructure tools." Might not be ready for systems, like an OS. But I don't see why it can't for infra. Depends a lot on what you mean by 'infra' though.
btw I do haaaaaaaaaaate Java -- like probably more than California hates Trump -- and I don't hide it. I hope to never do any programming in Java ever again, I was (emotionally) miserable with it.
Yeah, any Java developer would be miserable with the language if you had to stay behind the advancements of the language (9+) and the JVM and its GCs.…
>> I haven't done any Java since early 2018, and it was on Android. I haven't used OpenJDK. Unfortunately this statement makes everything you said afterwards pretty much irrelevant. Android adopted the Java lang up to 7 plus few 8 features, and not the HotSpot JVM + GCs.
>> I haven't done any Java since early 2018, and it was on Android. I haven't used OpenJDK. Unfortunately this statement makes everything you said afterwards pretty much irrelevant. Android adopted the Java lang up to 7 plus few 8 features, and not the HotSpot JVM + GCs.
So Java has pointers now? Value types? Generics you can use with those? Android ... gawd, worst tech product on the planet, imo. Just a flaming pile of garbage in the hands of 2 billion poor souls.
Value types are coming. Proposal is on Pointers? Never, and on purpose. You are better off with C++ or C# if you want that. It's a trade off. On Android? Yeah, a very very successful flaming pile of garbage in the hands of 2 billion people.
Right, so Java still doesn't have pointers and it still doesn't have value types. And its generics still can't, and probably won't, be combined with them. You can't even do ArrayList<int>.
Earlier I said "Java doesn't have pointers or value types" and Kelly said "yes they do". And yet, we both confirmed that it doesn't? ¯\_(ツ)_/¯ Sure, maybe someday, but not today. Not in any shipping Java code or JVM. Proposals for value types are facepalmy, really bad stuff.
So the burden is thus completely on the JVM implementation to optimize everything? I'm admittedly not well-versed in this area.
Yes, it's the JVM's job to optimize the code.
No, you said Java doesn't have the tools to write high performance code. She responded saying It does. And she's right. It just happens that you don't need pointers to achieve that.
Well we're clearing talking about different meanings of the phrase "high-performance code." C# _the language_ still gives you many more tools for writing high-perf code compared to Java. Depending on domain, that matters.
But your thesis implied C#/.NET are not suitable for lower-level tasks like systems and infra. I was contesting that. Java definitely isn't suitable at all, but C#/.NET is. It's abstraction floor is simply lower than Java's, which is literally by design (for both of them).
I didn't say it can't be done. I said there's no point. But then, even Java these days has a good path for building CLI tools natively compiles down to the OS with GraalVM
Why do List<int> today if you can do List<Integer> and then do list.add(1) ? Autoboxing just works. And yes, for better improvements without having to make any changes to the code syntax, value types are needed. Coming soon. Pointers? Again it'll thankfully never happen.
What I'm finding about Java value types says it's part of the Valhalla project for Java 11. Not yet available. And by pointers I actually mean real pointers -- not references. There's a vocabulary difference between C# and Java there -- C# pointers are like C pointers
Like I said, it is a proposal:…
Value types are coming. Proposal is on Pointers? Never, and on purpose. You are better off with C++ or C# if you want that. It's a trade off. On Android? Yeah, a very very successful flaming pile of garbage in the hands of 2 billion people.
the only difference is, you have to wrap them in an unsafe { } block, right?
You can put unsafe in some other locations (method, class), but yes -- pointer usage is restricted to specially marked unsafe areas. And you must compile with /unsafe. Newer C# has obviated many scenarios for using pointers with strategically expanded use of 'ref'.
A lot of investments are happening on JVM space also ( to increase the program efficiency) like value types ,Fibers to name a few..For value types, there is already an EA build available
One thing we can all agree on - JavaScript will kill us all.
I would have preferred to die from Perl. $$##$ Arghhh!
This isn't a prediction. This already is the case. .NET will probably die though. JVM will outlive Go and Rust though.
I'm using .NET to do white box testing on our C++ app. Easy to write stuff, a bit messy to deploy (assemblies anyone), but gets really frantic with all these different frameworks, standards, etc... there is a lot to love, until you deploy...
I agree with @davidfowl comment below and I will add that MS was slow to adopting Docker because historically the Windows OS was the money maker so there was no incentive to support other OS platforms. But with .NET Core the future is bright.…
Somebody picked go super early (docker), then Kubernetes , then everything else follows. Typical network effects . That’s not to say there isn’t merit in Golang, but you might be overly biased because that’s the space you live in
Heee docker is tied to the Linux kernel it doesn't works on BSD just like that...
The @CloudNativeFdn sandbox project @strimziio is a healthy Java one.
Net core is not .Net Framework slow and steady it’s climbing up the ladder. Never forget enterprise is our bread and butter.
I think this is a big reason why:
With all the Go vs C# bashing on Twitter recently, there is one thing which really stands out. #Go was 1st announced in 2009 and is v1.13 today. #dotnetcore was announced in 2014 and is v3.1 today. That's a lot of constant unstable APIs. Not very dev & business friendly at all.
Bad id (too old): 245522124666716160
Java is the new Cobol
I recently checked and found that over 75% of CNCF graduated + incubating projects are written in Go, including most of the ones on this image. Pretty cool :-) #golang
I'm a bit shocked at this since Go is such a Fisher-Price toy of a language. (Two can play at this game) 😉 I would hardly consider .NET for core infra in any case. It reads like a "fish climbing a tree" metaphor.
I think a lot of us in the infrastructure world are bone-weary of fighting with virtual machine ecosystems. At least, I am. Bundling the VM helps a little but it's tricky legally, ugly technically, and still doesn't solve for all the other problems VMs have to offer.
Amen, especially after people get the bright idea of running a JVM inside a container, which itself runs on a VM. So many things you have to tune, manage and monitor.
Unfortunately, as they say, "It turns out you can write Java in any language."
Dotnet core felt a bit premature (and honestly with the grpc popularity) I had so many issues with dotnet in 2017. Java is killing the planet with its tasty memory JVM and after picking up #golang - it felt damn good! Especially after modules came out ❤️
I love Go and dislike Java. Not a fan of Kubernetes though, seems like KNU (not unix) and I don't get why being anti cross platform (Linux only) is a good thing when alternatives exist.
What a cheap troll. It's like saying that nobody considers the Derby shoe to play basketball...
to be fair, when jaeger started, they were copying a scala project :P
Very true! Still do to some degree I would imagine
there have been several discussions of a stripped down go backend, but for now there's a stripped down java one. sys tools still need uis so I think no avoiding javascript :D
Yeah. It feels like the appetite for the JVM is shrinking slowly.
I think go is more performant. I could be wrong though
Yeah you’re wrong. That’s a fallacy.
LOL. I may piss a LOT of people off sometimes but I’ll say what I think I know straight up :P The optimized code coming out of the JVM and CLR JIT are pretty damn good. Go has some rough perf spots. It has generally good to great perf though.
But the “Go is faster” narrative is maybe felt from people moving from Ruby (that runtime is hot garbage) and maybe JavaScript are times. If Go people tell JVM/CLR people Go is faster it’s probably because they are misunderstanding what “native compilation” means :P
Can you prove it?
You are absolutely correct. "You wrote a .Net app?", I said after asking CollabNet what their Agile project management software was written in.
Go seems to be very efficient for network plumbering, VMs based languages don't fit well with containers I think. Rust is hard to learn. GraalVM may change the game though.
This is so true but as a platform/SRE engineer who really don't like Go, this monoculture makes me so sad. I was casting interface{} to bytes just a few hours ago. Working with any k8s project is pure dependency hell. I don't understand why people love this ecosystem.
That part is painful for suuuuure
I spent a *lot* of my time at work last year digging though thanos, prometheus, k8s, tsdb etc and all of that code makes me cringe. The only *work* code I truly enjoyed reading was wireguard and that's mainly 'cuz its a break from go and it taught me a lot of kernel & networking
God THIS. Go is one of the more painful languages I've ever had to use.
C# is Java++ (the ++ for better syntax) with a less battle tested runtime environment and a smaller ecosystem of libraries. No reason to choose it over Java. Go is actually different.
I am sorry everyone is confusing what you are saying:"MSFT has lost the infra stack battle to #golang" with ".NET is bad". You definitely don't deserve that and your point is spot on.
Also adding: - dotnet core is doing the right thing (static bins were the infra pain point) - dotnet core runtime = unbeatable performance - fsharp = dark horse winner 🖤 & I've personally used it for infra projects - maybe azure funcs will 'save the day' one day? - fuck csharp
I have seen this discussion before. I don't care what technology (Java, .NET etc.) they used. Is this part of the "Sales Pitch" talk?
The vast majority of games are using C# via Unity.
I think she is talking about things grownups use? No Cblunt anywhere
I am using windows, go is none existant with anything I use except docker. The majority software of things I use are made in C#. Except vs code.
Even docker, is partially in go. Docker desktop for windows is in C#.
did you hear namecoin is in @torproject's nightlies? GROWNUPS
Not a perfect metric, but close enough to say that NOBODY is only applicable to the CNCF.
There’s not a decent Kubernetes API written in .NET yet.
It's Oracle factor.
Save the postulation. As an original author of Prometheus: I chose Go on the outset in 2012 due to the language hitting 1.0 and an opportunity to learn the lang. Go’s superior DevEx, fast compile iteration cycle, low spooky action at a dist. factor, and good perf. made it stick.
(And tweet size was arbitrary truncation. Eight years later, most of those reasons still apply for why I prefer Go, but several non-obvious new "stick factor" ones emerged in the interim.)
I would really quite enjoy using c# in places I've used go for such things, but I've never had a stable, performant and reliable way to source a toolchain and runtime that work well for multiple target platforms that still works six months later. Last I tried was ~4y ago.
That is to ask: is the toolchain stable and portable now? (Not stable as in program stability, stable as in "needs new build instructions in six months")
Maybe not related to the topic at hand but I remember our time that. Net was so much faster than Java. Microsoft did not capitalize on that
This is why I wrote a talk entitled « Gophers all the way down »
Was there a viable option to run .NET on Linux when Docker was created? Was .NET open source? MSFT changed, but too late to take Java's place in OSS
As a sidenote: I always hated unreadable Java stacktraces seen here and there. Nowadays I miss them. Typical go program just silently consumes problems, thinks don't work and there is no clue what happened.
There are many other languages as well that would be suitable. Personally I would choose @CrystalLanguage. I just don't see the problem why it should be a problem that someone decided to choose @golang. IMHO it's a good thing that everybody can choose freely.
Irrelevant. You know what? - Linux Kernel is written in C + asm. - SO use big chunks of C#. - Jet is using F#. - Docker and k8s were done in Go. - ELK and friends: Java. - Tons of android apps: Kotlin. Looks like you just wanna denigrate others.
We're in the process of extending & migrating a highly trafficked code base over to .NET Core 3.1. So we're going through this process. Many of those projects started during the era of .NET Core 2.0 or earlier. I don't think .NET was really ready then.
At @Bitly we started @nsqio in Go just before Go hit 1.0 in early 2012. I've never been happier to have so many tools outside of the JVM.
When Oracle took over Sun Microsystems, they failed to give Java the continued development a living language requires. Pity.
Worse than that is they aggressively sought to commercialise every aspect, shedding trust along the way
I am so glad I do not need to touch any of these projects. On the other hand Terraform is also written in Go. It does not mean that Go is the only suitable language for cloud native applications though.
It is all about money, not politics. Simple Go-written service consumes 5-15MB, now try to write the same in Java and you will see how much more memory it takes. Now i@agine you have several services scaled to many instances and calculate costs. Not sure how it looks like with C#
Kafka and Apache Pulsar unfortunately still uses JVM
Kubernetes was Java?
Literally no one. Go has secured a place of high regard.
Whatever these things written in these will serve to deploy .net applications😄
Other notable ones written in #Golang are Openshift and Terraform
Because C# is Java 😁
Was thinking about this and one non-technical reason for the shift away from Java might have been licensing.
I’m glad it’s not Java, and that c# isn’t considered. Java is terrible, and c# is just Microsoft’s slightly improved version thats windows-centric.