sábado, 16 de mayo de 2009

Ejecutar Need for Speed 2000 en Windows XP y posteriores

El otro día decidí desempolvar el NFS 2000 Porsche para recordar viejos tiempos por la Autobahn a 300 Kilometros por hora y me encontré con el problema de que en Windows XP el juego no cargaba.

La solución la encontré de casualidad tras probar sin éxito algunas posibilidades: simplemente hay que ejecutarlo en modo compatibilidad.

Para ello hacemos clic con el botón derecho encima del ejecutable del juego (porsche.exe) y seleccionamos Propiedades, luego entramos en la muesca Compatibilidad y activamos ejecutar en modo compatibilidad, a mi me ha funcionado con compatibilidad con Windows 98/ME.

Wala!! listo... en el menú va un tanto lento en algunas configuraciones, pero una vez cargada la carrera va como un rayo.

El compilador que se auto-compile buen compilador será

En estos tiempos de avances rápidos hay ciertas cosas que van logrando ventaja por varias razones. Últimamente por ejemplo asistimos a una explosión del uso del Javascript y derivados como el Actionscript, y otros como el PHP o compiladores como el TinyCC.

Todos ellos empiezan a mostrar elementos comunes que van desde una mayor comodidad a la hora de trabajar con estructuras de datos hasta compilación dinámica.

Y es esto lo que me interesa: a lo largo del tiempo esta característica ha sido vista como un elemento de no seriedad en un lenguaje, pero en los últimos tiempos estamos asistiendo a que código óptimo sea capaz de auto-compilar código de su mismo tipo: compilación dinámica y JIT.

Proyectos como AS3eval ó TinyCC, incluso native-client, que son compiladores al vuelo para usar dentro del propio código, o V8 y TraceMonkey, que son implementaciones de Javascript que incluyen la función eval capaz de cargar código al vuelo marcan la diferencia respecto a una generación de compiladores más bien poco flexibles.

Con el tiempo se va demostrando que una característica que a priori se consideraba insegura basta con ser rodeada de un sand-box "suficiente" para garantizar la integridad del sistema, o poco eficiente, se va rodeando de compiladores dinámicos con más potencia.

Otros movimientos abogan por la construcción de un sistema compilación de lenguajes universal que proporcione las mismas facilidades y flexibilidad en los diferentes lenguajes y la posibilidad de exportar código JIT. Al fin y al cabo la mayoría de los lenguajes se diferencian en su sintaxis más que ninguna otra cosa. Intentos de proporcionar herramientas que permitan fusionar diferentes módulos en diferentes lenguajes en una sola aplicación final ya ha habido bastantes con más o menos acierto.

Espero que esto sea el fin de los teóricos de la informática que se dedican a proclamar que para conseguir seguridad e integridad en los sistemas es necesario reducir la libertad de movimiento, que es lo más fácil y trivial.

La seguridad debería proporcionarse incluyendo libertad de hacer lo que se quiera dentro de un sand-box establecido en la configuración del sistema, e incluso debe proporcionarse un método para, en aquellos casos en que sea deseable, superar de manera controlada, con conocimiento del usuario ó administrador las barreras que la propia seguridad del sand-box nos impone para poder realizar labores administrativas mediante solicitud de privilegios.

Fuentes:
http://www.joangarnet.com/blog/?p=422
http://eval.hurlant.com/
http://tinycc.org/
http://bellard.org/tcc/