
2026/11/04 1:10
Djgpp の歴史
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
DJGPP は、計算機技術の歴史において決定的な進歩を成し遂げました。当初は MS-DOS 向けの限られた GCC ポートであったものが、16 ビットハードウェア上で複雑なコードを実行可能な堅牢な GNU プログラミングプラットフォームへと変貌しました。プロジェクトは、リチャード・ストールマンが GCC を MS-DOS に移植できないと発言したことから 1989 年頃に「djgcc」として開始され、著者は ISC Unix システム上で動作する 386/16 コンピュータを用いて、独自のカスタムシステムコール置換と Phar Lap のエクステンダー向けリンカーを開発し、プロジェクトを構築しました。深刻なメモリ制約(具体的には物理 RAM の不足と、当時まだ仮想メモリをサポートしていなかった Phar Lap のエクステンダー)に対処するため、Go32 レイヤーが作成されました。初期ファイルとして control.c、mswitch.s、paging.c、valloc.c などを使用しています。標準ライブラリの基礎には、BSD libc.a を移植したものと独自の実行例が組み合わされており、ヘッダーファイルは g++ 1.37 のインクルードから導出されています。
プロジェクトは、Borland などの商業用コンパイラへの依存を脱し、完全な自己ブートストラップ化(Version 2)に成功しました。この Version 2 は、オリジナルの Go32 を構築するために Borland コンパイラが必要だったことから、Cygnus によって開始されました。取り組みの一環として、CWSDPMI(Charles Sandmann 氏)を介して DPMI に依存する 16 ビットスタブを生成するアセンブラ「djasm」の記述も含まれます。C++ サポートが追加されたことで名称は「djgcc」から「djgpp」に変更され、現在ではおそらく「DJ の GNU プログラミングプラットフォーム」を意味すると考えられています。
主要なマイナーバージョンリリースには、1.03(コピーレフト規則導入前のシェアウェア)、1.05(商業的に入手可能になった)、1.06(VCPI が追加された)、1.10(DPMI が追加された)、および 1.11(DPMIEMU が追加された)があります。Version 2.00 は 1996 年 2 月 5 日に、Version 2.01 は 1996 年 10 月 19 日に、Version 2.02 は 1998 年 12 月 6 日にリリースされました。DJGPP を使用して書き直されたか開発されたサードパーティ製アプリケーションには、Quake、Info-Zip、GhostScript、Executor/DOS、WatTCP、Xemu、DESQview/X の開発者キットなどがあります。制限のある 16 ビットアーキテクチャと高度なプログラミングニーズのギャップを架橋した DJGPP は、1990 年代末まで重要なソフトウェアアプリケーションの継続的な保守を可能にし、老朽化した技術の寿命を巧みな工学により延長する方法を示しました。
本文
DJGPP の歴史と概要
⚠️ 表記上の注意
「DJGPP」という用語は以下のルールに従って表記してください。
- 全て大文字(
):正式な呼称です。DJGPP - 全て小文字(
):一般的な参照用として使用されます。djgpp - ❌ 禁止: 大小混在(
)、タイプミス(Djgpp
、dgjpp
)は正しくありません。gjgpp
📜 はじめの物語
プロジェクトの発端(1989 年頃)
- 誕生のきっかけ: Data General 勤務中の著者が NNEUUG の会議でリチャード・ストールマン氏に、「FSF は GNU コードを MS-DOS へ移植する予定はあるか?」と尋ねたことが始まりです。
- 当時の目標:PC 用32 ビット OSの開発。
- 当初の反応: Stallman 氏は「gcc が大きすぎるため、16 ビットの MS-DOS 上での実行は不可能」と回答しました。
- 著者の決意: この言葉が新たな挑戦となり、すぐにプロジェクトが開始されました。
初期開発と GCC 1.35
- 構築環境: gcc バージョン 1.35 を ISC Unix(386/16)上でビルドしました。
- システムコールを独自実装し、ISC の
とリンカしました。libc.a - Phar Lap のエクステンダーにより、生成されたバイナリを32 ビット EXEに変換する専用プログラムを作成しました。
- システムコールを独自実装し、ISC の
- 成果: これにより、MS-DOS で動作する最初の gcc が完成しました。
Go32 エクステンダーの開発
- 背景: Phar Lap 社は仮想メモリ技術を知らず、gcc の再コンパイルに必要な物理メモリも確保できていませんでした。
- 解決策: 仮想メモリ機能を付加できるGo32エクステンダーを作成しました。
- 初期ファイル例:
,control.c
,mswitch.s
,paging.c
など。valloc.c
- 初期ファイル例:
- リリース: この仕組みを動作させた gcc 1.37が、dos プラットフォーム上で構築された最初のバージョンとしてリリースされました。
- 著者は現在も同プロジェクトのソースコード(32 ビット OS 開発用)を保存し続け、プロジェクトは継続中です。
ライブラリとヘッダー
- 移植: インターネットより入手した最新の BSD ソースから
を MS-DOS へ移植しました。libc.a- この移植版および独自ルーチンが、djgpp の標準ライブラリの基盤となりました。
- ヘッダーファイル:
に付随したオリジナルのg++ 1.37
をベースに作成。g++-includes- ※ライブラリとヘッダーが完全に一致しない場合があります。
バージョン 1.03〜1.11 の展開
- バージョン 1.03: 広く知られるようになった最初のバージョン(シェアウェアカタログで入手可能)。
- 注意: GNU のコピレフト条件適用以前のバージョンのため、無断販売は違法です。
- バージョン名変更: C++ サポート追加を機に、「djgcc」から**「djgpp」**へと改名されました。
- ニュアンス変化: 「DJ 氏の G++」→「DJ 氏の GNU プログラミングプラットフォーム」。
- 主要なリリースマイルストーン:
- 1.05: 商業的に入手可能となった初期バージョンの一つ。
- 1.06: VCPI の追加。
- 1.10: DPMI の追加。
- 1.11: DPMIEMU(バージョン 2 への第一歩)の追加。
- GNU Compiler Binary CD-ROM や多数のプログラミング雑誌/CD-ROM に採用されました。
🚀 バージョン 2 の誕生と進化
開発背景:自己ブートストラップ化
- 問題点: Go32 を構築するには Borland コンパイラが必要であり、「djgpp で自身をコンパイルする(自己ブートストラップ)」ことはできませんでした。
- 要望: DJGPP の主要利用者を務める Cygnus 社から、自己ブートストラップ可能なバージョンの要望が出されました。
技術的転換点
- djasm の記述: 16 ビットのスタブを生成できるアセンブラ(djasm)を開発し、自己ブートストラップを実現しました。
- この手法は DPMI に依存するため、従来の「あらゆる環境で動作させる」というポリシーからの逸脱となります。
- CWSDPMI の役割: 旧来の Go32 は子製品 CWSDPMI(チャールズ・サンドマン製)を通じて DPMI サービスを提供しており、今後 djgpp 付帯で出荷される予定です。
- 将来の展望:
- DPMI サーバー自体が 32 ビット gcc コードと 16 ビット djasm コードを組み合わせた実装へ移行。
- gcc が将来的に 16 ビットコード生成をサポートすれば、それだけで実装が可能になる見込みです。
サードパーティ製ソフトウェアの活用
多くのアプリケーションが 16 ビットの限界を超えつつあり、djgpp の 32 ビット環境を活用した再書き換えが進んでいます。
代表的なプロジェクト(一部は現在も開発中):
- ゲーム・エンターテインメント: Quake, Xemu
- ユーティリティ: Info-Zip, Executor/DOS, WatTCP
- 描画システム: GhostScript
- その他: DESQview/X の開発者キット、世界各地のデータ処理プログラム等。
📅 現在の状況とリリース履歴
バージョン 2.00 から現在までの主要リリーススケジュールです。
| バージョン | リリース日 | 概要 |
|---|---|---|
| djgpp 2.00 | 1996 年 2 月 5 日 | 約 2 年以上の開発期間を経てリリース。 |
| djgpp 2.01 | 1996 年 10 月 19 日 | パッチ版として出荷。 |
| djgpp 2.02 | 1998 年 12 月 6 日 | より安定したバージョンとして出荷。 |