La anecdota del ms-sys. Codigo binario de Microsoft en Debian.

Alrededor de agosto del 2006 añadí a Super Grub Disk la opción de “Arregla Arranque de Partición de Windows”.
Pero, antes de nada, veamos que es eso de arrancar Windows. Mucha gente lo hace todos los días pero ignora como funciona en detalle.

Cómo arranca Windows

Al arrancar el ordenador se ejecuta la BIOS que es como un chip que tiene entre otras la función de poder arrancar nuestro sistema. Para ello normalmente comprueba el cdrom o disquete en busca de código arrancable y si no lo encuentra prueba con el disco duro.
Bien. Antes de seguir veamos qué tiene el disco duro.
El disco duro empieza con el MBR, sigue con unos sectores a veces usados y a veces no y finalmente empieza la primera partición.
Justo al principio de cualquier partición y por tanto de la primera partición antes de que comience el sistema de ficheros propiamente dicho hay un pequeño trozo para poner código de arranque.
Volvamos al hilo anterior. La BIOS al final carga el disco duro. En realidad carga una parte del MBR. El MBR estandar busca la primera partición activa (que suele ser la primera partición) y le cede a ello la carga.
En este punto llegamos a la parte del arranque que ya es propia de Microsoft. Un código escueto hace lo posible por encontrar ntldr o algún fichero esencial del kernel de Windows según las versiones.
Ntldr carga y poco a poco se carga el resto del sistema Windows.

Problemática al restaurar copias de seguridad

Bien. Ahora imaginaros que copias todos los archivos de Windows en un archivo .zip o equivalente. En otra máquina particionais y metéis ahí el Windows. Intentáis arrancar y no os va. Esto es porque el arranque llega hasta el inicio de la partición de Windows. Pero en la partición de Windows no hay código arrancable.
¿Como se soluciona esto? Pues poniendo el código mágico en el sitio correcto.

Soluciones al arranque de partición de Windows

Para ello teníamos fixboot del disco de Windows, la utilidad ms-sys y Super Grub Disk con su opción Arregla Arranque de Partición de Windows. Más adelante veremos qué queda de estas opciones.

Arregla Arranque de Partición de Windows de Super Grub Disk

Veamos como funcionaba la opción Arregla Arranque de Partición de Windows de Super Grub Disk.
Por un lado desarrollé una versión de dd para Super Grub Disk. No es gran cosa. Tiene una sintaxis que se ha de seguir a la letra y sólo tiene un sentido. Desde archivo a dispositivo. (Más adelante desarrollé dddd que permite copiar de dispositivo a dispositivo pero no acabo de estar de convencido de que funcione del todo bien).
Por otro lado se necesitaba ese código mágico que buscase el ntldr o algo equivalente. ¿De dónde sacarlo? Pues del mundo del software libre. Pues parece ser que existía ms-sys que hacía esto mismo.
Recuerdo que aplique ms-sys a un fichero o directamente a una partición con sus opciones de windows. Los primeros 512 bytes de la partición los podía volcar a un fichero. Y ese fichero sería el que leyese mi recién desarrollado dd para poderlo grabar al inicio de una partición.
Comentaros que el sistema funcionaba. Recuerdo haber ayudado a un amigo que actualizaba 🙂 de Windows Vista a XP. Restauraba el XP (no recuerdo como lo tenía guardado) y con Arreglar Arranque de Windows (Esta opción toca el MBR y también la tuve que sustituir por el cargador syslinux que viene a hacer lo mismo: Cargar la primera partición).
y después con Arreglar Arranque de Partición de Windows listo.
¿Por qué se alegró tanto mi amigo? Por el SATA. El arreglo de windows mediante el disco de xp suponía insertarle un disquete (ya sabéis hay que hacer el disquete y luego el disquete es lento) y luego, bueno, saberse lo del fixboot.

Cómo funciona ms-sys

Veamos por encima como funciona ms-sys. El código de ms-sys es muy tonto en realidad. Es abrir un fichero para leer-y-escribir y meterle en determinadas posiciones el código que se quiere. El programa está bien estructurado y cada opción tiene sus código de arranque asociado en un fichero diferente. Además queda muy claro en el código en qué posición el código ha de escribirse.
El código que ms-sys está escrito en unos arrays de chars (o eran unos structs) cuyos valores en vez de estar escritos entre comillas están escritos en hexadecimal separados por comas. Esos son los códigos mágicos.

Los códigos mágicos

Ahora demonos un paseo por la web de ms-sys . En ella podemos ver la documentación. Entre los links tenemos a: Boot records revelead. En esa página se nos desvela cómo funciona (con mayor detalle y exactitud) el arranque de Windows. Ahí podéis ver código binario de Microsoft. Y os explican qué hace cada parte del código. Si no entiendes de ensamblador puede que te pierdas. Esa página es como el código fuente de Windows 2000 que se ve habían extraído de Microsoft sin permiso. Vamos que mejor no leerla.
Pues bueno, el autor de ms-sys sólo tuvo que copiar y pegar (y también entenderlo y programarlo no quitemos merito) los caracteres que ahí se muestran para cada una de las versiones de windows.

Problemática Copyright Microsoft

La verdad es que fui consciente de la problemática temprano pero de alguna manera no quería verlo. Me podía más el Torvalds que todos llevamos dentro (el ingeniero) que el Stallman (el filosofo). Al autor de ms-sys le pregunté y el me respondió que era una información libre disponible en Internet y que cómo Microsoft no había cerrado esa web entendía que no había ningún problema. Su argumentario puede leerse en este hilo de sourceforge.

En Debian se reporta el error

Antes de que yo dijese nada en Debian ya se daban cuenta. El bug se abrió en mayo del 2007. Yo interviné en el mismo en enero de 2008 pero no fue hasta que me moví por la lista de legal de Debian en Febrero de 2008 que el bug se movió de normal a serio. Finalmente en marzo de 2008 se cerró el bug ya que ms-sys había sido retirado de los repositorios de Debian. Poco después fue también retirado de Ubuntu.
Para los entusiastas de la legalidad no perderse la explicación de Debian sobre debian/copyright no explicando el tema o la no inclusión del código en ensamblador equivalente:
ms-sys contains verbatim copies of the master boot records of windows

2000 and windows 95B et al. While it would be valid to reimplement an
MBR in such a way that it was functionally similar to an MBR that
boots these MS operating systems, the length and expressive content of
the MBR makes it rather likely that it is copyrightable, and that we
have not been granted the right to distribute, nor is the assembly in
question licensed in accordance with the DFSG (nor is the assembly
even actually present, which falls afoul of DFSG §2).


Finally, debian/copyright does not properly discuss this problem at
all, nor does it mention the copyrights on syslinux's mbr or any of
the other mbrs which are present.

¿Y como se arregla ahora el arranque de partición de Windows?

Se puede usar fixboot del disco de Windows 2000/XP si tienes una copia legal.
Se puede usar ms-sys desde su página pero no estarías haciendo algo legal.
Se puede usar el Super Grub Disk antiguo si lo sabes encontrar por la redes p2p pero no estarías haciendo algo legal. (Como os podéis imaginar quite la opción conflictiva del Super Grub Disk).
Comentaros también que el Super Grub Disk tiene una opción pre-pre-alpha (vamos que está muy verde) para restaurar el último sector (en principio es una copia de seguridad del primer sector) de una partición ntfs al primero. Esto es sólo es útil si sólo se ha sobreescrito el primer sector del ntfs y no al restaurar desde una copia de seguridad.

Conclusiones

Vaya con el artículo. Si no fuera por la informalidad del mismo podría venderselo a alguna revista.
Sólo comentar que aquí lo importante es ver lo que no pasó. Desde mayo del 2007 hasta Febrero de 2008 ese bug pasó inadvertido. Diréis que ese bug es como cualquier otro pero no.
Si el sistema de reporte de bugs fuera lo suficientemente avanzado hubiera detectado la palabra copyright y hubiera enviado una copia del mismo a la lista debian-legal. Quizás no todos los reportes de bugs con copyright deberían mandarse a debian-legal, quizás un resumen semanal, pero algo se debería hacer.
Por último aquí se ve la importancia de instituciones como la FSF o Debian que certifican, a veces más tarde que pronto, si un programa es verdaderamente libre.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: