¿Es C# y .NET multiplataforma?

Cuando escuchamos multiplataforma lo primero naturalmente viene a la mente es Java, Java fue concebido para ser multiplataforma de modo el mismo código, incluso el código binario ya compilado funcione exactamente igual en cualquier plataforma y sistema operativo.

C# es muy similar estructuralmente a Java, incluso Microsoft lo vende como una solución multiplataforma, sin embargo hay que analizar lo que significa multiplataforma para Microsoft.

Descifrando el significado de multiplataforma según Microsoft

En el mundo de Microsoft el único sistema operativo que existe es Windows y antes de Windows MSDOS, desde el MSDOS un disco duro formateado con FAT escribía en los primeros 512 bytes del disco duro el MBR AKA Master Boot Record , el cual es el cargador del MSDOS y de las primeras versiones de Windows en pseudo 32 bits, Windows 95,98 y ME y esta acción no dejaba espacio para ningún sistema operativo diferente a alguno de Microsoft.

Los que vivieron la migración de Windows 3.1 y 3.11 a Windows 95 saben que al instalar Windows 95 y al presionar F8 al momento de que inicia Windows sale un menú, el menú permite seleccionar “SISTEMAS OPERATIVOS” y lo pongo entre “comillas” porque los únicos seleccionables son los de Microsoft, Si luego instalabas Windows 98, este te permitía arrancar Windows 95 siempre y cuando lo tuvieras instalado en la misma máquina pero en otra carpeta y así hasta nuestros días. Si se puede cargar Linux con Windows NT Loader pero hay que hacerle un Hack, no lo hace de forma nativa ni de buena manera y por lo tanto al no ser oficial de Microsoft entonces no vale.

Dicho lo anterior podemos claramente ver el significado de multiplataforma, para Microsoft un programa multiplataforma es aquel que corre indistintamente en Windows 95,XP, Vista o en 7 u 8. Todos Windows

La existencia de .NET en GNU/Linux y MacOS, Android y iOS no son parte de la “multiplataforma de .NET” son un Port “portación” hecha por Miguel de Icaza con Mono. Pero Mono no es de Microsoft por lo que oficialmente no se puede tomar como .NET sino COMO UN PUNTO.NET

Volviendo con Microsoft, entendemos que multiplataforma es solo un termino para diferentes versiones de sistemas Windows, pero entonces por que necesita la existencia de .NET se supone que un ejecutable PE, un simple EXE basado en el API Win32 o ahora Win64 debería funcionar en cualquier Windows. Bueno, no es así.

Para los que programaron en Visual Basic y Visual C++ hasta la versión 6 saben que un programa compilado con una versión de Visual Studio 6 en Windows XP difícilmente va a correr en Windows 95 o 98 a pesar de ser un EXE común y corriente PE y menos si estos tienen una instalación de librerías de Visual Studio 5 o anterior. Los programas PE tenían que acompañarse con una librería correspondiente ya fuera para visual basic o Visual C++ para que la aplicación funcionara. Visual Studio normalmente solucionaba esto creando paquetes de instalación. Si alguna vez hiciste un sencillo programa hola mundo o solo desplegar una simple ventana sabrás que al hacer el paquete de instalación este no solo era el EXE, en el paquete iban al menos 10 DLL que se instalaban junto a tu programa por sencillo que este fuera.

La logística de mantener DLL y versiones de DLL entre Windows y que se estos problemas fueran invisibles para el usuario llego a punto insostenible. Así que Microsoft decidió que .NET debía ser multiplataforma como JAVA, pero en el mundo de Microsoft las únicas plataformas que existen son diferentes versiones de Windows. Por lo que la idea de multiplataforma no es más que un programa .NET que corre igual en Windows XP como en Windows 8 sin requerir de librerías de sistemas, las únicas librerías que debe necesitar son las que el mismo programa requiere como conexión a bases de datos, pero no son de sistema.

.NET es una idea grande, hace cosas que Java si hace, pero no tan fácilmente. Miguel de Icaza se dio cuenta de esto y aposto por migrar esta idea a sitios que según Microsoft no existe. Pero como al final Mono es un port y no es oficial siempre estar un poco atrasado comparado a las versiones de Windows.

En resumen .NET no es multiplataforma si tomamos en cuenta que existen diferentes sistemas operativos ahí a fuera. Java si es 100% multiplataforma pero .NET no

3 Comments

Add a Comment

Comment spam protected by SpamBam