10 ms·
I'd like to switch away from Java in future applications, and C# seems like the top contender, but there are questions I'd really like answered before I make th
by librexpr 9y ago
I'd like to switch away from Java in future applications, and C# seems like the top contender, but there are questions I'd really like answered before I make the switch.
I see a lot of people talking about Microsoft open-sourcing .NET Core. But as someone who's never used it, what is .NET Core? And if .NET Core was open-sourced, what about the rest of it? Am I likely to run into major parts of the ecosystem that are still proprietary?
Also, can I develop and use C# applications on Linux without feeling like a second-class citizen? The ability to easily develop on Linux using free software and then run on my clients' Windows computers is one major reason I use Java at all, and I definitely won't switch to a language that doesn't support Linux properly.
And finally, how likely is Microsoft to fuck free software developers over with proprietary extensions in the future? This is Microsoft we're talking about, after all.
- oblio 9y agodotnet core = new, entirely cross platform runtime + core libs meant to serve as the new core of dotnet. In the future everything dotnet will be based on it, for now this isn't the case cause of legacy code. Basically you'd have dotnet core + Windows stuff for the Windows framework, dotnet core + various bits for Mono, etc. Regarding the ecosystem, even Java has proprietary libs on top. For dotnet, Windows stuff is still proprietary, but even that is changing. You won't care about it anyway. Just make sure you stay within dotnet standard (i.e. cross platform API standard for dotnet) and either use Open Source Microsoft extras or just use community-developed stuff. For Linux C# dev, Jetbrains Rider or Visual Studio Code + C# plugin. Regarding extensions, the battle has shifted. Microsoft is fighting Azure and GCE these days. The proprietary bits are in the services. The clients are Open Source to get mindshare, so no worries there.
- draw_down 9y agoHeck, I spent years earlier in my career as a .NET dev and I also don’t understand their naming. I wasn’t totally clear on what .NET core is. It’s not the biggest problem but the way they name things is quite confusing.
- ZenoArrow 9y agoYou know when movie franchises go through a reboot? That's very similar what Microsoft is doing with .NET Core. The 'Core' part of the name is hinting at a redesign based on a new runtime. They could've called it .NET Framework 6, but that doesn't give you any hints about the rewrite. I appreciate it's still not the best name in the world, but hopefully the analogy helped. To add some additional information, whilst there has been a redesign, work has been carried out to allow a certain level of backward compatibility. This work is referred to by the name .NET Standard. Can think of this as re-implementing a selection of commonly used libraries from older .NET versions on the new .NET platform to make porting easier. The most up to date .NET Standard version is version 2.0. https://github.com/dotnet/standard/blob/master/docs/versions.md https://github.com/dotnet/standard/blob/master/docs/versions...
- draw_down 9y agoI know you’re trying to help but good grief.
- jsingleton 9y agoI've written[0] and spoken[1] a lot about .NET Core, so I understand that it can be confusing. The similar naming certainly doesn't help. To summarize (and oversimplify) there are three main varieties of .NET: .NET Core, .NET Framework and Xamarin. The new open source and cross-platform one is .NET Core and it is currently suited to writing server-side web apps (e.g. ASP.NET Core) and command line applications. It is a reimplementation of .NET and more use cases are coming (UWP, CoreRT, native tool-chain etc.). The Windows only one is .NET Framework and it is better for graphical desktop apps on Windows. WPF and Windows Forms are not open and are Windows only, so are not in .NET Core. Finally, Xamarin is also open now and lets you build native mobile and desktop apps on Android, iOS and macOS. Full details of all these are on the official docs site[2] if you want to read more, or you could buy my book on ASP.NET Core 2 :). [0]: https://unop.uk/book/ https://unop.uk/book/ [1]: https://unop.uk/talks/ https://unop.uk/talks/ [2]: https://docs.microsoft.com/en-gb/dotnet/ https://docs.microsoft.com/en-gb/dotnet/
- supergreg 9y agoWhere does Mono fit in all this?
- akoeplinger 9y agoXamarin is built on top of Mono. The same applies to Unity3D. We're sharing more and more code with .NET Core now so there's convergence happening but there are still pieces that are unique to us. Disclaimer: I'm working on Mono for Xamarin/Microsoft.
- paavohtl 9y agoMono is a reimplementation of .NET Framework. It supports most APIs and modules from the full framework, with one notable exception being WPF, the UI toolkit. They've been integrating code from .NET Core for better compatibility, but ever reaching 100% feature parity with the full framework is rather unlikely. Mono used to have it's own C# compiler in addition to the runtime, but since the official C# compiler is open source, well-engineered and cross-platform compatible, it now uses the same compiler as other runtimes. Xamarin is based on mono, and Unity ships Mono as their .NET runtime. Mono supports the most platforms out of all .NET implementations, including all current and previous generation gaming consoles.
- blunte 9y ago> And finally, how likely is Microsoft to fuck free software developers over with proprietary extensions in the future? This is Microsoft we're talking about, after all. There's a radical change in public behavior of Microsoft since Satya Nadella became CEO. While at first I was skeptical, it's now been three years we have had to observe whether Microsoft's actions match their promises. So far, I'm impressed. I think their new vision and approach to doing business is much improved from that of their previous two CEOs - it's better for consumers and developers, and frankly it was necessary for the long term survival of MS. I don't expect to see nasty behavior from them like we have seen in the past.
- rainbowmverse 9y agoIt seems like the floodgates opened after VS Code when Microsoft realized people actually like what Microsoft produces when they make it easy to use (no confusing, expensive licensing), so there's no need to lock people in. Everything people ever hated about Microsoft was a result of it trying to protect its monopoly rather than coexist. They're still a little confused about Windows (why do I need to spend $50 on Pro to encrypt my drive?), but you can get Office on anything now. Even Edge has an Android port (beta).
- nofilter 9y agoNasty behaviour is still there. Windows is a joke in terms of how bloated and clunky it still is, how it snoops on you, doesn't let you turn off updates without doing some shady things with the register and whatnot (which, a regular person, will never be able to do) and it has ads in the OS.
- jupiter90000 9y agoWhat about when the CEO changes?
- oblio 9y agoWell, they could commit suicide and get a Ballmer clone. They lost control of the client (it's web + Android/iOS now), steering away from the current course and back to the old one is a sure way to irrelevance.
- Sylos 9y ago> Also, can I develop and use C# applications on Linux without feeling like a second-class citizen? I don't have much experience with C# development and basically none with .NET, but so far my experience has been a clear No. The elephant in the room is the IDE. Visual Studio is the C# IDE and doesn't exist on Linux. There's MonoDevelop, which is now also owned by Microsoft and seems to share some components with Visual Studio, but it's still not nearly as powerful of an IDE. It feels more like a clunky text editor with a button that will make your program run. Next thing is that I don't think, you can really develop GUIs on Linux. There seems to be some integration with GTK in MonoDevelop, but I sort of doubt that this works well, and my experience in Visual Studio has been that you practically cannot develop GUIs in C# without using Visual Studio, as so much of the design process is directly integrated into that. Also, developing a GUI application on Linux that will run on Windows, I don't think is possible at all, though I haven't spent much time researching that. Last point that I have is sort of just a dumb bug, but it felt the most like I'm a second-class citizen. MonoDevelop does not currently support executing console applications on an external console on Linux when you install it via Flatpak (which is their primary distribution method). But that by itself is not even the problem, it works fine with the internal console and I can live with that. The problem is that there's a checkbox to enable running on an external console and that checkbox is enabled by default. You cannot run console applications on MonoDevelop out of the box, solely because of this. And console applications seem to be the main-thing that MonoDevelop is good for, so you'd think they would test that and ensure that it works, but apparently not. And really, just disabling this checkbox by default would fix the issue. What makes this issue worse: 1. The error message is entirely cryptic, it says "Debugger operation failed - Cannot start process because a file name has not been provided.". Thankfully, the internet coughs something up quickly when you copy-paste that into a search engine, but at least I personally first thought I had forgot to give it a file name somewhere and tried to find that. 2. This isn't just one flag in the global settings that you have to flip once and you're done. Instead it's a per project setting, so you have to flip it every time that you start a new project and it's not particularly easy to find either. 3. This has been a known issue for a while (or at least, I hope that they know about it).
- Const-me 9y ago> the IDE https://code.visualstudio.com/Download https://code.visualstudio.com/Download > I don't think, you can really develop GUIs on Linux. I can. E.g. recently I’ve picked GLES + NanoVG for the lower level of the stack, and implemented the upper levels (controls, touch input, transitions, etc.) in C#. There’re higher-level approaches, including a couple of cross-platform ones (Gtk#, Avalonia, electron-based), I’ve picked lower-level stack because I needed to replace the whole Debian desktop including its desktop manager.
- hacker_9 9y ago.Net, C# and a version of Visual Studio have always been free since their release 17 years ago...
- Sylos 9y agoHe means free as in freedom, so it has to respect the freedom of the end-user to inspect the code, modify the code to their needs and to redistribute their modified version as well as the unmodified version. Basically open-source, but with the strong philosophical difference that the goal is for the users to have their freedom, not for a company to apply the same software development strategies that made Linux and Firefox so successful. (Also, someone will now murder me in my sleep, because I've said that it's basically open-source.)
- eddiezane 9y agoI recently wrote about working with .NET Core on macOS and Linux [0]. The TLDR is the dotnet install script works great. Use Jetbrains Rider if you want the best experience (though not free). VSCode is just ok. Overall I've really enjoyed my dive into this world I never thought I'd be a part of (let alone exist). 0: https://doesnotscale.com/developing-with-net-core-on-macos/ https://doesnotscale.com/developing-with-net-core-on-macos/
- dominotw 9y ago> C# seems like the top contender > can I develop and use C# applications on Linux > I definitely won't switch to a language that doesn't support Linux properly. I find this comment really strange. What makes C# top contender for you ? You seem to be asking really basic questions about it.
- librexpr 9y agoIn truth, C# was the "top contender" because it was the only contender. Sorry for the misleading way I phrased it. My main reason for using Java is for the easy cross-platform development. Most of what I code are basic GUI apps that do conversions between spreadsheets and various file formats. Java's "compile once, run everywhere", with its GUI support and many libraries, is exactly what I'm looking for. When I heard that .NET was open-sourced and getting support for all platforms, I thought that meant it could be an actual competitor to Java for my use-case. As I've learned from the responses here, it's actually not, and my fears of running into major parts of the ecosystem that are still proprietary were well-founded. I don't need to worry about "future" proprietary extensions: they're already here!
- severino 9y agoWhy would you want to do that? What do you find missing in 2017's Java and JVM comparing to other solutions?
- marcosdumay 9y agoYou can technically do everything with an all open-source stack. But you will have to create most of your workflow and integrate your tools by yourself. The all integrated official environment is closed-source only. On Linux you'll be a second-class target for libraries. The language itself is well supported, but only it. About future Microsoft behavior, your guess is as good as mine.
- JamesBarney 9y agoMost libraries are being moved over to .net standard which is fully compatible with .net core.
- oaiey 9y agoI am a decade long VisualStudio user but since .NET Core I switched to VS Code. I cannot understand your complaints at all. Tooling is nice and sweet under VS Code and from the command line. VisualStudio has so much irrelevant bloat that they rewrote even their VS installer to simplify it. For .NET Core the whole experience is very similar. The second class target is also not accurate. Azure (the future of MS) runs 60% Linux (afair) which makes .NET Core on Linux their primary target. Give Microsoft and the .NET community a break. They achieved a lot in three years. The vendors other than the .NET team (including the rest of MS) just need some time to adopt their libraries (I am looking at you Amazon).