.NET Goes Open Source

Some big news in the .NET/Microsoft world today: the .NET runtime (roughly equivalent to the JVM in the Java world) will now be fully open source (MIT License) and cross-platform. This means .NET will be fully supported on the Mac and Linux. It looks like the aims of Mono, the current community-driven cross-platform open source implementation of .NET, will now be fully realized as part of the core .NET platform. Mono is primarily leveraged for cross-platform mobile app development with the Xamarin ecosystem. Microsoft’s further partnership with Xamarin means that .NET is one of the most compelling mechanisms for cross-platform development today.

I’m excited to see Microsoft embrace open source. The effective patterns and practices that we’ve seen emerge and evolve in the open source ecosystem, regardless of platform, can be lost on individual enterprises or proprietary vendors. It’s great to see Microsoft seeing the value and effectiveness of these patterns and aligning their efforts with how developers work, not the other way round.

I’m also happy to see a desire on Microsoft to deliver the best solutions on any platform, not just the BYO-platform attitude that we started to see a year or two ago (which was still revolutionary for Microsoft).

News round-up:

Recent Azure Highlights – November 2013

Earlier this week Scott Guthrie had a another round of announcements (just two weeks since the last round) of Azure awesomeness . Highlights included:

  • Web Sites now support remote debugging
  • WebSocket support for Azure Web Sites
  • Continuous delivery support for Git in TFS

Some takeaways for me are that Azure Web Sites are receiving the same TLC as traditional Azure Cloud Services (web and worker roles). Also, Git is becoming a first class citizen in the TFS/Microsoft world. Git provides key capabilities that allows enterprises to be more collaborative than traditional TFS version control and aligns with open source development practices that foster multiple contributors across projects.

In other Azure news, Microsoft has released the Windows Azure Scheduler. It provides the often needed capability of invoking services or messages on simple or complex recurring schedule. This eliminates the need to rely on third party services or bootstrapping a service to use a task scheduler library. Sandrino Di Mattia has an excellent overview of the service here: http://fabriccontroller.net/blog/posts/a-complete-overview-to-get-started-with-the-windows-azure-scheduler/

.NET/Azure Folks: Learn Reactive Programming

On November 4th, the course Principles of Reactive Programming will start on Coursera: https://www.coursera.org/course/reactive. While the course is not taught in .NET, the principles are platform agnostic but is particularly targeted at building distributed and scalable systems. You can learn more about the characteristics of these systems here: http://www.reactivemanifesto.org. One of the course instructors is Erik Meijer, a former architect at Microsoft with large responsibilities in the development of LINQ and Reactive Extensions.

Current guidance on building distributed systems on Azure focuses largely on more infrastructural concerns, such as using queues or Azure Service Bus for distributing work. (See Clemens Vasters’ video blog on Channel9 and course on Pluralsight for excellent guidance in this area). This will be changing as frameworks and tools emerge that embrace the distributed nature of computing, much in the same way frameworks like Entity Framework provides a programmatic model for the database, or Web API gives a model for HTTP.

These efforts are already well underway at Microsoft. Microsoft internally uses Reactive Extensions for message processing on Azure, as evidenced by their CloudFx framework. They are also developing actor model libraries similar to Akka and Erlang that provide a simple programming model for programming distributed systems. Code-named “Orleans”, a framework similar to Akka has been in the works by Microsoft Research as far back as 2010, and is used in production by the Halo team for building real-time gaming services. ActorFx, an Actor Framework for Windows Azure, is another effort in this area to provide a language independent model for distributed systems.

While all these frameworks are at various levels of maturity (or availability), the consensus is clear in the community for the need to develop a programmatic model for building resilient and scalable systems to take advantage of both the increasing prevalence of distributed systems in the Cloud, as well as the increasing number of cores available on today’s processors. If you are building systems that require resiliency and/or scalability in a distributed or multi-core environment, understanding the patterns and solutions available to build these systems is essential to good software engineering. Of these frameworks and libraries, Reactive Extensions is already a success story, being adopted both within Microsoft and the wider community. Recent examples include GitHub’s most recent release of their .NET client features a Reactive companion package, and Netflix bringing the same concept into the Java world with RxJava, using it heavily with their APIs.

Instead of re-inventing the wheel every time we come up against these challenges, let’s learn and work together to build and master the tools needed to address and achieve the potential of today’s distributed environment.

Update: In addition to the Coursera course on reactive programming principlesErik Meijer is offering a live course focused solely on Reactive Extensions (Rx). Sign up at https://rx.yapsody.com.

Links/Resources

Reactive Programming

Principles of Reactive
Programming on Coursera

Reactive Manifesto

Reactive Extensions

Reactive Extensions
Project Home
GitHub: Rx.NET and RxJS and more
DNR: Reactiv Extensions
Functional Reactive Programming in the Netflix API
Learn Rx in SF with Erik Meijer himself: https://rx.yapsody.com/    

Microsoft “Orleans”

Orleans Project Home
Orleans Channel9 Team Interview
Microsoft opens early adopter program for its ‘Orleans’ cloud framework
Orleans: Cloud Computing for Everyone – ACM Symposium on Cloud Computing (SOCC 2011)

CloudFx

Understanding and Using the CloudFx Framework

CloudFx Samples

CloudFx on NuGet

ActorFx

ActorFx Project Home

Programming
the Cloud with Actors: Inside ActorFx

Akka