# Tecnología NX

NX es un programa informático que realiza conexiones remotas X11 muy rápidas, lo que permite a los usuarios acceder a escritorios remotos de Linux o Unix incluso bajo conexiones lentas como las realizadas con módem.
NX realiza una compresión directa del protocolo X11, lo que permite una mayor eficiencia que VNC. La información se envía mediante SSH, por lo que toda la información que se intercambian servidor y cliente está cifrada.
Al cliente que se conecta al servidor NX se le considera cliente liviano.
NX está desarrollado por la empresa italiana NoMachine, que ha liberado el código. Existe una implementación libre de esta aplicación, llamada FreeNX.

## Conceptos básicos

Cuando un cliente necesita dibujar algo en pantalla realiza una cantidad de peticiones al servidor, muchas de las cuales necesitan una respuesta. Cada par petición-respuesta se conoce como roundtrip. Estos roundtrips son los que hacen al sistema más lento debido principalmente al tiempo que se necesita para completar el ida y vuelta. Cuando el cliente y el servidor X son ejecutados en el mismo host la comunicación se realiza de forma muy rápida. Sin embargo cuando cliente y servidor ejecutan en diferentes hosts la comunicación debe realizarse a través de TCP/IP por lo que en este caso la comunicación es mucho más lenta. Otro factor que puede afectar el desempeño es la velocidad de la conexión y latencia de la red.

## Eficiencia de NX

La tecnología NX ofrece mayor eficiencia que otras debido principalmente a las características que se listan a continuación:
* Realiza una eficiente compresión del tráfico X.
    La compresión del tráfico de forma eficiente es necesaria para lograr ejecutar aplicaciones sobre medios de poco ancho de banda y también para permitir ejecutar múltiples sesiones de usuario en redes LAN.
* Utiliza mecanismos de caché para almacenar y reutilizar la información transferida entre cliente y servidor.
    NX utiliza un método de caché innovador que divide el mensaje X en dos partes, uno de identificación y otro de datos. La tecnología mantiene en caché únicamente los datos de los últimos mensajes enviados, clasificados por protocolo. A este caché se le conoce como MessageStore y hace que el número de peticiones para mostrar los elementos de pantalla disminuya notoriamente.
* El tiempo consumido en realizar roundtrips es prácticamente nulo.
    La reducción de roundtrips es fundamental, al igual que el estricto control del flujo de datos que viaja por la red.
* Utiliza un algoritmo de codificación perezoso (esto es "no-estricto") para realizar actualizaciones de pantalla. Esto significa que no se evalúa nada hasta tanto deba ser evaluado.
    NX posee mecanismos de adaptación para ajustarse a las propiedades de la red (latencia y velocidad de conexión), lo que permite pasar de métodos estrictos de codificación a métodos perezosos que retrasan la actualización de pantalla cuando la red está congestionada.

## Objetivos de NX

El principal objetivo de esta tecnología es el de ejecutar a través de Internet aplicaciones que logren tener el mismo aspecto gráfico que cuando se ejecutan en cualquier PC. Generalmente cuando esto ocurre es necesario deshabilitar todo aquello que pueda consumir demasiados recursos, como por ejemplo, menús desplegables, fondos de pantalla, iconos o animaciones gráficas. NX fue diseñado especialmente para soportar estas condiciones y no hacer que usuarios y desarrolladores deban cambiar sus hábitos o su código.

## Licencia

Antes de la versión 4.0 NoMachine utilizaba la licencia GNU General Public License para la tecnología del núcleo de NX, ofrecía un cliente de código libre y versiones de servidor para Linux y Solaris y clientes libres para Microsoft Windows, Mac OS X y sistemas embebidos, a la vez que estaba ofreciendo una versión comercial no gratuita para empresas.
El 21 de diciembre de 2010 NoMachine anunció que la siguiente versión 4.0 de NX sería únicamente de código cerrado (aunque gratuita para uso personal).
Debido a la naturaleza de software libre de versiones anteriores de NX, se inició el proyecto FreeNX. Actualmente existen varios proyectos de servidor de terminal de código abierto fundamentados en el protocolo NX, siendo uno de los más conocidos X2Go. No obstante X2Go no es compatible con otros servidores y clientes NX.