MAC Rationale vs Windows Rationale en el desarrollo

Publicado 19/3/2011 15:42 por Rafael Ontivero

Todavía estoy leyendo temas generales sobre el desarrollo en MAC, de hecho aún no he pasado de los manuales que describen las tecnologías y los diferentes bloques en que se divide el desarrollo en MAC.

No obstante me ha surgido una curiosa reflexión que quiero compartir con vosotros. Todavía no estoy muy seguro de que sea completamente cierta, porque todavía no he profundizado en los conceptos MAC y lo que he leído tiene más que ver con la publicidad del desarrollo en esta plataforma que otra cosa, pero creo que tiene muchos visos de ser real como la vida misma.

Y lo más curioso de todo es que tiene mucho que ver con el desarrollo Windows, y más cercanamente al de las tecnologías .NET. Cuanto más leo sobre Cocoa, QuickTime (que no sólo es un programa sino una tecnología), etc., más me parece estar leyendo sobre .NET, o más bien sobre la forma en la que se publicita .NET.

Se habla de grandes grupos de tecnologías orientadas a objetos, con grandes rendimientos y grandes facilidades ofrecidas a los desarrolladores. Calcado uno de otro. Ahora habrá que ver la pura realidad.

Del lado .NET ya lo tengo claro: mucho ruido y pocas nueces, al menos para desarrollo de sistemas. Quiero creer que del lado MAC no será igual, pero cualquiera sabe. Ya os iré diciendo.

***

Pero no, no es sobre eso sobre lo que os quería hablar. Veamos por un lado la arquitectura lógica expresada por los manuales de MAC, que creo es más real que la dicha por los de Windows.

Debajo del todo un ordenador de Apple hay un Kernel BSD que no es otra cosa que una variante de UNIX igual que es Linux. Y luego hay un sistema POSIX de toda la vida que de nuevo tiene que ver con el mundo UNIX (que viene a ser como una serie de servicios que simplifican el acceso al núcleo del sistema igual que una consola de comandos en Windows permite trabajar con ficheros sin tener que tocarlo).

Aunque Apple lo ha llamado Darwin, no deja de ser lo que es, y de hecho Apple publica todo el código fuente de ello. Al ser un estándar debe estar separado. Realmente está separado.

Encima de eso hay una serie de capas, Cocoa, Carbon, QuickTime. Más o menos. Pero lo que es cierto es que esos subsistemas están completamente separados del núcleo o más bien encima de él.

En Windows creo que no es así. En su momento, en las versiones NT originales sí que lo era (o al menos así se publicitaba). Recordemos la capa HAL que podía ser para un montón de procesadores y luego el sistema NT Executive nativo, que corría sobre dicha capa. Pero ahora, después de la unificación con la plataforma 9x en lo que fue Windows XP dudo mucho que siga siéndolo.

Porque ahora no hay soporte para ARM, ni para SuperH, ni para PPC. Sólo Intel x86 y dando gracias. Me juego un gallifante a que ahora está todo mezclado y revuelto (y de ahí los problemas de Microsoft para volver a añadir soporte para ARM). Porque si no fuera así no se entendería cómo puede funcionar el sistema de vídeo sobre Win32 accediendo al driver que está en el núcleo (sí, ya sé, anillos, gateways y todo eso, pero no voy por ahí)…

Bueno, quizás en esto me equivoque, pero si alguien me explicara cómo el hecho de reproducir un vídeo dentro de un navegador pueda generar una BSOD estando los sistemas separados, que me lo diga. Porque me ha pasado. Y no una, sino varias veces. Putas ATI.

De todos modos luego veremos alguna razón más de ello y quizás uno de los puntos más fuertes de por qué Microsoft está un poco contra la espada y la pared.

***

Apple ya lo ha hecho al menos dos veces y lo va a hacer una más. En x64 no va a haber Carbon, que es como se le llama al subsistema que soporta programar en C y C++ de forma nativa. En x64 sólo vamos a tener Cocoa (Objetive-C y Objetive-C++) y POSIX (que yo sepa). En su momento, con el cambio de PPC a x86 repitió jugada, haciendo borrón y cuenta nueva y forzando a muchas empresas de software a reescribir sus programas. Como cosa curiosa os diré que Apple encargó a Adobe la creación de su iPhoto, iVideo y demás programas de esa plataforma y Adobe los mandó a freír espárragos porque estaban como locos rehaciendo sus propios programas. Creo que hubo otro cambio rompedor más en los MAC pero ahora no recuerdo qué.

Bueno, el meollo del asunto está en que a veces es conveniente hacer borrón y cuenta nueva. Hasta donde sé, el API de MAC OS X y el de iOS es un API moderno, orientado a objetos y bastante potente. Ya os diré si realmente es cierto cuando me enfangue las manos con ello.

***

Ahora volvamos a Windows. Aquellos que hayan leído sobre el tema, sabrán lo que son los subsistemas. Para los que no, una pequeña introducción.

Win32 es un subsistema. POSIX es un subsistema (o lo era hasta que lo quitaron). De hecho, en las primeras versiones de NT había hasta un subsistema OS/2.

Un subsistema es una API completa que sirve para que las aplicaciones escritas para tal subsistema se ejecuten en él, sean independientes del núcleo y no puedan afectarlo en ninguna manera. Ved la siguiente imagen de la Wikipedia y fijaros arriba a la derecha.

 http://en.wikipedia.org/wiki/File:Windows_2000_architecture.svg

Básicamente esa debería ser la arquitectura de Windows. Fijaros también en lo que hemos hablado antes sobre el HAL y el Executive.

¿Realmente Windows es así? Creo que no. Teóricamente si cogéis un programa 100% compatible POSIX y lo ejecutáis en Windows 2000, debería funcionar. ¿Lo hace? Pues no. En su momento lo probé y no funcionaba. Tampoco lo hacía uno de OS/2 cuando ese subsistema estaba, todavía, presente. No es que no funcionaran bien o hicieran alguna cosa rara, es que la mayoría de veces simplemente no cargaban.

¿Ha visto alguno de vosotros un Windows NT ejecutado en un ARM o en un SuperH? Yo no y no creo que funcionen. ¿Vais viendo ya por dónde voy?

Con esto no quiero decir que nunca hayan llegado a funcionar, lo que quiero decir es que yo al menos no lo conseguí en su momento. En un MAC moderno podemos ejecutar prácticamente cualquier comando típico UNIX, desde un “ls” hasta un “ps” pasando por un “dd” o lo que queramos. Aparte de los que la propia Apple ha añadido, que hay unos cuantos.

De nuevo no me malinterpretéis, en ningún momento estoy diciendo que un MAC sea mejor que un Windows por eso. Simplemente estoy diciendo que en un MAC sí que están separadas y presentes las distintas piezas, o al menos así lo creo. De nuevo el tiempo me lo dirá, y yo a vosotros.

***

Y ahora entramos de lleno en .NET. ¿Por qué .NET no es un subsistema y sin embargo está construido sobre Win32, que no es precisamente un API limpia y ordenadita sino más bien todo lo contrario? ¿Por qué no aprovecha Microsoft la arquitectura de los subsistemas para hacer a .NET miembro de derecho propio dentro de Windows y no un mero envoltorio que cada vez se va pareciendo más a lo que envuelve, sobre todo en el tema de la guarrería?

Si ya .NET es algo grande en el aspecto del rendimiento y funcionalidad (comparado con su contrapartida Java y a veces con el propio Win32), ¿qué rendimiento no tendría si fuera un subsistema independiente?

¿O es que toda la estructura arquitectónica de Windows es una mentira como un castillo y no puede haber otros subsistemas cooperando sobre el ejecutivo?

Me gustaría que alguien me aclarara todo esto, porque sinceramente no lo entiendo. Yo tengo mi teoría, que no voy a exponer aquí no sea que se me acuse de lo que creo no soy, y menos ahora que tengo mi calentón de fanboy…

 

Comparte este post:

Comentarios

# re: MAC Rationale vs Windows Rationale en el desarrollo

Monday, June 13, 2011 8:13 AM by oVERA

HOLA. PRIMERO Q NADA TUS COMENTARIOS Y CRITAS SON MUY BUENOS.

.NET QUE YO SEPA NO TRABAJA BAJO WIN32

CMO LO HACIA VB6 ES ALGO INDEPENDIENTE

DE ECHO YO LO VEO CMO LA PLATAFORMA JAVA NO SE QUE TAN CIERTO. Y DE ECHO HAN ECHO QUE .NET FUNCIONE EN LINUX Y SI TIENES TU PROYECTOS 100 % .NET PUEDES COMPÌLARLOS Y CORRERLOS CON EN MONO QUE ES UN PROYECTO QUE SE ENCARGA DE EJECUTAR LA PLATAFORMA DE .NET EN LINUX

en.wikipedia.org/.../Mono_(software)

LEE SOBRE ESTO NO SI YA LO AYAS LEIDO.

# C++/CX (I). Windows 8 y el nuevo subsistema WinRT

Friday, November 4, 2011 7:18 PM by .NET o no .NET, esa es la cuestión

Observad con detalle la imagen de arriba. Fijaos en que está dividida en dos grandes bloques.