# Ncurses

Ncurses es una biblioteca de programación que provee una API que permite al programador escribir interfaces basadas en texto, TUIs. También optimiza el refresco de la pantalla, lo que permite reducir la latencia experimentada cuando se usan intérpretes de comandos remotos.
Ncurses significa «new curses», ya que es un reemplazo del descontinuado curses clásico de 4.4BSD.
El proyecto provee API oficiales en C, C++ y Ada, aunque también hay bindings para otros lenguajes, como Perl, Python o Vala.
Forma parte del proyecto GNU. Es uno de los pocos programas de GNU que no se distribuye bajo la GPL ni bajo la LGPL, sino bajo la licencia MIT.

## Historia

La ‘N’ en ncurses es una abreviación de la palabra new (en inglés: "nuevo"). Esto es porque ncurses es un software libre de emulación del ‘System V Release 4.0 (SVr4)’ Curses, el cual fue una mejora sobre el clásico discontinuado ‘4.4 BSD Curses’.

### Curses

La primera biblioteca curses fue desarrollada en la Universidad de California, Berkeley, para un sistema operativo BSD, a mediados de 1980 para soportar un juego orientado a pantalla. Originalmente fue usada la biblioteca ‘termcap’, la cual es usada en otros programas como el editor ‘vi’. El éxito de la biblioteca curses para BSD promovió a los laboratorios Bell a efectuar un lanzamiento de una versión mejorada de biblioteca curses en sus ‘System III’ y ‘System V Release 1’ (sobre Unix). Esta biblioteca era más poderosa y a diferencia de usar ‘termcap’, utilizaba ‘terminfo’. De todas manera, debido a una política de AT&T sobre la distribución del código fuente, la mejorada biblioteca curses no tuvo demasiada aceptación en la comunidad BSD.

### Pcurses

A mediados de 1982, Pavel Curtis empezó a trabajar en un clon gratuito basado en la biblioteca curses de Bell Labs, el cual fue nombrado ‘pcurses’, el mismo fue mantenido por varios programadores hasta el año 1986.

### Ncurses

La biblioteca ncurses fue mejorada aún más cuando Zeyd Ben-Halim se hizo cargo del desarrollo a finales de 1991. La nueva biblioteca fue publicada como ‘ncurses’ en noviembre de 1993, con la versión 1.8.1 como su primer lanzamiento importante. En trabajos posteriores, durante la versión 1.8.8 (año 1995), fue impulsada por Eric S. Raymond, el cual añadió las bibliotecas de menús y formularios escritas por Juergen Pfeiffer. Desde 1996 ha sido actualizada por Thomas E. Dickey.
La mayoría de llamadas de ncurses pueden ser fácilmente adaptadas a las antiguas curses.
Implementaciones de System V curses pueden soportar programas BSD curses con solo una recompilación. De todas maneras unas pocas áreas son problemáticas, tal como el manejo del tamaño de la terminal, ya que no existe contraparte en las curses antiguas.

## Base de datos de la Terminal

Ncurses puede usar ambas, ‘terminfo’ o ‘termcap’. Otras implementaciones de curses generalmente usan terminfo; una minoría usa termcap. En menor orden existen pocas que usan ambas.

## Licencia

Ncurses es una parte del proyecto GNU. Es uno de los pocos archivos GNU que no es distribuido bajo GNU GPL o LGPL; es distribuido bajo una licencia permisiva de software libre, similar a la licencia MIT. Esto es debido a un acuerdo hecho con la Free Software Foundation al momento en que los desarrolladores asignaron sus derechos de autor. Cuando el acuerdo se realizó, para pasar los derechos de la FSF, se incluyó la siguiente cláusula:
De acuerdo con el actualizador Thomas E. Dickey, esto excluye el re-licenciamiento a la GPL en cualquier versión, ya que impondría restricciones en los programas que serían capaces de enlazar las bibliotecas.

## Programas que utilizan ncurses

Existen cientos de programas los cuales usan ncurses. Algunos, tal como el ‘GNU Screen’ y ‘w3m’, usan solo la interfaz ‘termcap’, realizando el manejo de pantalla dentro de la aplicación. Otros, como el ‘GNU Midnight Commander’ y ‘YaST’ usan la interfaz de programa ‘ncurses’.