{"id":739,"date":"2013-06-10T04:00:58","date_gmt":"2013-06-10T10:00:58","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=739"},"modified":"2013-06-10T04:00:58","modified_gmt":"2013-06-10T10:00:58","slug":"%c2%bfes-c-y-net-multiplataforma","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=739","title":{"rendered":"\u00bfEs C# y .NET multiplataforma?"},"content":{"rendered":"<p>Cuando escuchamos multiplataforma lo primero naturalmente viene a la mente es Java, Java fue concebido para ser multiplataforma de modo el mismo c\u00f3digo, incluso el c\u00f3digo binario ya compilado funcione exactamente igual en cualquier plataforma y sistema operativo.<\/p>\n<p>C# es muy similar estructuralmente a Java, incluso Microsoft lo vende como una soluci\u00f3n multiplataforma, sin embargo hay que analizar lo que significa multiplataforma para Microsoft.<\/p>\n<p><strong>Descifrando el significado de multiplataforma seg\u00fan Microsoft<\/strong> <\/p>\n<p>En el mundo de Microsoft el \u00fanico sistema operativo que existe es Windows y antes de Windows MSDOS, desde el MSDOS un disco duro formateado con FAT escrib\u00eda 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\u00f3n no dejaba espacio para ning\u00fan sistema operativo diferente a alguno de Microsoft.<\/p>\n<p>Los que vivieron la migraci\u00f3n 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\u00fa, el men\u00fa permite seleccionar \u201cSISTEMAS OPERATIVOS\u201d y lo pongo entre \u201ccomillas\u201d porque los \u00fanicos seleccionables son los de Microsoft, Si luego instalabas Windows 98, este te permit\u00eda arrancar Windows 95 siempre  y cuando lo tuvieras instalado en la misma m\u00e1quina pero en otra carpeta y as\u00ed hasta nuestros d\u00edas.  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.<\/p>\n<p>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<\/p>\n<p>La existencia de .NET en GNU\/Linux y MacOS, Android y iOS no son parte de la \u201cmultiplataforma de .NET\u201d son un Port \u201cportaci\u00f3n\u201d 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<\/p>\n<p>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\u00eda funcionar en cualquier Windows. Bueno, no es as\u00ed.<\/p>\n<p>Para los que programaron en Visual Basic y Visual C++ hasta la versi\u00f3n 6 saben que un programa compilado con una versi\u00f3n de Visual Studio 6 en Windows XP dif\u00edcilmente va a correr en Windows 95 o 98 a pesar de ser un EXE com\u00fan y corriente PE y menos si estos tienen una instalaci\u00f3n de librer\u00edas de Visual Studio 5 o anterior. Los programas PE ten\u00edan que acompa\u00f1arse con una librer\u00eda correspondiente ya fuera para visual basic o Visual C++ para que la aplicaci\u00f3n funcionara. Visual Studio normalmente solucionaba esto creando paquetes de instalaci\u00f3n.  Si alguna vez hiciste un sencillo programa hola mundo o solo desplegar una simple ventana sabr\u00e1s que al hacer el paquete de instalaci\u00f3n 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.<\/p>\n<p>La log\u00edstica de mantener DLL y versiones de DLL entre Windows y que se estos problemas fueran invisibles para el usuario llego a punto insostenible. As\u00ed que Microsoft decidi\u00f3 que .NET deb\u00eda ser multiplataforma como JAVA, pero en el mundo de Microsoft las \u00fanicas plataformas que existen son diferentes versiones de Windows. Por lo que la idea de multiplataforma no es m\u00e1s que un programa .NET que corre igual en Windows XP como en Windows 8 sin requerir de librer\u00edas de sistemas, las \u00fanicas librer\u00edas que debe necesitar son las que el mismo programa requiere como conexi\u00f3n a bases de datos, pero no son de sistema.<\/p>\n<p>.NET es una idea grande, hace cosas que Java si hace, pero no tan f\u00e1cilmente. Miguel de Icaza se dio cuenta de esto y aposto por migrar esta idea a sitios que seg\u00fan 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. <\/p>\n<p>En resumen .NET no es multiplataforma si tomamos en cuenta que existen diferentes sistemas operativos ah\u00ed a fuera. Java si es 100% multiplataforma pero .NET no<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando escuchamos multiplataforma lo primero naturalmente viene a la mente es Java, Java fue concebido para ser multiplataforma de modo el mismo c\u00f3digo, incluso el c\u00f3digo 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\u00f3n multiplataforma, sin embargo&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,3],"tags":[],"class_list":["post-739","post","type-post","status-publish","format-standard","hentry","category-en-la-opinion-de","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=739"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/739\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}