🟥 ATENCIÓN: hemos creado un post más actualizado, basado en vídeo, en el que te aclaramos toda la terminología más reciente.

Ya han pasado dos años desde que se empezó a hablar públicamente sobre .NET Core, y poco más de 1 año desde que se lanzó la versión 1.0 de la nueva plataforma (apareció el 28 de junio de 2016). El mes pasado Microsoft lanzó, por fin, la versión 2 de .NET Core, ofreciéndonos una segunda encarnación más robusta y completa de la nueva tecnología.
A pesar de todo este tiempo, aún hoy en día sigue habiendo una gran confusión en torno a todo lo que tiene que ver con la plataforma, sus versiones, sus compatibilidades, etc... En este periodo hemos escrito varios artículos tratando de explicar estas cosas y orientar a los que lo necesitaran. No sin dificultad porque, sobre todo en 2015, las cosas no estaban claras ni siquiera internamente en Microsoft, y la cuestión pegó muchos bandazos.
Ahora que ya tenemos una versión madura (la 2.0) de la plataforma ¿en qué estado están las cosas? ¿Qué debemos esperar de cara a finales de 2017 y principios de 2018 en lo que respecta a las tecnologías de desarrollo de .NET? ¿Cuál es el panorama actual?
¿Es una tecnología, son dos o quizá más?
Aunque son muy parecidas, comparten lenguajes, clases y funcionalidad, se trata de dos tecnologías totalmente diferentes. De hecho podríamos hablar en realidad de 3 tecnologías de desarrollo de Microsoft, si incluimos a Xamarin, que también está basado en .NET pero tiene su propia implementación multi-plataforma basada en Mono.
Por lo tanto ahora mismo existen 3 stacks tecnológicos separados, que a pesar de compartir muchos conceptos, son tecnologías diferentes y paralelas:


También conocida como .NET "Full Framework" o .NET "Tradicional".
Se trata de la plataforma .NET "de toda la vida", aparecida oficialmente en 2001. Monolítica (instalas todo su núcleo o no instalas nada), pero tremendamente capaz, ya que con ella puedes crear aplicaciones de cualquier tipo: de consola, de escritorio, para la web, móviles... Casi cualquier cosa que puedas imaginar.
Eso sí, se trata de aplicaciones que se ejecutarán solamente sobre Windows.
En la actualidad va por su versión 4.7 (lanzada en Abril de 2017, con Visual Studio 2017), y existen miles de componentes de terceros para poder extenderla.
Con ella puedes utilizar también infinidad de lenguajes de programación: C#, Visual Basic .NET, F#, C++, Python... ¡Hasta Cobol!
La utilizan miles de empresas en todo el mundo. No va a cambiar mucho en los próximos años.

Es una nueva plataforma, escrita desde cero con varios objetivos en mente, siendo los principales:
- Más ligera y "componentizable": de modo que con nuestra aplicación se distribuya exclusivamente lo que necesitemos, no la plataforma completa.
- Multi-plataforma: las aplicaciones que creemos funcionarán en Windows, Linux y Mac, no solo en el sistema de Microsoft.
- Alto rendimiento: no es que .NET tradicional no tuviese rendimiento, pero es que .NET Core está pensada desde el principio con esto en mente. .NET Core tiene un desempeño más alto que la versión tradicional, lo cual es muy importante para entornos Cloud, en donde esto se traduce en mucho dinero al cabo del tiempo.
- Pensada para la nube: cuando .NET se diseñó a finales de los años 90 el concepto de nube ni siquiera existía. .NET Core nace en la era Cloud, por lo que está pensada desde el principio para encajar en entornos de plataforma como servicio y crear aplicaciones eficientes para su funcionamiento en la nube (sea de Microsoft o no).
En este artículo de nuestro tutor José María Aguilar puedes leer más sobre cuáles fueron los motivos de crear .NET Core y qué beneficios se obtienen.
Con .NET core, hoy por hoy, solo podemos crear aplicaciones de consola, aplicaciones Web (con ASP.NET Core y ASP.NET Core MVC), y aplicaciones universales de Windows para Windows 10 o posterior.
En cuanto a los lenguajes disponibles, podremos utilizar C#, F# y Visual basic .NET.
Hoy en día existen todavía bastantes menos componentes de terceros (bibliotecas y similares) para .NET Core que para .NET tradicional. Se está tratando de solucionar con .NET Standard y un shim para unificar bibliotecas que intenta conseguir que sea más fácil crear bibliotecas para ambas plataformas, pero todavía no están a la misma altura.
En el momento de escribir esto .NET Core va por su versión 2.0, aparecida en agosto de 2017. Se trata a estas alturas de una tecnología estable y dotada de funcionalidad, que nos permitirá crear aplicaciones de gran capacidad y multi-plataforma. Es decir, podemos crear una aplicación web con .NET Core que se ejecute bajo un servidor NGinx en Linux, aprovechando las ventajas que nos da esa plataforma, y acto seguido ponerla a andar en paralelo en un sistema con Windows Server 2016 e IIS en Windows, con una ganancia de rendimiento importante frente a una aplicación creada con ASP.NET MVC 5.
.NET Core 2.1 se espera para el primer trimestre de 2018. Se habla de que traerá de vuelta a los AppDomains, que se portarán más APIs y que, con suerte, se lanzará con .NET Standard 2.1 para acercarla cada vez más a las capacidades de la plataforma .NET completa.
Nota: este artículo de la propia Microsoft arroja un poco más de luz sobre la forma de versionar de .NET Core, del SDK de .NET Core y de .NET Standard y las relaciones entre ellos.
Xamarin

Xamarin nació como un proyecto Open Source hace muchos años llamado Mono, que trataba de llevar .NET a todas las plataformas en los tiempos en los que Microsoft se negaba a sacar .NET de Windows (hoy en día parece increíble, pero así era). Posteriormente su creador el mexicano Miguel De Icaza (creador también de GNome, el famoso escritorio para Linux) desarrolló lo que hoy en día se conoce como Xamarin, construyendo sobre Mono toda la tecnología para la creación de aplicaciones nativas para móviles en todas las plataformas (iOS, Android y Windows Mobile).
En la actualidad Xamarin se puede usar para crear aplicaciones en muchas otras plataformas incluyendo (y sobre todo) Mac, pero también Windows (mediante UWP), Apple Watch, Android Wear, Apple TV, etc.... En los próximos meses además se podrán crear aplicaciones de escritorio para Linux, proyecto en el que, por cierto, participa nuestro tutor Javier Suárez Ruiz.
Microsoft compró Xamarin a principios del año pasado. Lo ha hecho totalmente gratuito y lo ha incluido en su Visual Studio, tanto para Windows como para Mac. Esto ha disparado el uso de esta tecnología que se ha convertido en la tercera plataforma de desarrollo de Microsoft.
En muy poco tiempo Xamarin se ha postulado como la gran alternativa de desarrollo para casi todo excepto la web.
En Xamarin se debe programar con el lenguaje C#, y posee un ecosistema de componentes y extensiones de terceros que es excepcional.
Tecnologías relacionadas
Alrededor de .NET existen multitud de tecnologías relacionadas que dependen del tipo de aplicaciones que vayamos a crear, como por ejemplo:
- ASP.NET: la base para crear aplicaciones Web basadas en .NET, con múltiples capas por encima como Web Forms, MVC, Web API o Web Pages en el caso de .NET tradicional.
- Entity Framework: la tecnología de acceso a datos ORM (Object Relational Mapping) de Microsoft.
- WPF (Windows Presentation Foundation), para crear interfaces de usuario.
Dado que .NET Core permite crear aplicaciones web y para la UWP, y esta última solo sirve para Windows, podemos decir que lo que nos ofrece .NET Core por encima de la plataforma base es fundamentalmente Entity Framework Core (para acceso a datos, y con diferencias respecto a Entity Framework "tradicional"), y ASP.NET Core (para desarrollo web). ASP.NET Core ofrece una serie de funcionalidades adicionales por encima, como MVC, Razor Pages (una nueva característica que ha aparecido con .NET Core 2 para crear fácilmente páginas dinámicas y que ya veremos si cuaja o no) y SignalR que todavía no es más que una versión "alpha" y tardará bastante tiempo todavía en aparecer en Core de manera oficial.
Dicho esto, el siguiente diagrama comprara .NET y .NET Core en aquello que tienen en común, es decir, el acceso a datos con Entity Framework y el desarrollo de aplicaciones web:

Nota: En este gráfico he unido con flechas discontinuas ASP.NET Core y EF Core con el Full Framework tradicional porque se pueden utilizar también desde ahí, aunque hay que tener en cuenta que en ese caso las aplicaciones resultantes no serán multiplataforma, y no tendrán acceso a la misma funcionalidad que con las ediciones tradicionales.
Como vemos ambas se parecen mucho, pero en el caso de .NET Core SignalR todavía no está disponible (se espera aún para el año que viene, casi con toda seguridad con .NET Core 2.1 en el primer trimestre). Otras tecnologías más antiguas como Web Forms no están disponibles ni nunca lo van a estar, y las recién estrenadas "Razor Pages" tratan de sustituir a las "Web Pages" tradicionales que en cualquier caso nunca tuvieron demasiado tirón.
Para crear aplicaciones Web ASP.NET MVC 5 y ASP.NET Core MVC, a pesar de compartir el nombre y por supuesto muchos conceptos, son tecnologías diferentes para las cuales hay que aprender características y formas de trabajar muy diferentes, por lo que el cambio de una a otra no es directo.
En lo que respecta a Web API, la tecnología para crear servicios REST con .NET, en la plataforma tradicional era una biblioteca externa y en .NET Core viene incluido de serie con ASP.NET Core MVC. Además han cambiado algunas cosas, simplificando de hecho el desarrollo.
En resumen
En el ámbito de tecnologías de desarrollo de Microsoft existen básicamente 3 opciones:
- La plataforma .NET tradicional, con la que podemos crear todo tipo de aplicaciones. Estable, muy utilizada y con pocos cambios en el horizonte.
- La plataforma .NET Core: la tecnología de futuro de Microsoft. Ya en su versión 2 y estabilizada, poco a poco irá tomando cuota de mercado y será más y más utilizada, aunque de momento va por detrás de la anterior. Multiplataforma y utilizada sobre todo a desarrollo Web.
- Xamarin: la última adquisición pero con muchos años de historia detrás. Permite crear aplicaciones multi-plataforma sobre todo pensando en desarrollo para móviles (iOS, Android), pero también para Mac, Windows 10 y en breve para Linux. En muy poco tiempo ha crecido como la espuma.
Las tres usan como lenguaje común C#, comparten muchos conceptos, clases y técnicas, por lo que se pueden reutilizar en unas gran parte de los conocimientos que adquiramos en las otras.
Con .NET Standard Microsoft está tratando de unificarlo todo de cara al futuro: .NET framework (tradicional), .NET Core, Mono, Xamarin, UWP... de modo que al final tengamos un subconjunto común que nos permita intercambiar bibliotecas y funcionalidad entre todas las plataformas. Ese es el gran reto a medio plazo.
Si tienes interés en aprender alguna de estas plataformas te podemos ofrecer:
Además puede interesarte: