¿Por qué no se puede instalar Windows 7 en un sistema basado en un procesador ARM?

12

Hoy estaba leyendo algunas noticias ( 1 , 2 , 3 , 4 ) sobre Microsoft Windows 8 y vi que una de las nuevas características es que puede ejecutarse en un sistema basado en un procesador ARM . Esto me hace preguntarme las razones por las que no se puede hacer con la versión de lanzamiento actual de Windows (Seven).

¿Cuáles son las limitaciones reales de Windows 7 para tener en cuenta instalarlo en un sistema basado en un procesador ARM? ¿Tendría que ver con la versión del kernel, los controladores, la arquitectura o incluso una combinación de estos factores?

Hasta que lo sepa, puedo instalar Linux en un ARM, por lo que ni siquiera puedo instalar Windows Seven en una máquina virtual VMWare en un ARM.

Diogo
fuente
1
Tenga en cuenta que Windows 8 está programado para ejecutarse en ARM. windows8news.com/2011/01/05/…
JSB ձոգչ
1
Usted puede instalar Windows 7 en una máquina virtual en ejecución en un sistema operativo de ARM. Solo necesita encontrar un programa de máquina virtual que se ejecute en ARM y que sea capaz de ejecutar un invitado x86.
Avance

Respuestas:

30

Para que los binarios se ejecuten en un procesador ARM, deben compilarse específicamente para ese procesador o ejecutarse en un emulador.

Dado que los sistemas Linux son de código abierto, las personas pueden compilarlos específicamente para sistemas ARM y reescribir cualquier código específico de x86. Debido a que la fuente para Windows está cerrada, a menos que Microsoft lance una versión ARM, no se puede volver a compilar y ejecutar en ella.

Hay otros problemas al pasar a los sistemas ARM, pero este es probablemente el mayor.

Hasta donde yo sé, VMware no emulará un x86. Creo que qemu puede, pero no lo he usado para ARM emulando x86 antes, solo x86 emulando ARM. Habrá un impacto significativo en el rendimiento si funciona.

Si bien cualquier programa debe compilarse para la arquitectura en la que está destinado a ejecutarse, un sistema operativo a menudo necesita estar mucho más personalizado para la arquitectura específica. Los sistemas operativos son responsables de cosas como la programación y el cambio de tareas, que funcionan con el procesador a niveles muy profundos.

jhulst
fuente
8
Tenga en cuenta que puede generalizar la primera oración eliminando la palabra "ARM" y aún así tener una declaración verdadera; como regla, los binarios siempre deben compilarse para la arquitectura en la que se ejecutan, o bien tener una capa de emulador o intérprete .
Shinrai
44
@jhulst He usado qemu para emular x86 en PowerPC, y sí, es increíblemente lento.
Cajunluke
Supuestamente VPC (que compró MS) hizo x86 en PPC decentemente con recompilación dinámica. De acuerdo, esto fue hace mucho tiempo, y nunca lo intenté yo mismo. QEMU es horrible aparte de su portabilidad IMO. Hace algunas cosas MUY bien (como no necesitar ganchos de kernel) pero es ineficiente.
Journeyman Geek
Este puerto QEMU a la plataforma de host ARM no se ve muy convencional y no pude encontrar ningún otro.
RedGrittyBrick
Los controladores de dispositivo también serían un problema, especialmente para cualquier cosa única limitada a los sistemas ARM.
CarlF
8

La respuesta simple es "MS no ha lanzado un puerto" (aunque se supone que Windows 8 está portado a ARM), simplemente porque no tenía sentido comercial en ese momento. Si quieres entrar, si la EM podría ...

Bueno, históricamente, la familia NT se ha ejecutado en una gama de procesadores: NT se ejecutó en Alpha, PPC y MIPS, y había puertos planificados para las arquitecturas Clipper y SPARC. Esto es posible porque Windows NT extrajo las partes dependientes del hardware del código (el HAL ) y reescribió solo esa sección y recompilar todo lo demás debería funcionar (aunque en teoría el software basado en .NET es supuestamente independiente del hardware).

A diferencia de Linux, que, si recuerdo correctamente, tiene ramas de kernel separadas para cada arquitectura, supuestamente SOLO el HAL es específico del hardware, y el resto es común: creo que una vez que se creó un HAL para la plataforma ARM en cuestión, debería ser relativamente trivial, y no es diferente de la codificación de varios bits de hardware, especialmente si el sistema era convencional, por ejemplo, utilizando PCI-E y otras interfaces estándar de la industria.

Suponiendo que Microsoft lanzó un puerto ARM de Windows 7, cualquier software que no se interprete o se ejecute en una máquina virtual como JVM, LLVM o CLR necesitaría volver a compilarse o ejecutarse en una capa de traducción, como Rosetta o la antigua compatibilidad de 68K. capa en equipos Mac más antiguos , que conoce el código específico x86 (y lo ejecuta en emulación de forma transparente), y hay suficiente potencia de procesador para la traducción.

Journeyman Geek
fuente
El software .NET puede ejecutarse en casi cualquier arquitectura principal utilizando Mono, que es un compilador / tiempo de ejecución de código abierto para programas .NET que se ejecuta en la mayoría de los principales sistemas operativos. Esto no es directamente relevante a la pregunta original, por supuesto.
CarlF
Bueno no. Es relevante para la parte donde 'el software necesitaría ser recompilado'. Creo que CLR es potencialmente independiente de la plataforma, y ​​/ o el código .net está optimizado / compilado en la instalación. Olvidé totalmente el mono, desafortunadamente, es una de esas cosas que funciona silenciosamente en el fondo; p
Journeyman Geek
@CarlF la advertencia es que no puedes usar P / Invoke para acceder a ningún binario win32. En el momento en que necesita hacer eso, pierde su soporte multiplataforma. Esto es menos problemático de lo que era, ya que el marco .Net ha crecido; pero si su aplicación necesita interactuar estrechamente con cualquier dependencia de sistemas de terceros, el código nativo se vuelve bastante común.
Dan está jugando con Firelight el
2

No puede ejecutar binarios en procesadores que tengan una arquitectura diferente a la arquitectura en la que se compilaron los binarios.

No puede ejecutar un Linux AMD64 en ARM, del mismo modo que no puede ejecutar Linux AMD64 en un procesador i386 (32 bits). Sus únicas opciones son emular un procesador completo (ver qemu ) y luego intentarlo lo mejor posible.

VMware / VirtualBox no son emuladores de procesador, por lo tanto, tampoco tiene suerte.

akira
fuente