lunes, abril 30, 2007

Detalles sobre la instalación de Windows Vista

Un usuario se preguntaba por qué la fecha de creación de la carpeta "Windows" de su sistema Windows Vista era siempre 2 de noviembre de 2006, si instaló el sistema operativo mucho después. Eso se debe al nuevo sistema de instalación de Windows Vista. Es radicalmente distinto al de versiones anteriores de Windows.

Windows Vista es un sistema muy diferente de Windows XP, ya desde su instalación. La arquitectura interna de la instalación de Windows XP se resume básicamente en la copia de binarios (EXEs, DLLs, etc.), la creación de claves de Registro, servicios, etc. y la configuración del hardware, configuración de red, regional, etc. Esta aproximación tiene varios inconvenientes, entre otros:

  • La creación de SKUs tales como Home Edition, Professional Edition, Tablet PC, Media Center Edition supone un elevado coste de ingeniería para Microsoft.
  • Los OEM que ensamblan PCs pueden juntarse con miles de imágenes personalizadas diferentes de XP.
  • La instalación del sistema operativo requiere más tiempo.
  • Se tarda más en generar actualizaciones para el sistema. Esto es importante en el caso de actualizaciones de seguridad, por ejemplo.

Windows Vista introduce un nuevo concepto de instalación basado en imágenes. Asimismo, el sistema operativo ahora está formado por componentes, en lugar de por archivos binarios, claves de Registro, etc. Se tratará posteriormente el concepto de componente en Windows Vista.

El siguiente gráfico muestra el proceso de instalación de Windows Vista:

Esquema simplificado de la instalación de Windows Vista

Sí, ha leído bien, el proceso de instalación de Windows Vista comienza en Microsoft. En un laboratorio (Windows Build Lab) se genera una imagen WIM del sistema operativo. Esta imagen se ha visto sometida a un proceso de generalización, que consiste en eliminar toda referencia al hardware de la máquina donde haya sido instalada. Se genera, pues, una imagen neutra del sistema operativo. Esa imagen WIM se graba en el DVD de Windows Vista.

Cuando el usuario introduce el DVD de Windows Vista y comienza la instalación, en un primer momento se le pide que elija una imagen del DVD (si hubiera varias para elegir) así como un idioma. Después se particiona el disco y comienza la instalación propiamente dicha.

Windows Vista está formado por componentes

Vista está internamente organizado en componentes, cada uno de los cuales contiene ejecutables, DLLs y manifiestos XML con las claves de Registro relacionadas, COM, etc. Puede ver una lista de estos manifiestos en su directorio %SystemRoot%\winsxs\Manifests. Estos componentes mantienen dependencias entre sí, por lo que la instalación/desinstalación de uno puede implicar necesariamente la instalación/desinstalación de otro.

Fase de volcado de la imagen inicial

La primera fase de la instalación de Vista consiste en volcar la imagen WIM de instalación al disco duro del usuario. A partir de ella, se expande una parte inicial denominada Windows Foundation. Windows Foundation es el conjunto de componentes que Microsoft ha determinado como básicos para poder hacer funcionar el sistema operativo, independientemente de la versión del mismo. Esta fase no suele tomar demasiado tiempo, especialmente en sistemas modernos con discos duros rápidos.

Fase de especialización

Posteriormente, con el sistema base ya instalado y operativo, se procede a especializar la instalación según el hardware del sistema del usuario, por lo que esta fase comprende el reconocimiento de dispositivos, instalación de controladores, etc. Otra parte de la especialización consiste en generar la versión de Vista (Home Basic, Ultimate, Enterprise, etc.) a partir de la clave de producto (PID) proporcionada, así como instalar el paquete de idioma seleccionado (Windows Vista es un sistema neutro en lo que a idioma se refiere). Esta fase se realiza cuando se resalta el texto Instalando características.

¿Cómo se construye una versión concreta de Vista, digamos Home Premium?

Recuerde que partimos de un sistema operativo básico ya instalado. Para generar una versión concreta de Windows Vista, un fichero XML decide qué SDPs (SKU Dependent Package) incluir. Cada SDP incluye componentes tales como Media Center, Tablet PC, etc. Estos paquetes los instala la utilidad Package Manager (Pkgmgr.exe). Puede obtener más información sobre la misma si pincha aquí.

Por ejemplo, el conjunto formado por Windows Foundation (componentes básicos del sistema operativo), ciertos SDPs y un paquete de idioma DE-DE formaría un sistema Windows Vista Home Premium en alemán. Observe que todo está muy granularizado.

Finalmente, tras el reinicio del sistema operativo y su primer arranque, se configuran los aspectos finales (nombre de usuario, fondo de pantalla, etc.) si no han sido preconfigurados mediante un fichero XML, y se le muestra el escritorio al usuario.

Como ve, el cambio de arquitectura de Windows Vista es bastante profundo. Ya desde la salida de Windows XP se empezó a trabajar en todo esto, y los beneficios son bastante importantes: Se reduce el número de imágenes del sistema operativo, se facilita la creación de nuevas versiones de Windows Vista (SKUs) según las demandas del mercado, la instalación se realiza en menos tiempo y las actualizaciones por parte de Microsoft requieren de un menor tiempo de pruebas: Al separar la parte neutra de la parte dependiente del idioma, una actualización de seguridad, que en un altísimo porcentaje afecta sólo a un componente neutro del sistema operativo, se genera con más rapidez y no es necesario probarla exhaustivamente en todas las versiones localizadas de Windows Vista.

En un posterior artículo espero profundizar sobre los componentes de Windows Vista. A la hora de solucionar un problema con Windows Vista es muy probable que acabe revisando reportes generados por el servicio de componentes (CBS), así que pienso que le resultará de mucha utilidad saber cómo funciona.

viernes, abril 13, 2007

Sobre el nuevo motor de copias de archivos y carpetas de Windows Vista

Recientemente he recibido esta consulta de un usuario:

¿Es posible hacer que Windows Vista no calcule el tiempo restante estimado cada vez que hace una copia de archivos? Esto hace que las copias sean más lentas.

Para poder responder esta cuestión, es necesario observar cómo funciona internamente el sistema de copias de archivos y carpetas de Windows Vista:

Cuando el usuario copia, mueve o elimina archivos desde Explorador de Windows, se sigue un largo proceso que tiene su origen en la función SHFileOperation. Esta función enlaza con el nuevo motor de operaciones de archivos y carpetas de Windows Vista. Es importante hacer notar que este motor es totalmente nuevo. Esto es debido a que ahora es necesario tener en cuenta elevaciones de privilegios mediante UAC, así como añadir la implementación de una nueva interfaz para controlar mejor las colisiones de archivos y carpetas (si dos elementos tienen el mismo nombre, ofrecer las opciones de conservar ambos, sobrescribirlos, etc.).

El motor de copias de Windows Vista consta principalmente de la siguientes entidades:

  • El motor de copias propiamente dicho, que se encarga de "preparar" y "realizar" nodos y árboles de elementos (ficheros o carpetas) aplicando, para ciertas operaciones, la recursión.

  • La barra de progreso que informa al usuario de la fase en la que se encuentra la operación.

  • Un reloj (timer) que se encarga entre otras cosas de sincronizar el estado de la operación para así calcular el tiempo restante, la velocidad, etc.

El primer proceso que tiene lugar es lo que se denomina "preflight". En esta fase se enumeran los elementos que intervendrán en la operación y se muestra la barra de progreso con el texto "Descubriendo x elementos (y MB)". Esta operación suele durar poco tiempo, por lo que incluso es posible que en ocasiones ni la vea aparecer. Además, se hace uso de Superfetch para establecer una prioridad de memoria de 2 si la copia está dentro de un umbral determinado. Windows Vista introduce prioridades para las páginas de memoria, para más información consulte este artículo.

Los nodos se preparan y enumeran de manera recursiva para ciertas operaciones (por ejemplo, una copia) y, una vez preparados, se produce un cambio en la barra de progreso: El texto central se cambia por "Calculando tiempo restante". Lo que la mayoría de gente piensa es que aún no ha comenzado la operación en sí, y eso no es cierto. Mientras se está mostrando ese mensaje, ya se están "haciendo" los primeros nodos. Hacer un nodo básicamente consiste en mover, copiar o borrar el elemento físicamente, utilizando para ello una serie de funciones intermedias internas y no documentadas (podrá verlas si conecta un depurador que tenga los símbolos apropiados). Lo que ocurre realmente es que la barra de progreso muestra la frase "calculando tiempo restante" hasta que disponga de información "buena". El reloj es el encargado de darle esa información (nótese que, mientras tanto, la operación sigue su curso). A partir del cuarto segundo (con menos de 4 segundos la estimación de tiempo restante suele ser incorrecta), se le pregunta al reloj ¿cuál es el tiempo restante? Cuando éste puede dar una buena respuesta con la información disponible, actualizará el cuadro para decir, por ejemplo: "quedan 2 minutos". Este cuadro se irá actualizando progresivamente hasta que se finalice la operación.

Por último, otra de las cosas que debe tener en cuenta es que tanto la información sobre el tiempo restante como la velocidad de la operación no son demasiado fiables. La arquitectura del sistema de copias de Windows Vista y la forma en la que se obtiene el tiempo restante suelen dar lugar a inestables mediciones del tiempo restante, por lo que es normal que observe que la operación tarda realmente más de lo que se informa en el cuadro de diálogo. Asimismo, la velocidad de transferencia no es más que la velocidad global de la copia hasta el momento, es decir, no se incluye ningún matiz de velocidad local, así que puede ser algo inexacta también.

Como conclusión, yo considero posible que en ciertos escenarios y configuraciones de hardware las copias de archivos puedan realizarse lentamente, dada la manera de trabajar del nuevo motor, y de que se trata de algo totalmente nuevo en Windows Vista, con errores que se irán subsanando en versiones posteriores. De hecho, Microsoft ya ha hecho pública una corrección cuando las copias desde la red local se realizan muy lentamente, puede acceder a este artículo de la KB para obtener más información. Pero en ningún momento debería echar la culpa a la frase "calculando tiempo restante", porque Vista paralelamente ya está moviendo ficheros y carpetas mientras sigue apareciendo ese mensaje. Tampoco debería creer ciegamente en la información sobre el tiempo restante ni sobre la velocidad de transferencia, puesto que son dos aspectos que Microsoft espera calcular de un modo más exacto en versiones posteriores de Windows.

jueves, abril 05, 2007

UAC, tan querido, tan odiado...

Llevamos unos meses con Windows Vista en el mercado y, por consiguiente, el público ya puede comenzar a formarse una opinión sobre el nuevo sistema operativo. Una de las características que más críticas ha recibido es, sin duda, Control de cuentas de usuario (UAC, en inglés). La impresión general es que esta nueva herramienta no es más que una molestia para el usuario, especialmente para aquellos usuarios avanzados que afirman saber qué están "tocando" en su sistema.

Mi opinión es que UAC es la ayuda para que se produzca el necesario cambio de mentalidad en la mayoría de usuarios de Windows: el trabajo diario con el PC no requiere privilegios administrativos, salvo momentos puntuales. Esto es importante. Era necesario que Microsoft cambiara la manera de trabajar en Windows (todos los usuarios administradores por defecto) para que así los usuarios y desarrolladores se adaptaran a entornos con privilegios más limitados. Y, aunque no lo parezca, UAC es la manera más suave y sencilla posible para que se produzca ese cambio de mentalidad. Tiene sus fallos, es cierto que algunas copias de archivos pueden hacerse mortalmente pesadas (Microsoft es consciente de ello y quizá introduzca mejoras en SP1), pero a pesar de todo es la manera más simple de presentar las diferencias entre usuario administrador y limitado a un usuario general. Por otra parte, el número de ventanas de confirmación suele decrecer drásticamente una vez han pasado 2 ó 3 días desde la instalación de Windows, momento en el que se realizan muchísimas tareas administrativas para configurar aspectos de Windows, instalar software, etc.

Otro motivo importante por el cual UAC es necesario es que, cuantos más usuarios trabajen por defecto como usuarios limitados, mejores y más seguras aplicaciones recibiremos por parte de los fabricantes de software. Ellos también deben adaptarse a entornos limitados, deben dejar de almacenar la configuración de sus programas en partes delicadas del sistema operativo (la carpeta \Windows, \Archivos de programa, la rama de Registro HKLM\Software, etc.). Estas son prácticas que ha seguido casi desde siempre todo programa que funciona bajo Unix/Linux, pero que muy pocos programas para Windows seguían hasta ahora.

UAC, a largo plazo, se verá como una herramienta de transición, la ansiada transición en la que los usuarios del sistema operativo Windows ya no poseen privilegios administrativos por defecto. Así que personalmente yo recomendaría que todo usuario mantenga activado UAC en su sistema, no ya por seguridad (aunque sepa lo que está haciendo), sino para que el ecosistema de Windows sea mejor y más seguro. Todos ganamos con esto.

Tengo preparado publicar próximamente en la bitácora algunos artículos que detallen el funcionamiento interno de ciertos componentes nuevos en Windows Vista. Uno de esos artículos, por ejemplo, tratará sobre UAC, que es mucho más que una simple ventana de confirmación con un botón para continuar.