ncurses(ニュー・カーズ)は、さまざまな端末で動作するテキストベースのユーザーインターフェース(TUI)を作成するためのプログラミングライブラリです。端末に送信されるコマンドを最適化し、表示コンテンツの更新時に発生する遅延を軽減するように設計されています。
ncursesは、 System V Release 4.0 (SVr4)のcursesをエミュレートした、無料のオープンソースソフトウェアです。
ncurses のバインディングは、Ada [ 4 ] 、Common Lisp [ 5 ] 、Python [ 6 ] 、Gambas [ 7 ] 、Ruby [ 8 ]、PHP [ 9 ]、JavaScript [ 10 ]、Perl [ 11 ]、Object REXX ( ooRexx ) [ 12 ]、Rust [ 13 ]など、さまざまなプログラミング言語で提供されています。
新バージョンであるncursesは、廃止された4.4 BSD cursesを改良したSystem V Release 4.0 (SVr4) cursesのフリーかつオープンソースのソフトウェアエミュレーションです。 [ 14 ] X/Openが発行したXSI Curses標準は、 UNIX System Vを明示的に、かつ密接にモデル化しています。
最初の curses ライブラリは、テキストベースのアドベンチャーゲームであるRogue をサポートするために、1980 年頃にカリフォルニア大学バークレー校でBSDオペレーティングシステム向けに開発されました。当初は、 viエディタなどの他のプログラムで使用されていたtermcapライブラリを使用していました。[ 14 ]
BSD curses ライブラリの成功を受けて、ベル研究所はSystem V Release 2 Unixシステムで強化された curses ライブラリをリリースしました。このライブラリはより強力で、termcap の代わりにterminfoを使用しました。しかし、 AT&Tのソースコード配布に関する方針のため、改良された curses ライブラリは BSD コミュニティで広く採用されませんでした。[ 14 ]
1982年頃、パベル・カーティスはベル研究所のcursesのフリーウェア版クローンであるpcursesの開発に着手し、1986年まで様々な人々によってメンテナンスされた。[ 15 ]
pcurses ライブラリは、1991 年後半に Zeyd Ben-Halim が開発を引き継いだことでさらに改良されました。[ 14 ] [ 15 ] [ 16 ]新しいライブラリは、1993 年 11 月に ncurses としてリリースされ、バージョン 1.8.1 が最初のメジャー リリースとなりました。バージョン 1.8.8 (M1995) までのその後の作業は、 Juergen Pfeifer が作成したフォームおよびメニュー ライブラリを追加したEric S. Raymondが主導しました。[ 1 ] 1996 年以降は Thomas E. Dickey がメンテナンスしています。[ 15 ]
ほとんどの ncurses 呼び出しは、古い curses に簡単に移植できます。System V の curses 実装は、再コンパイルするだけで BSD curses プログラムをサポートできます。[ 17 ]ただし、古い curses には対応する機能がないため、端末のサイズ変更の処理など、いくつかの領域は問題があります。
ncurses はterminfo (拡張可能なデータ付き) またはtermcap のいずれかを使用できます。curses の他の実装は一般的に terminfo を使用し、少数派が termcap を使用しています。両方を使用するものはほとんどありません (mytinfo は古い例外でした[ 18 ] )。
ncurses はGNU プロジェクトの一部ですが、GNU General Public License (GPL) またはGNU Lesser General Public License (LGPL) の下で配布されていません。代わりに、寛容なフリーソフトウェアライセンスであるMITライセンスの下で配布されています。[ 19 ]これは、開発者が著作権を譲渡した際にフリーソフトウェア財団と交わした合意によるものです。
FSFに権利を譲渡するという合意がなされた際、次のような条項があった。[ 19 ]
財団は、財団またはその代理人もしくは譲受人の管理下で行われる、本パッケージまたは「本パッケージに基づく」あらゆる作品の配布は、当該条件が適用される作品の複製を所有し、かつ当該条件を正確に認識している者が、同じ条件で作品の複製を誰にでも再配布することを明示的かつ永続的に許可する条件で行われることを約束します。
メンテナーのトーマス・E・ディッキーによれば、これはどのバージョンにおいてもGPLへの再ライセンスを不可能にする。なぜなら、ライブラリにリンクできるプログラムに制限がかかるからである。[ 19 ]
数百ものプログラムがncursesを使用しています。[ 20 ] [ 21 ] GNU Screenやw3mのようにtermcapインターフェースのみを使用し、画面管理を独自に行うものもあれば、 GNU Midnight CommanderやYeta Another Setup Tool ( YaST )のようにcursesプログラミングインターフェースを使用するものもあります。