Actualización Enero 2016: En Enero de 2016 Microsoft actualizó el versionamiento de la plataforma a una cosa mucho más razonable que la situación que se intentaba aclarar aquí. No obstante todo esto sigue siendo relevante y el artículo sigue siendo válido (excepto los nombres de las versiones) para entender la situación, así que te recomendamos leerlo. El nuevo aclarando la nueva terminología lo tienes aquí.
Aunque en general siempre me han gustado las tecnologías de Microsoft, lo que menos me gusta de ellos -con diferencia- es lo sumamente malos que son en comunicación, al menos en lo que respecta a los programadores. Y es que, parafraseando el mítico libro del también mítico Alan Cooper, los locos están gobernando el manicomio: permiten a los equipos de desarrollo que decidan ciertas cosas, y luego pasa lo que pasa... Y lo peor quizá sea la manera que han tenido siempre de versionar la plataforma .NET, como ya he dicho en otras ocasiones.
En este caso me voy a centrar en la famosa nueva versión (¿o será más de una?, ahora lo veremos) de ASP.NET y de la propia plataforma .NET, lo que se ha dado en llamar ASP.NET vNext.
NOTA: Este es un artículo largo, pero creo que merece la pena leerlo con detenimiento para entender bien los cambios que están por venir, así como el galimatías en el que se ha convertido seguirle la pista a la plataforma .NET. Al final he incluido un gráfico y también un pequeño texto de resumen para impacientes, pero te recomiendo no obstante que trates de leerlo entero.
En primer lugar, el equipo de desarrollo de ASP.NET ha utilizado internamente desde hace muchos años el nombre clave "vNext" para referirse a las novedades que estaban preparando para la próxima versión de la plataforma. Este era un nombre muy apropiado porque, si tenías la suerte de estar en su grupo de "Insiders" (yo llevo mucho años en él), las podías probar con bastante antelación aunque rompieran, y sabías qué cosas nuevas iban a incorporarse a la plataforma en el futuro. Las nuevas versiones de ASP.NET solían coincidir con versiones nuevas de Visual Studio o de sus Service Pack o Updates, con una cadencia de aparición de entre uno y dos años. Perfecto para poder asentar lo anterior y tener una cierta predictibilidad, pero malo para ir incorporando rápidamente cosas nuevas que demandara el mercado.
Esa cadencia para liberar versiones que tan cómoda resultaba, no casaba bien con lo que hacía la competencia, que en su mayor parte son productos Open Source. Así que hace un tiempo el equipo de herramientas de desarrollo de Microsoft se embarcó en una cruzada gigantesca para convertir en Open Source la mayor parte de la plataforma (lo cual es estupendo), pero con todas sus consecuencias... Entre ellas lanzar nuevas versiones mucho más rápido y además desconectadas de Visual Studio (lo que ellos llaman Out of Band). El primer producto importante que se hizo Open Source y empezó con esta dinámica fue ASP.NET MVC en 2009, aunque se trataba de una licencia MS-PL (un open source "descafeinado") y no admitía colaboraciones externas. En marzo de 2012 ya se publicó con licencia Apache. El anuncio de que Entity Framework se hacía Open source fue algo más tarde, en julio de 2012, aunque lo hicieron desde un principio de forma mejor y más abierta.
Poco a poco han ido incorporando todo lo demás, y han empezado a "darlo todo" a partir de su anuncio de noviembre de 2014.
Todo esto está muy bien, pero el problema es que están causando una confusión enorme entre los programadores, debido sobre todo a la forma de versionar. Hasta muchos de los "insiders" tienen un "cacao" terrible y se llevan a confusión con esto.
Se anunció públicamente que se estaba trabajando en la nueva versión "revolucionaria" de .NET y de ASP.NET hace ya bastante más de un año. Se ve que no conocían el famoso efecto Osborne (nada que ver con Bertín), porque ese anuncio lo que provocó es que mucha gente dejara la adopción de la tecnología hasta que la nueva versión estuviera disponible. Pero es que para que esto ocurriese faltaban ¡casi dos años! desde que lo anunciaron, como veremos enseguida. Así que mucha gente que tenía pensado aprender MVC para su próximo proyecto, lo dejó para más adelante y acabó aprendiendo Node.js u otra tecnología. Y todo por un anuncio a destiempo y mal comunicado :-(
Vamos a darle un repaso a todo esto para ver si aclaramos el lío.
1.- Versiones de la plataforma .NET
En primer lugar comenzaremos por la base: el framework. Hasta ahora teníamos una única plataforma, el .NET Framework, que disponía de varias versiones que se fueron liberando desde la 1.0 en febrero de 2002 hasta la última, .NET 4.5, con Visual Studio 2013, en octubre de 2013.
Bien es cierto que existían algunas variantes reducidas de la plataforma, como el .NET Framework Client Profile, la .NET Compact Framework para aplicaciones móviles, o el subconjunto de .NET que se usaba en Silverlight y que realmente fue la primera versión de .NET oficial que era multiplataforma. No obstante todas estas variantes no eran sino subconjuntos más o menos "adaptados" de la misma plataforma monolítica.
Para terminar de complicar las cosas, por debajo de la plataforma .NET está el CLR (Common Language Runtime) que es el componente de la plataforma encargado de ejecutar los programas .NET y que provee servicios como la seguridad de tipos, la gestión de la memoria, gestión de hilos, gestión de excepciones, etc... Este componente de .NET lleva su propio versionamiento independiente, y de hecho actualmente va por la versión 4. Podemos resumir la relación de las versiones de .NET con las versiones del CLR de la siguiente manera:
- CLR 1.0 --- .NET 1.0
- CLR 1.1 --- .NET 1.1
- CLR 2.0 --- .NET 2.0, 3.0 y 3.5 (sí, si ejecutas .NET 3.5 por debajo el CLR es el 2.0)
- CLR 4 --- .NET 4 y 4.5 (sí, le quitaron la revisión y ya no es "punto cero" ni "punto nada").
En este enlace puedes encontrar muchos más detalles.
Con ASP.NET vNext se hizo saber que iba a haber una nueva variante de la plataforma: .NET Core que será una versión reducida de ésta, muy ligera, rápida y capaz de ejecutarse en todas las plataformas (Windows, Mac y Linux). Hace unos días os contábamos aquí mismo las diferencias que existían entre la versión completa del Framework y .NET Core.
Bien, resulta que la nueva versión completa de .NET será .NET Full Framework 4.6 o Full CLR 4.6. Y la versión inicial de .NET Core se llamará .NET Core 5. Pero paradójicamente como Core va a ser un subconjunto de la Full CLR, en realidad la "versión" 5 es más pequeña que la 4.6 :-O
.Net 5 < .Net 4.6 -- WTF?
¿Es o no es demencial? Lo peor es que cuando nos preguntaron a los "insiders" nuestra opinión hace ya muchos meses, creo que hubo un consenso bastante amplio en que esto era un error enorme. Pero no nos hicieron caso.
Por cierto, si lees por ahí sobre la versión 4.5.3 de .NET, están hablando de .NET 4.6. Cuando anunciaron la versión Core inicialmente pensaban dejar la versión de .NET "tradicional" como 4.5.3, pero poco después decidieron que los cambios eran lo suficientemente importantes como para subirle un poco más la versión, y quedó 4.6.
2.- ASP.NET
La plataforma de Microsoft para crear aplicaciones Web está formada a su vez por multitud de tecnologías, todas con el nombre ASP.NET delante y muchos apellidos:
- Web Forms
- MVC
- Web API
- SignalR
- WebPages
En la próxima versión vamos a tener realmente dos versiones diferentes de ASP.NET:
- ASP.NET 4.6: alineada con la versión del CLR, esta versión seguirá la línea tradicional de lo que ha habido hasta ahora. Es decir, si sabes ASP.NET MVC 5, Web API o ASP.NET Web Forms podrás seguir usando esta versión como siempre. Cuando se libere incluirá algunas mejoras para todas las tecnologías de la lista anterior, pero puedes tener la tranquilidad de que no va a romper nada.
- ASP.NET 5: esto es realmente lo que se ha llamado ASP.NET vNext y es de lo que se habla cuando se usa esta denominación tan funesta (¿cómo le llamarán a la siguiente versión? ¿vNext+?). Para simplificar diremos que incluye todas las tecnologías anteriores excepto Web Forms, que se quedan tan solo para la versión completa del framework (la 4.6) y por lo tanto no serán multiplataforma.
Así a primera vista parece que usar ASP.NET 5 es estupendo pues funcionará tanto en .NET 4.6 como en Core 5 ¿no? El problema es que se trata de una tecnología completamente nueva, escrita desde cero para que sea ligera, multiplataforma, etc... O sea, en consonancia con .NET Core. Y las versiones que se utilizan serán completamente diferentes e incompatibles con lo actual (y con las de ASP.NET 4.6).
Atención a los números de versión: si usas ASP.NET 4.6 estrás trabajando realmente con ASP.NET MVC 5.x (actualmente en su versión 5.2.3), pero si usas ASP.NET 5 en realidad estarás programando para ASP.NET MVC 6!!
Una confusión enorme. Es más, por ejemplo, con ASP.NET 5 estarás usando SignalR 3.0, la próxima versión que saldrá con .NET 5, pero con ASP.NET 4.6 estarás usando SignalR 2.
Curso de ASP.NET Core MVC: Tu mejor opción para aprender online y en español.
3.- Entity Framework
Aunque de esto no se está hablando tanto, también tiene un buen lío montado.
Resulta que el ORM de Microsoft lleva ya casi una década en desarrollo (actualmente está en su versión 6) y en este tiempo se ha convertido en un bicho bastante grande y en cierto modo pesado. Eso no casaba bien con la nueva filosofía de ligereza de .NET Core, así que la nueva versión que aparecerá será Entity Framework 7.
Esta versión es una versión completamente nueva, escrita casi desde cero y completamente separada de la actual versión 6. Por ello, cuando salga tendrá en realidad menos características que la actual EF 6, pero a cambio será ligera, rápida, multiplataforma y podrá además acceder a bases de datos NoSQL o a otras como SqlLite o PostgreSQL.
EF7 funcionará en .NET 4.6 y en .NET 5. Pero EF6 que evolucionará por su cuenta, no funcionará en .NET 5.
¿Quiere decir esto que EF7 va a sustituir a EF6?. En absoluto. Son dos versiones diferentes y (casi) dos productos diferentes que se mantendrán en paralelo. De hecho el propio equipo de Entity Framework comentó en su blog públicamente lo siguiente:
Es decir, que cuando salga "vNext" y con ello EF7, no quiere decir que Entity Framework 7 sea la versión recomendada. Quiere decir que será la versión que deberás utilizar con .NET Core 5, pero todavía estará incompleta y le faltarán muchas funcionalidades. De hecho en .NET Full será recomendable utilizar EF6 si puedes, y ambas versiones irán paralelas.
4.- Resumen de versiones
Para resumir brevemente todo lo que hemos visto, he hecho este gráfico que creo que ilustra más o menos claramente el lío de versiones que tenemos, tanto de .NET como de ASP.NET, MVC y Entity Framework:
Pulsa para aumentar
No conviene olvidar que aunque los números de versión son mayores tanto para Core Framework, como para ASP.NET 5 y Entity Framework 7, en realidad son subconjuntos de las tecnologías correspondientes en Full Framework 4.6, que tienen números de versión menores.
Nota: Aquí conviene aclarar además otra cuestión importante: En realidad aunque en el gráfico anterior se han puesto por separado, en ASP.NET 5, Web API ya no es una tecnología separada de MVC y en realidad forma parte de ésta. Es decir, no hay como tal un "ASP.NET Web API 6" como se ve en el gráfico, sino que ASP.NET MVC incluye a Web API también y está todo mejor integrado. Lo he puesto por separado igualmente en el diagrama para que nadie se lleve a engaño y pueda pensar que Web API desaparece.
5.- Disponibilidad
Bien, ahora que más o menos está aclarado el lío de las versiones, los números de versión y qué incluye cada uno, vamos a ver cuándo estará todo esto disponible:
- .NET Full Framework 4.6: estará disponible junto con la versión definitiva de Visual Studio 2015, el día 20 de Julio de 2015. Ojo, saldrá unos días antes que la versión definitiva de Windows 10 (que sale el día 29 de Julio). En esos días no podrás instalarla en versiones preliminares de Windows 10, así que solo en Windows 8.1.
- Core Framework 5 + ASP.NET 5: (estas fechas las han indicado los propios miembros del equipo en un hangout hace unos días):
- Beta 6: A finales de Julio, poco después de Visual Studio 2015
- Beta 7: A finales de Agosto.
- Beta 8: A finales de Septiembre.
- Release Candidate: hacia finales del otoño de 2015 (o sea hacia Diciembre de 2015), pero es difícil estimarlo con tanto tiempo de antelación. Esta versión no será todavía definitiva pero se parecerá bastante y de hecho vendrá con una licencia "Go Live" para poder poner en producción aplicaciones con soporte por parte de Microsoft (si es que eres tan valiente como para hacerlo).
- Versión definitiva: No se sabe. Supongo yo (pero es una cábala) que para el primer trimestre de 2016.
- Entity Framework 7: no hay fechas definitivas, pero de momento está en un estado muy prematuro y sí que han manifestado que saldrá seguramente junto a Core 5, es decir, supongo que durante el primer trimestre de 2016 también, aunque con características recortadas todavía.
Puedes suscribirte a los anuncios de versiones de ASP.NET y sus novedades en GitHub para seguir los cambios.
En resumen
Como vemos el lanzamiento de ASP.NET "vNext" y todo lo relacionado con ello se ha hecho de manera (en mi opinión)demasiado anticipada que hizo que muchos programadores entraran en pánico y decidieran esperar para aprender o para crear nuevas aplicaciones con ASP.NET. Sin embargo todavía es muy pronto.
Los de Microsoft han creado un lío de versiones bastante importante que he intentado desentrañar en este post. Tenemos versiones diferentes de la plataforma, versiones diferentes de ASP.NET, versiones diferentes de las sub-tecnologías dentro de .NET y versiones diferentes de Entity Framework. Los números más grandes no quieren decir que tengan más características, sino que en realidad son versiones reducidas de los números de versión más pequeños, entre otras cosas porque se han escrito de nuevo desde cero, son más ligeros y son multiplataforma.
En mi opinión deberían haberle dado un nombre diferente a las dos ramas de la tecnología, diferenciándolas más claramente, y no un número de versión distinto. Habría simplificado todo mucho su comprensión.
Las fechas de lanzamiento de unas versiones y otras varían también bastante, estando disponible la Full Framework 4.6 (la que se puede considerar más tradicional) en unos pocos días, y el resto se esperan todavía definitivas para principios del año que viene.
¡Espero que te haya ayudado a aclarar todo este lio!
Nota: Mis agradecimientos a José María Aguilar y Unai Zorrilla por revisar este artículo antes de su publicación.