KornShell ( ksh) は、1980 年代初頭にベル研究所のDavid Kornによって開発され、 1983 年 7 月 14 日にUSENIXで発表されたUnix シェルです。 [ 1 ] [ 2 ] 初期の開発はBourne シェルのソース コードに基づいていました。[ 7 ] 他の初期の貢献者には、ベル研究所の開発者である Mike Veach と Pat Sullivan がおり、それぞれEmacs スタイルとviスタイルの行編集モードのコードを記述しました。[ 8 ] KornShell は Bourne シェルとの後方互換性があり、ベル研究所のユーザーからの要望に触発されたC シェルの多くの機能が含まれています。
KornShellはPOSIX.2、シェルおよびユーティリティ、コマンドインタープリタ(IEEE Std 1003.2-1992)に準拠しています。KornShellと従来のBourneシェルとの主な違いは以下のとおりです。
KornShellは、1986年にAT&Tの実験ツールキットの一部として最初に配布され、その後1989年にUNIX System Vリリース4に組み込まれた。

KornShell は元々プロプライエタリ ソフトウェアでした。2000 年にソース コードが AT&T 専用のライセンスで公開されましたが、 2005 年初頭のksh93qリリース以降はEclipse Public Licenseでライセンスされています。[ 4 ] KornShell は AT&T Software Technology (AST) Open Source Software Collection の一部として利用可能です。KornShell は当初 AT&T のプロプライエタリ ライセンスでのみ利用可能だったため、多数のフリーでオープンソースの代替品が作成されました。これらには、pdksh、mksh、Bash、Z shellなどがあります。
オリジナルのKornShellであるksh88の機能は、標準規格POSIX.2「シェルおよびユーティリティ、コマンドインタープリタ(IEEE Std 1003.2-1992)」の基礎として使用されました。
一部のベンダーは、拡張機能付きの古いksh88バージョンの独自のバージョンを今でも出荷しています。ksh93はGitHubでメンテナンスされています。[ 10 ]
ksh93は「Desktop KornShell」(dtksh)として、Common Desktop Environmentの一部として配布されています。[ 11 ]このバージョンでは、 Motifウィジェットのシェルレベルのマッピングも提供されています。Tcl / Tkの競合となることを意図していました。[ 12 ]
オリジナルのKornShellであるksh88は、バージョン4でAIXのデフォルトシェルとなり[ 13 ] [ 14 ]、ksh93は別々に利用可能になった[ 15 ] 。
UnixWare 7 にはksh88とksh93 の両方が含まれています。デフォルトの Korn シェルはksh93で、 /usr/bin/kshとして提供され、古いバージョンは/usr/bin/ksh88として利用できます。[ 16 ] UnixWare にはCDEがインストールされている場合、dtkshも含まれています。
ksh93ディストリビューションは、安定版ksh93u+の時点で 2012 年頃に著者が AT&T を退職した後、不安定な運命をたどりました。主な著者は、 2014 年頃までksh93v- beta ブランチでの作業を続けました。その作業は最終的に 2017 年にRed Hatが主に引き継ぎ(顧客からの要望による)、2019 年秋にksh2020 [ 17 ]の最初のリリースにつながりました。この最初のリリース (以前の安定性の問題のいくつかは修正されましたが) は、破損や互換性の問題を引き起こしました。[ 18 ] 2020 年 3 月に、AT&T は、コミュニティの変更をロールバックし、ブランチに保管し、ksh93u+から再開することを決定しました。変更が広範囲にわたり、ksh に特化しすぎているため、メンテナンス モードのプロジェクトに組み込むことができなかったためです。[ 19 ] [ 20 ] ksh2020 [ 21 ]は、 EBCDICサポートの削除、 ksh93u+用に書かれたバイナリ プラグインのサポートの終了、壊れた数学関数の削除など、 「いくつかの理由」[ 22 ]からメジャー リリースとしてリリースされましたが、AT&T によってメンテナンスまたはサポートされたことはありません (最初のリリース日でさえ)。ksh2020のソース コードは 2020 年 2 月以降コミットされておらず、2021 年 10 月に読み取り専用としてアーカイブされました。[ 17 ]
ksh2020ブランチの問題と開発中止を受けて、2020 年 5 月に、最後の安定版 AT&T リリース ( ksh93u+ 2012-08-01) をベースとしたksh93u+mブランチ用の新しいリポジトリが作成され、バグ修正開発が積極的に続けられています。[ 23 ]
以下のリストにおいて、KSHの主要ソフトウェアブランチとは、1983年7月から2019年末のKSH2020リリースまでのオリジナルプログラムを指します。KSHの後継バージョン(ブランチ)の開発は2020年から複数のグループに分かれており、以下では詳細には触れません。
以下は、貢献度の高い順に概ね時系列順に並べたものです。
以下は、貢献度の高い順に概ね時系列順に並べたものです。
主要な貢献企業(上記参照)の他に、KSHの開発に無償でリソースを提供してくれた企業がいくつかあります。以下に、それらの企業をアルファベット順に列挙します。
KornShellにはいくつかの派生版やクローンが存在する。
新しいスクリプト言語を発明する代わりに、Bourne シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。
注: ksh2020 はメンテナンスもサポートもされていません
... Berkeley のジョブ制御は興味深いハックでした。BRL での私たちの問題は、私が C シェル構文を全く嫌っていたことです。Korn シェルはまだ AT&T から抜け出していなかったので、C シェルで実際にどのように動作するのか (あまりよく文書化されていませんでした)、主に目視で理解し、その後、Bourne Shell で再実装しました (そのために System V のソースコードバージョンを使用していました)。それでも、Bourne シェルの使用について BRL で支持を得ることができませんでした。なぜなら、その頃には tcsh がコマンドライン編集機能を備えて登場していたからです。そこで、シェルのソースに戻りました。この頃には 5R2 がリリースされていたので、そこからシェルのソースを取得しました。 [...] Emacs 風のコマンドライン編集を再構築しました。シェル。その後、USENIX の David Korn と楽しい会話をしました。おそらくその時点では、Bourne シェルのジョブ制御の内部構造に最も詳しいのは彼ら 2 人だったでしょう。また、bash か pdksh (どちらだったか覚えていません) を書いている人たちと座って、この仕組みをすべて説明しました。...数年後 、 私は BRL を離れ、ラトガース大学の管理者として 3 年間勤務し、バージニア州の小さなスタートアップで働いていました。そこには MIPS ワークステーションがありました。私は ed を使用して苦労していました... 何も考えずに、「fg」と入力してバックグラウンド ジョブを取得しようとしました。驚いたことに、シェルは「ジョブ制御が有効になっていません」と表示しました。ふむ、と私は言いました。これは私のエラー メッセージに似ています。「set -J」と入力します。「ジョブ制御が有効になりました」。おいおい!これは私のシェルだ。Doug Gwyn が私の修正を彼の「System V on BSD」配布テープに入れ、それが Mach コード ベースに入り込み、すべての Mach 派生システムがそれを持つことになったことがわかりました。