Linux がそれ以前の伝説的なオペレーティング システムから盗んだ 6 つの天才的なアイデア
2000 年代に生まれた私は、多くの人が話題にする古いオペレーティング システムを使用する機会がほとんどありませんでした。 Linux ユーザーとして、このトピックは常に私を魅了します。古いオペレーティング システムがどのように機能し、何を提供していたのか、そして最も重要なことに、それらが現代の OS をどのように形作ったのか。
Linux で目にする優れたアイデアの多くが他のシステムからのものであり、その中にはすでに消滅したものもあると知ったら驚かれるかもしれません。しかし、Linux ターミナルを開いて Linux からインスピレーションを得た機能を使用するたびに、その遺産は生き続けます。
Multics は Linux にシェル、名前、その他すべてを与えました。
.bashrc の末尾の「rc」も Unix より古いです
MIT の CTSS システムに取り組んでいた Louis Pouzin は、スクリプトからコマンドのリストを実行する RUNCOM と呼ばれるツールを作成しました。それは 1963 年と 1964 年に遡ります。その後、プザンはそれを一種の貝殻だと表現しました。興味深いことに、まだ誰もその言葉を使っていません。そして、1965 年の変わり目に、彼は Multics がコマンドをどのように処理すべきかについての論文を書きました。その論文の中で、彼は「シェル」という言葉を紹介しました。
Unix は Multics から多くのことを学びました。さらに、C プログラミング言語の開発者であるデニス・リッチーは、シェルをオペレーティング システムの一部ではなくファイルに保存されるユーザー レベルのプログラムにすることが Unix にとって重要であると後に書きました。シェルは単なる別のプログラムであるため、カーネルに触れることなく、Bash を Zsh または Fish に交換できます。
RUNCOMもお土産を残していきました。 1981 年にリッチーは、Unix ファイル名の「rc」は RUNCOM に由来すると説明しました。したがって、次のように入力すると ls -a ~ | grep rc ターミナルでは、システム内に残っているすべての RUNCOM を確認できます。
TENEX はコマンドラインに言葉を終える方法を教えました
tcsh の「t」には TENEX の名前が残っています
BBN は DEC の PDP-10 マシン用に TENEX を構築しました。タイムシェアリング方式でした。私は TENEX に関する 1972 年の論文を見つけました。この論文では、その最も便利なトリックの 1 つが紹介されています。
コマンドまたはファイル名の最初の数文字を入力して ESC キーを押すと、システムが入力を完了します。これらの文字が複数の文字と一致した場合は、端末のベルを鳴らし、次の文字を待ちます。
おなじみですね。これは、私たち Linux ユーザーが現在タブ補完と呼んでいるものです。もちろん、それははるかに現代的であり、当時よりもはるかに優れています。
数年後、カーネギーメロン大学の Ken Greer は、「Tenex スタイル」のファイル名補完を書き始めました。彼自身のソースノートによると、その作業は 1975 年 9 月に遡ります。グリア氏はそれを 1981 年 12 月に C シェルに組み込んだだけでした。そのシェルは後に tcsh になりました。マニュアルには「The T in tcsh」というセクションもあります。製作者はTENEXの完成度に感銘を受け、それを模倣したcshを作ったという。
現在の Linux では、Bash は GNU Readline ライブラリを通じてこれを処理します。タイプ システム Tab を 2 回押して、1970 年代のアイデアが実際に機能している様子を確認します。
BSD は Linux にネットワークと通信する手段を与えました
BSD は Linux にネットワークと通信する手段を与えました
1983 年にバークレー社がリリースした 4.2BSD は、DARPA が資金提供した Unix プロジェクトの頂点でした。この時代から、プログラムがカーネルにネットワーク接続を要求する方法であるソケットが登場しました。 Linux 独自のsocket(2) マニュアルページには、その履歴セクションに 4.2BSD がまだ記載されています。
Linux のsocket(7) ページには、これらの BSD スタイルのソケットがプログラムがカーネルのネットワーク コードと通信する方法であると記載されています。これは、Linux 上のネットワーク プログラムはすべて同じ標準のドアをノックしていることを意味します。走ってみる ss -s システムが現在開いているソケットの簡単な概要を表示します。
System V Release 4 は、Linux プログラムのパッケージ化方法を決定しました
System V Release 4 は、Linux プログラムのパッケージ化方法を決定しました
システム上で開くほとんどのファイルにはファイル形式があります。コンパイルされたプログラムには、システムにプログラムをロードする方法を指示するファイル形式も必要です。初期の Linux では、これは a.out 形式でした。当時、Unix System Laboratories は ELF を構築しました。 Solaris と System V ではこの形式が使用されていました。
共有ライブラリに関する Sun のこの文書では、.so ファイルと ld.so と呼ばれる実行時リンカーについて説明しています。 Linux のダイナミック リンカーは現在でも ld.so を使用しています。
ただし、落とし穴がありました。古い形式は苦痛になってきました。 1995 年 4 月、カーネル開発者の Eric Youngdale は、Linux の a.out 共有ライブラリは dlopen() をサポートできないと説明しました。その結果、X Window System のような大きなパッケージの場合、それらを構築するのは面倒でした。一方、ELF はより高い柔軟性を提供しました。そこで、GCC と C ライブラリの開発者は、これを Linux の標準にしました。
a.out サポートの最後の部分は、2022 年の Linux 5.18 で削除されました。自分の目で確認したい場合は、次のコマンドを実行してください。 ファイル -L /bin/ls ELF ラベルを表示するには、 ldd /bin/ls 必要な共有ライブラリをリストします。
プラン 9 は Linux にコンテナの背後にあるトリックを与えました
プロセスごとの名前空間により、各プログラムはシステムの独自のバージョンを認識できるようになります。
ベル研究所は、1980 年代後半からプラン 9 研究システムを構築しました。その最も大胆なアイデアの 1 つは、すべてのプロセスにシステムの独自のビューを与えることでした。プラン 9 では、各プロセスの名前空間は一意です。一般ユーザーはマウントとバインドを使用して再配置できます。
2000 年 11 月、カーネル開発者の Al Viro は、Linux 用の Plan 9 スタイルのプロセスごとの名前空間を提案しました。最初のタイプであるマウント名前空間は、2002 年に Linux 2.4.19 で登場しました。長年にわたって、他のタイプも登場しました。
現在、これは、Docker がコンテナーと呼ぶ分離されたワークスペースを構築するために使用しているまさにその機能です。結局のところ、Docker は魔法ではありません。次のように入力すると、デバイス上にすでに存在する名前空間を一覧表示できます。 lsns。
Linux は、最初のリリースからわずか数か月後の 1992 年初頭に GPL に移行しました。
Richard Stallman は 1983 年 9 月 27 日に GNU を発表しました。この計画は完全な Unix 互換システムであり、それを使用できる人には無料で配布されました。トーバルズ氏は、1991 年 8 月の有名な投稿でもその名前を確認しました。彼は自分自身のプロジェクトは趣味であり、「gnu のように大規模で専門的なものにはならない」と述べた。
私が驚いたのは、Linux が GNU のライセンスに基づいて始まったわけではないということです。初期の条件では、お金で売ることはできないと書かれていました。その後、Linux 0.12 のリリース ノートでは、GNU コピーレフトが人々から Torvalds 氏にそのルールを削除するよう求められ、2 月 1 日から発効することが発表されました。 GNU のツールも同様に残っています。ただ走ってください bash –バージョンそして一番最初の行には誇らしげに GNU bash と書かれています。
本当の天才は何を借りるべきかを知っていた
これらの重要な Linux 機能のいくつかを使用すると、オペレーティング システムの世代を生きているような気分になることがあります。この進化と、あるシステムが他のシステムにどのように影響を与えるかを見るのは面白いです。そして、このリストは物語の一部にすぎません。多くのレトロな Unix プラットフォームが、独自の静かな方法で今日私たちが知っている Linux を形作ったからです。
このテーマについてさらに詳しく知りたい方は以下をご覧ください