GCC 1.27(2019 年)のビルド

2026/07/23 4:05

GCC 1.27(2019 年)のビルド

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本文の主な目的は、1988 年の歴史的ツールである GCC 1.27 コンパイラを、現代的な 64 ビット Ubuntu システム上で成功裡に構築・インストールするための読者向けガイドを提供することです。元のバージョンには当時の x86 アーキテクチャへのネイティブサポートはなかったものの、特定の技術的調整によって現在でも動作可能です。手順には、ビルド環境の構成、GDB の互換性問題によりデバッグフォーマットを UNIX/32V SDB から DBX に切り替え、古いコードと新しいハードウェア間の互換性を解決するためにシンボリックリンクを作成するといった内容が含まれます。第 2 段階における重要な検証ステップでは、自己ビルドプロセス中に生成された

cpp
,
gcc
,
cc1
などバイナリが同一であることを確認し、歴史的正確性を保持します。設定完了後、インストールフェーズでは
make install
といった標準コマンドを使用して、必要となるライブラリを
/home/kristerw/compilers/gcc-1.27/bin
などのユーザー定義ディレクトリに配置します。この取り組みは、GCC の特定のアナログな振る舞いに依存する 29 年分のコードベースをコンパイルする必要があるユーザーにとって不可欠です。また、これはコンパイラの進化を研究している研究者や企業が、現代のマシン上でこの正確なソフトウェアスタックを実行し、アーカイブや教育用プロジェクトを行うことを可能にします。Mikhail Maltsev のブログ投稿に記載された手順に従うことで、誰もが古代のコンピューティング史と現在のオペレーティングシステムの間を架橋できます。

本文

GCC 1.27(1988 年リリース)の Ubuntu 64 ビット環境での構築と動作検証

1988 年にリリースされた、x86 CPU をサポートする最初の GCC バージョンである GCC 1.27 を、最新のデスクトップコンピュータで動かすという試みが面白いと感じました。

Mikhail Maltsev 氏による「現代のシステム上で 29 年前のコンパイラを構築し使用する」というブログ記事を参考に、以下の工夫を加えて動作させました。

  • アーキテクチャ対応: 64 ビット系の Ubuntu システム上で動作させるため、パスと
    as
    /
    ld
    のオプションを更新。
  • ヘッダー互換性: 古くなった GCC がシステムヘッダーを理解できない問題を解消。
  • デバッグ形式の調整: UNIX/32V SDB 形式ではなく、DBX デバッグ形式を有効化(Mikhail 氏のパッチに対する多大な修正なしで実現)。

動作検証結果

驚くべきことに、すべての手順が正常に完了し問題なく動作しました。 現代のアセンブラー、リンカ、デバッガーは、GCC 1.27 が生成するコードを完全に処理可能です。

以下のようなコマンドオプションは、現代の GCC と同様の振る舞いを示します:

  • -O
    (最適化)
  • -E
    (プレプロセッサのみ実行)
  • -S
    (アセンブラー出力)
  • -c
    (リンカー入力ファイル生成)
  • -g
    (デバッグ情報)
  • -W
    (警告表示)
  • -pedantic
    (厳密な標準準拠)
  • -fomit-frame-pointer

すべてのオプションはマニュアルページに文書化されています。以下のコマンドを実行すると、フォーマットされたテキストを閲覧できます:

man -l gcc.1

Ubuntu 上で GCC 1.27 を構築する方法

64 ビットの Ubuntu デスクトップ環境(バージョン 16.04)での構築手順です。

1. 前提条件

GCC 1.27 は32 ビットプログラムであるため、システムに 32 ビットコンパイラーとランタイムサポートをインストールする必要があります。

sudo apt install gcc-multilib

2. ソースコードのダウンロードと準備

ソースコードと必要なパッチを取得し、適用します。

  1. ファイルのダウンロード

    wget https://gcc.gnu.org/pub/gcc/old-releases/gcc-1/gcc-1.27.tar.bz2
    wget https://gist.github.com/kristerw/b854b6d285e678452a44a6bcbf7ef86f/raw/gcc-1.27.patch
    
  2. パッチの適用

    tar xf gcc-1.27.tar.bz2
    cd gcc-1.27
    patch -p1 < ../gcc-1.27.patch
    

3. ソースコードの構成設定

コンパイラを正しく動作させるためには、以下の設定ファイルへのシンボリックリンクを作成します:

ln -s config-i386v.h config.h
ln -s tm-i386v.h tm.h
ln -s i386.md md
ln -s output-i386.c aux-output.c

インストール先の指定
必要に応じて

Makefile
bindir
および
libdir
を更新してください。私の設定例:

bindir = /home/kristerw/compilers/gcc-1.27/bin
libdir = /home/kristerw/compilers/gcc-1.27/lib

4. ビルドとインストール

GCC の構築は通常、システム上の既存のコンパイラーを使用して段階的に進めます。

第 1 段階:初期ビルド

既存のコンパイラーを使って最初のバイナリを作成します:

make

第 2 段階:自己ビルド(Stage 1)

新しく構築されたコンパイラーを使って再度ビルドし、互換性を確保します:

make stage1
make CC=stage1/gcc CFLAGS="-O -Bstage1/ -Iinclude"

第 3 段階:再確認ビルド(Stage 2)【オプション】

さらに精度を高めるため、Stage 1 で作ったコンパイラーを使ってもう一度ビルドし、生成されたバイナリが正しく再構築されているか検証します。
もし不一致がある場合、コンパイラが自身を誤ってコンパイルしている可能性があります:

make stage2
make CC=stage2/gcc CFLAGS="-O -Bstage2/ -Iinclude"

# 差分確認コマンド
diff cpp stage2/cpp
diff gcc stage2/gcc
diff cc1 stage2/cc1

インストール

すべてのビルドが完了したら、システムにインストールします:

make install

同じ日のほかのニュース

一覧に戻る →

2026/07/28 7:03

オープンウェイトモデルに関する当社の立場

## Japanese Translation: Anthropic の CEO ダリオ・アモデイは、オープンウェイトの AI モデルに対する全面的な禁止に反対し、同社がそのような制限を支持したことはないと主張している。彼は、危険な能力を持たないオープンウェイトモデルを不可欠な公共財として位置づけ、主な国家安全保障上の懸念として、共産主義中国(CCP)などの権威主義体制が、恒久的な軍事優位や抑圧のために優れた AI を構築しようとするリスクを挙げており、このリスクは副大統領ヴァンスの最近の警告や米国当局による世界的競争力に関する情報評価によって強調されている。彼の二次的な懸念には、サイバー攻撃、生物学的脅威、またはアライメント(調整)失敗への悪用が含まれる。アモデイは、オープンウェイトモデルはガードレールの実行が難しく、リリースされた重み(weights)を回収できないため、閉鎖型モデルよりも高いリスクをもたらすと指摘している。これらの脅威を緩和しつつ有益なイノベーションを維持するため、彼は以下の目標志向戦略を提唱している:中国への高度な半導体および装備の輸出制限、モデルの密輸入や産業規模での蒸留(distillation)操作への取り締まり、そして公開前に十分に能力のあるすべてのモデルに対して安全性テストの実施を義務付ける。彼は、全面的な禁止は効果的でもなく、Anthropic が求める解決策でもないとし、代わりに回収不能なシステムにおけるリスク管理を進めつつ、安全性にコミットしている者にとってのアクセスを維持することを主張している。

2026/07/25 16:55

Go の新しいガベージコレクションがヒープを走査していく様子

## Japanese Translation: Go の新しい Green Tea ゴー・コレクター(v1.26 以降のデフォルト)と C# を比較した評価から得られる主な示唆は、CPU キャッシュ効率とメモリアン断片化の間にある明確なトレードオフである。Green Tea は連続したスパンへの割り当てを最適化することでキャッシュミスが大幅に減少するが、オブジェクトを解放する際に移動やコンパクト化を行うことはできない。その結果、C# の移動式コレクターが積極的に関与してヒープをコンパクト化し OS に散在ページを返すのと異なり、Go は大量の解放後(例:90% のオブジェクトを解放)も未解放オブジェクトがばら撒かれたままとなる。 裸の金属 x86 システムでのテストにより、この断片化は介入なしに持続することが確認された。しかし、開発者は `unsafe` ポインタを使用して残存するオブジェクトを手動でパッケージ化することでこの制限を回避し、実質的にコンパクト化を模倣してシステムリソースを取り戻すことができる。結論として、Go は真の CPU パフォーマンス向上を提供するものの、複雑な回避策なしにヒープをコンパクト化できないという Go の不具合は依然として大きな制約であり、長期的動作を必要とし効率的なメモリ回収を要求するアプリケーションにおいては、C# が優れたアーキテクチャ上の振る舞いを提供することが組織にとって認識すべき点である。

2026/07/28 4:58

HN ランチ:Rise(YC S26)——廃棄物ガスを貴重な化学物質に変える

## Japanese Translation: Rise Reforming は、シカゴ郊外の下水処理施設でパイロットプラントの建設を正式に開始し、2026 年 7 月の稼働を目指しています。2025 年 12 月には 65 万ドルの前種投資を受け、初雇用の Nina Kritikos を擁し、同社は 2026 年 4 月に 1,800 時間以上の連続運転を通じて安定した概念実証結果を達成しました。また、プロジェクトはバイオガス生産者との拘束力のある供給契約および複数の覚書(MOU)を確保しています。 同社の固有技術では、下水処理廠などの発生源から排出される国内の滞留バイオガス(廃棄ガス)をメタノール、ジメチルエーテル(DME)、ジメチルカーボネート(DMC)といったグリーン化学物質に変換します。このアプローチは、化石燃料の採掘・精製・輸送に伴う環境コストを回避する低価格な代替策を提供することで、従来の石油化学製品と直接的に競合しています。主要な革新点は、許可手続きの長期遅延なく特定の施設の要件に合わせて迅速に導入および容易にスケールアップ可能なモジュール式でコンテナサイズの設計にあります。 Rise Reforming は 2026 年 7 月、成長とスケールアップのさらなる加速のために Y Combinator の S26 バッチに参加しました。廃棄物を価値ある化学物質に変えることで、即座の財政的リターンを提供しつつクリーンなエネルギー未来を支援することを目的としています。過去のマイルストーンには、2025 年 5 月に European Aerosols Federation 2025 Start-Up Award を受賞し、George Rose が 776 Foundation から Climate Fellow に選出されたことが含まれます。

GCC 1.27(2019 年)のビルド | そっか~ニュース