Microsoft Launches Its .NET Distribution for Linux and Mac

11 years ago (techcrunch.com)

F# is a real breath of fresh air in comparison to something like Scala. It's direct ML heritage really shows, also just diving in with an IDE (like Xamarin, or I suppose Visual Studio) is super easy.

I see it as the future of pop-functional programming. For example look at the way it handles type inference w/ JSON parsing. Compare that to what you have to do to parse JSON in Scala. It's subtle, but a major usability win.

  • Scala is getting really interesting lately though with projects like Spark and SparkSQL. Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes and then uses transformations on that plan, similar to how an SQL query optimizer works, to make the plan more efficient. The cluster compute benchmarks on it are crazy good.

    The only problem I have with Scala is that it has so many features that it tends to have a steeper learning curve than most languages. However, this is mitigated somewhat in that it lets one switch between object and functional depending on what's more convenient or performant, thus making it easier for programmers who are not highly skilled in functional programming to pick up.

    • Yeah, I did a presentation at the DC Area Apache Spark meetup... slides: http://www.slideshare.net/RichardSeymour3/2015-0224-washingt... associated blog post: https://www.endgame.com/blog/streaming-data-processing-pyspa...

      I've done a bit of scala spark as well, and my initial thought was prototype in pyspark and then rewrite in scala if necessary. Just this week DataBricks announced they are working on changing some of the data structures behind RDDs to save on unnecessary java object creation hubbub https://databricks.com/blog/2015/04/28/project-tungsten-brin...

      That and the SQL compiler thing seems pretty darn awesome. Spark has the nice benefit of being plug and play (w/ a joyful time of compiling and deploying) with legacy HDFS/Hadoop systems. That alone will keep it in toolboxes for a long time to come.

    • >Spark takes a Scala AST tree and computes a plan on it in order to distribute it to a cluster of possibly thousands of nodes

      Unless Spark has changed dramatically in the year since I used it, that's not really how it works. You lazily construct an expression graph of RDD operators but the actual Scala code (the functional payload of e.g. flatMap) doesn't get analyzed. Are you talking specifically about Spark SQL's code generator?

      >The cluster compute benchmarks on it are crazy good.

      ...and also carefully chosen to show off the niche cases where Spark shines. More commonly, you'll encounter crippling garbage collector stalls leading to mysterious and undebuggable job failures.

      Spark has a very clean API but the implementation (at least for Spark versions 0.8-1.0) is still prototype quality.

      2 replies →

  • I did a toy comparison of ML-derived languages running on Linux the other day (http://thebreakfastpost.com/2015/04/22/four-mls-and-a-python...) and found F# already simple to get along with and fast to run, at this beginner level. It could become a really interesting option.

  • Also interesting is their F* language: http://fstar-lang.org/

    "F* is a new higher order, effectful programming language (like ML) designed with program verification in mind. Its type system is based on a core that resembles System Fω (hence the name), but is extended with dependent types, refined monadic effects, refinement types, and higher kinds. Together, these features allow expressing precise and compact specifications for programs, including functional correctness properties. The F* type-checker aims to prove that programs meet their specifications using an automated theorem prover (usually Z3) behind the scenes to discharge proof obligations. Programs written in F* can be translated to OCaml, F#, or JavaScript for execution. "

    It's open source too: https://github.com/FStarLang/FStar

    • Gotta love automatic theorem proving. I read the Shen language book on "logic, proof and computation" which got me into the idea of a theorem prover inside of your normal language.

    • Have you worked with it? I love the idea of a fully powered F# without the kiddie gloves. F* looks pretty neat.

  • You would think something like OCaml would fill in that niche with its wider availability.

  • I don't agree, it's 'direct ML heritage' is quite superficial, as it omits ML's most powerful feature, functor modules.

    Scala however has all kinds of super powered functional programming features that F# is missing, implicit parameters for type class constraints, ADTs, higher kinded types, etc.

  • I know it doesn't say much, but having never coded in ML and having tried F# briefly (I code mostly C#, and it'd be easy to have mixed F#/C#), I think Scala has much clearer syntax, or perhaps it's just more familiar for someone who's coming from imperative languages like C++ or C#.

  •   case class Fruit(name: String, variants: Set[String])
    
      val fruitJson =
        Json.parse(
            """{
                 "name": "apple",
                 "variants": ["cox", "braeburn"]
               }""")
    
      val fruit = fruitJson.as[Fruit]
    

    Doesn't seem to be too painful to me.

    I agree that F# is syntactically closer to ML (though Scala is closer to ML with its module system which F# gave up completely).

    • In this base case, no, it isn't too painful. But once you get to larger and more complicated structures, F#'s type provider system can be a tangible timesaver. Especially if you're doing exploratory programming.

      TBH, I think the JSON example might underrate things a bit anyway. Where type providers really start to feel impressive is when you get to tricks like being able to noodle around inside undocumented (or poorly documented) COM interfaces with the help of CodeSense, or getting red squigglies in your editor (and compile time errors) when there's a problem with an SQL query.

      F# isn't all roses, of course. I really wish it had typeclasses, and discriminated unions are less powerful than Scala's case classes in some tangible ways. But from a purely pragmatic perspective, my (almost certainly biased) sense is that I can usually Get Things Done™ with less ceremony in F#, and type providers are a shining example of that pragmatism.

      1 reply →

My first question was "So how do I build "Hello World"?

For anyone else wondering that, go to https://github.com/dotnet/coreclr/blob/master/Documentation/....

  • 1) ghuntley@freebsd-frankfurt:~/coreclr-master % ./build.sh

    2) ghuntley@freebsd-frankfurt:~/coreclr-master % cp bin/Product/FreeBSD.x64.Debug/corerun ~/coreclr-demo/runtime

    3) ghuntley@freebsd-frankfurt:~/coreclr-master % cp bin/Product/FreeBSD.x64.Debug/libcoreclr*.so ~/coreclr-demo/runtime

    4) ghuntley@freebsd-frankfurt:~/coreclr-master % cd ~/coreclr-demo/runtime

    5) ghuntley@freebsd-frankfurt:~/coreclr-demo/runtime % ./corerun HelloWorld.exe freebsd

    Hello, FreeBSD...

    			       ,        ,
    			      /(        )`
    			      \ \___   / |
    			      /- _  `-/  '
    			     (/\/ \ \   /\
    			     / /   | `    \
    			     O O   ) /    |
    			     `-^--'`<     '
    			    (_.)  _  )   /
    			     `.___/`    /
    			       `-----' /
    		  <----.     __ / __   \
    		  <----|====O)))==) \) /====
    		  <----'    `--' `.__,' \
    			       |        |
    				\       /       /\
    			   ______( (_  / \______/
    			 ,'  ,-----'   |
    			 `--{__________)
    
    
    	Press ENTER to exit ...
    

    See also https://github.com/dotnet/corefxlab/commit/a39310b028ad830f8... - "HelloWorld: Pimp up the FreeBSD daemon to have colors. Basically pay full respects to the original console screen-saver."

This is interesting but is there any commitment to support it long term? I remember when Silverlight was supposed to be the savior that brought .NET to Mac and Linux, but that didn't last more than 5 years. Would be nice for MS to say they guarantee support for 10, 15, etc. years.

  • I'm playing devil's advocate: But Silverlight was too little too late. It arrived right as Flash was effectively dying. I don't blame them for killing it, it was dead on arrival.

    I can explain the entire problem with Silverlight using two dates:

    - iPhone initial release: 29th of June 2007

    - Silverlight initial release: 5th of September 2007

    Now, we can argue if iOS killed Flash, but I think between iOS's lack of support and all of the security issues associated with Flash, it was set up to lose popular support (and then HTML5/HTML5 DRM filled in the gap, even if it took years ultimately).

    Silverlight was a Flash competitor in a world that decided it didn't need Flash.

    • Silverlight was a half-assed, brain-dead attempt at trying to compete with Flash. It started out as a cool demo and then blew up into a role that didn't fit it well with insufficient support on the dev side. What it should have been was a competitor for AJAX/jQuery. What it turned into was just another video player browser plug-in.

      1 reply →

  • This is the thing with Microsoft is this is never in doubt. It is Google who ends of life's things and stops support. Microsoft still has supports things in Windows 8.1 that were BUGS in MS-DOS in order to allow programs from that era to run.

    Microsoft will support .NetCore for at least 20 years. Without doubt.

  • Silverlight is still supported by Microsoft - https://support.microsoft.com/en-us/lifecycle?c2=12905

    • I have the largest cable provider in the country and when I click "watch TV on my laptop" it launches Silverlight. (It sucks, by the way). But people pretending the thing isn't used and isn't supported are really grasping at straws here.

      If you're going to bring a plastic knife to a watergun fight, at least point it in the right direction...

      You know who didn't (and does not) support Silverlight? Developers!

      We moved on from Silverlight well before Microsoft did. That's the important distinction when you talk about sunsetting technologies. Microsoft's track record here is FAR better than that of Google or Apple.

      2 replies →

    • Supported with bug fixes, sure. Supported well enough to do modern application development (with the latest C#, .NET framework features, etc)? No. The last major release (Silverlight 5) was 4 years ago.

  • This is the CLR and .NET class libs. Unlike Silveright they have been supported for 15 years already, and will be aggresively developed in the future too. Besides, they've just been opensourced, even if this IDE project dies, those will stick around as long as Java will...

  • One thing that's nice is that it's now open source, so as long as it remains open source, it will likely remain cross platform. Contributers that are on non-windows platforms will likely notice when something breaks on their platform, and get it fixed.

    • Only core components and now a stripped down IDE are open source (core is actually free software IIRC). I will only be impressed if the entire runtime stack becomes open source. Otherwise it's still a platform for DRM or other forms of lockdown.

      If you're not porting a .net application to MAC or Linux, I would avoid this for quite a while still. We don't know where this is going long term.

      5 replies →

  • Has Google/Mozilla made the same commitments to Go/Rust?

    • It's a bit different when there's a runtime required to run the apps. An app written in Go/Rust today will run on a machine 10, 20, 100 years from now as it's just an entirely self-contained executable. A .NET app will only run on a machine that has a functioning and supported .NET framework.

      3 replies →

  • > Silverlight was supposed to be the savior that brought .NET to Mac and Linux

    Silverlight was supposed to bring .NET to browsers on Mac and Linux. Someone1234's comment is IMHO correct and very astute - Silverlight wasn't all bad, but it solved the wrong problem.

    On the other hand, this is all about bringing .Net to web servers on Mac and Linux. particularly Linux boxes and container in clouds. My experience may not be typical, but to me that's the right problem. The MS Azure team probably agrees.

Never thought I'd say this but go Microsoft!

  • I dunno about that.

    They're still charging and threatening people for Android patents without really telling anybody what patents they hold over Android.

    I think they realize they can make money via open source now and they might do this for future product. Threaten people via patents or some kind of trojan horse.

    While it's great we have another programming language and platform option but their actions so far in the past and present isn't so great.

    They also tried to make a Hadoop clone that failed miserably so now they team up with Hortonworks.

    Perhaps that opening sourcing their VM they can have big data projects like Hadoop and such. Oracle have big sway over Java and JVM. Perhaps that's what Microsoft wants. People might forget about Oracle and JVM but I still remembered and it really sucks for Apache.

    In general, I'm not taking this bet and I'll wait on it.

    Also with my current skill set which is mainly open source, it is fine not dealing with Microsoft. Unless they have a better market share and momentum in some niche market like big data with Hadoop, spark or whatever I wouldn't even think about touching their open source stuff.

So, what is actually new here?

They had already announced the various parts of this, and the only link I see in here is a GitHub repo with links to other GitHub repos that we've already seen. Is there anything new in this announcement?

Does it include the source? And how liberal is the license?

  • https://github.com/dotnet/coreclr

    MIT license

    • Pardon my ignorance, but I've never adventured too much into licensing stuff myself, and always had this kind of silly question roaming in my mind: what would happen if someone - after releasing some code open-source with the most permissive license, say on Github - immediately after changed their mind and changed the license back to a very restrictive one and someone had forked the project in that short range of time? Would their forked repository with the permissive license version be a totally legit code repository ?

      I know this is sounds silly, but I wonder if it's a thing or not that when a software company publicly releases some valuable code open-source, then there is always someone thinking: "better fork this as quick as possible! you never know!" :)

      1 reply →

  • The code that will allow the software to run on Linux and Mac OS has not yet been built. “It will be a few months before you can get your hand on this." -Somasegar

how long until i can `brew install dotnet`?

There'll still be no Winforms or WPF on Linux, is that right? So no desktop apps will be portable?

Yes! Finally we can use .NET on on Linux a supported official way.

Was able to build it and run the HelloWorld.cs example. You need to build coreclr and corefx on windows for the managed components, since only the core cpp source can be built on linux at this time. You also need to install mono and grab nuget and use it to fetch a few packages. But all in all it feels fairly historic.

http://i.imgur.com/XyCB3uA.png

  • .NET Core team member here.

    I'm glad that you were able to make it all work with the instructions[1] we provided. There are two major pieces that we're still working on, which you call out:

    - Compiling managed source on OS X and Linux with Roslyn.

    - Running DNU (NuGet) on .NET Core to restore packages.

    Most everything else functionaly works. Once those are solved (and we are close to it), the experience will be great. In just a few commands, you'll be able to acquire .NET Core, restore packages and run your app, independent of which OS you are on.

    For .NET developers, it is indeed historic. Community and corporate developers alike are quite excited and see a lot of new opportunities going forward. You might have noticed that the community is leading the OS X and FreeBSD .NET ports, with support from Microsoft. We added official FreeBSD CI[2] only a week ago, upon the request of the community.

    [1] https://github.com/dotnet/coreclr/blob/master/Documentation/...

    [2] https://github.com/dotnet/coreclr#build-status

    edit: formatting

    • Thanks for chiming in. Really looking forward to further developments. As a 15 year+ Windows development veteran whose been doing python on Ubuntu for 3 years it's great to be playing with .NET again. As far as the HelloWorld instructions go, they worked very well, so kudos on that. I think it's super important for developers to be able to jump in and check it out. I also should have mentioned that I used docker's ubuntu:14.04 image as a launch pad for this exercise, and it worked great as well.

      1 reply →

So does this mean that we might have Microsoft Lync client coming up for Linux?

When I tried to use Lync on browser, I remember seeing something about .NET. Or is it silverlight?

  • God, its like you took a dozen unrelated words and shoved them in a blender and this is what came ou.

I'm curious, is there enough released yet to build server-side web apps? Would there be an apache mod, or some other web server? Or is there something more akin to a node app? I really enjoy C#, but everything that I did was either a Windows-only desktop app or a web app served through IIS. Thanks for any insight.

I see a pattern here. People were excited about JVM, then came along CLR. And it is now getting attention as MS is porting it to Linux/OSX. Next cool thing will be BEAM (Erlang's VM) based languages, i.e. Elixir, Lisp Flavored Erlang etc. Reminds me of the hype cycle. So lets get hyped!

Funny thing I cloned their repo yesterday on Mac Os to check the advancement of their project, I could run the hello world and the static Web site but not the MVC one.

Microsoft moved further into Java territory; "Write Once, Run Anywhere"... literally, with an editor and the runtime.

Does this mean we are going to see a .NET based desktop environment in Linux anytime soon?

  • Immediately it means you'll see developers that use the Microsoft stack developing and deploying into docker containers running on Linux.

In order to stay relevant, Microsoft attempts to supplant Xamarin's stakehold in the Linux/iPhone market, by directly eating their lunch.

This is the same thing Microsoft did to IBM. Microsoft will do it to any "partner" they feel they can cannibalize. The Halloween Documents are not only relevant, but canon with this move.

How long until I can develop with Unity game engine from Linux?

They mercifully waited until Java caught up a bit with version 8.

Seriously, they could have fair chance, C# was so much better, but today it's still quite better but java is proven and has more libs.

  • Java, with Oracle at the wheel, is not going anywhere. They've added closures in 8, big deal.

    C# is centuries ahead of Java 8, and with even more to come faster. And I'm saying that as an old Java dev (for 8 years up until 2008 or so) who have only dabbled in C#.

    • Yeah, but a lot of the features they're adding or just talking about adding to C# are already in more modern JVM languages like Kotlin / Scala / Ceylon.

      Kotlin in particular has quite a lot of the things like people like in C# (no full equivalent to linq though), and some things that are only pencilled in tentatively for the version of C# after next, like full nullability in the type system. And you can convert Java files to Kotlin with a single keypress, and your entire project still compiles, so there's a migration path for Java devs to Kotlin whereas there isn't one from Java to C#, really.

      So yes the Java language moves slowly. However Oracle/Sun have barely been trying with the Java language: the bulk of their efforts are going into things like upgrading the standard library, better virtual machines, better support for more types of languages, better performance etc. I think they've pretty much bitten the bullet on letting other companies run with language research and development (like JetBrains)

So, what exactly is .NET? As a non-corporate Mac user, I'd like to know.

  • Think of it as like the Java runtime environment, but not terrible.

    You have two main pieces: the Common Language Runtime, which is the virtual machine (like the JVM) that executes the code. Then you have the library it comes with, which is fairly large compared to most languages.

    edit: Added more context

    • > Think of it as like the Java runtime environment, but not terrible.

      What's terrible about the JVM/JRE?

      Many people complain about the language Java (conservative language, programmer culture of complexity...), or the web browser plugin for the JVM (security vulnerabilities, bad startup performance...), but I've generally heard good things about the JVM itself.

      3 replies →

    • One of the interesting things I'm waiting to see is if .NET gets good enough to become the "main" platform for compile to VM languages like Clojure. It can already compile to .NET, but it's significantly less used than the JVM version, despite .NET generally being easier to target.

      1 reply →

  • It is like the Java runtime, but started afresh with all of Java's learned lessons taken into account (although Java with 7 and 8 in particular is catching up).

    Up until now however it has only ran on Windows which was its biggest "downside" Vs. Java which runs on many platforms.

    • > started afresh with all of Java's learned lessons taken into account

      I don't think that's really historically accurate. Java and C# were pretty similar back in 2002. The .NET team was more willing to add complexity and occasionally make breaking changes, like generics in CLR 2.0.

      1 reply →

    • So, why would a Mac user develop in it, instead of in a Windows (virtual) machine?

      How would .NET compare to Apple's native environment?

      I guess the whole point is to write cross-platform code, but is the .NET environment that much better than Swift/Xcode?

      I mean, Java never really caught on with the Mac user base.

      5 replies →

So, what can one develop using this beside "hello, world?"

Can I build a cross platform GUI application? Is there a servlet container? How about an IDE?

Dear Microsoft,

      Please stay away from Linux. It is windows which converted me to Linux. 

Sincerely, A happy Linux User.

  • Windows and .NET are different things. I'm fairly confident being able to run .NET on unix machines won't affect you very much so you can stay a happy Linux User. Also, times are changing man, for the better. Embrace it.

    • The only part which scares me is that people will start making Linux apps using dotnet technologies. >Also, times are changing man, for the better. Embrace it Yup. That is why MS had to realize that *nix is eclipsing it in cloud and to grab extra some extra pennies out of our pockets, they are releasing their products on these platform just to fool us that they care. Actually they don't care us at all.

      4 replies →

Too little too late.

  • I don't think is too little but I'm sure they are late. Too late? Probably not but imagine if they did this 10 years ago, the impact it would have had on Java and many other ecosystems. I bet many of them would have been smaller and MS larger.

Mono has been a thing for so many years, this is kind of a joke to me. Maybe its just that my hatred for Microsoft runs so deep.

  • The difference is the Microsoft implementation is probably going to be much better quality and better documented. Also, you can't compare Microsoft of ten years ago with the Microsoft of today.

I don't know who they're trying to fool. I don't run MS software in my computers and I never will.

  • In case you use linux, i have bad news for you. there is by now many code lines from MS.

    • Strictly speaking the statement is probably still true if lottin doesn't use Hyper-V (and most people don't).

Am I the only one bothered that they didn't include the space between the "OS" and the "X"?

More importantly, this is huge, but as a Linux developer/user I still have no desire to use .NET on my platform. Maybe Mono has scarred my permanently.

  • Also linux developer/user and I'd crawl over broken glass to have a reliable C# runtime on Linux, it's my absolute favorite language.

    • Just out of curiosity why? I personally can't imagine why someone would choose it as a favorite. Not because I think it is bad, but because I feel its kind of a kitchen sink language that doesn't really have any clear advantages or features.

      1 reply →

    • I have been using C# on Mono for a back-end and so far so good.

      For code I am editing on MonoDevelop or on VS and then compiled and ran on Linux.

  • Nothing wrong with Microsoft bringing OSX and Linux to parity with Windows. In fact, there's a lot right with it. I like this new Microsoft, and I've been using Linux for years. Keep up the good work Redmond!

    Excited to see that interesting tech like C#, F#, CLR, LINQ and friends is heading our way. If anything it'll give Java a run for its money and that's no bad thing.

    • I don't think anything is giving the JVM a run for its money. There are millions of man hours that have gone into performance tuning the JVM. The CLR has substantially less. Possibly for mid-size projects the CLR _could_ be an alternative but for the foreseeable future any administrator who is comfortable with Linux is likely also comfortable with the JVM tools necessary to troubleshoot and improve JVM performance.

For a moment I thought Microsoft is releasing a Linux distro with .NET sdk pre-installed.

It would've been great if the author knew what 'distribution' means in this context.

  • It would've been great if the author knew what 'distribution' means in this context.

    "Distribution" is hardly specific to Linux distributions in technical circles. I don't know how you got that impression. The term is synonymous with software bundle, e.g. "Erlang/OTP distribution".