驚くべき場所で発見されたバイトコード仮想マシン(2024)

2026/05/22 23:12

驚くべき場所で発見されたバイトコード仮想マシン(2024)

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

要約

Japanese Translation:

分野横断的な現代システム(データベース、グラフィック、カーネルネットワーキングなど)は、柔軟性、安全性、パフォーマンスのバランスを取るために、しばしばバイトコード仮想機械を採用している。Richard Hipp は、SQLite が SQL 実行のためにこのような VM を使用していると指摘している。Linux カーネルにおいて、eBPF は 1993 年にスタックベースの Berkeley パケットフィルタとして始まり、レジスタ豊富なシステムへと進化し、2011 年に JIT コンパイラが追加され、2014 年にはレジスタ数の増加、ハードウェア対応指令の実装、64 ビットレジスタの導入、カーネル関数呼び出しの許可といった大幅な拡張が行われた。GDB や LLDB のようなデバッグツールチェーンでは、エージェント上でスタックベースのインタプリタを用いて DWARF 式を評価し、これらの式はオペレーションのストリーム(リテラル演算子を持つオpcodes)として符号化されており、GDB は任意の C 式を目標機上で完全なシンボリックエバリュエータなしで実行できる単純なバイトコード言語(約四十種類の opcode)に変換する。圧縮分野では、WinRAR の所有権のある RAR フォーマットには、単純な x86 風の仮想機械「RarVM」が含まれており、研究家である Tavis Ormandy はそれが 8 つの命名レジスタ(r0–r7)を使用し、可逆的なデータ変換を適用していることを見出した。このうち r7 はプッシュ/コール/ポップ演算のためのスタックポインタとして機能し、標準的な x86 スタックとは異なり自由に設定できる。グラフィック分野では、インタプリタが直接 GPU 上で動作する:一方のアプローチはモデル固有シェーダをコンパイルすることなく暗黙的曲面の算術式を評価し(再帰レベルごとに式のサイズを削減)、2017 年の「Ubershaders」手法ではゲーム設定が急変する際のフタター(画面カクつき)を回避するために、インタプリタを柔軟なシェーダとしてレンダリングパイプラインのエミュレーションを実装している。計算を超えた分野である字体表示においては、TrueType がグリフの表示およびヒント用に 200 指令を超えるバイトコード的な集合を使用しており、PostScript はテキストおよびバイナリエンコーディングで利用可能な強力なスタックベースプログラミング言語を定義している。これらの例は、中間表現とインタプリタによる実行が、安全性や適応性を損なうことなく多様な最適化を可能にすることを示している。

本文

一般目的の言語ではない「バイトコード VM」が登場する意外な分野

リチャード・ヒップ氏が Twitter 回答で言及したように、SQLite は SQL 実行のために**バイトコード VM(仮想マシン)**を採用しています。 多くの人は、バイトコード VM を JavaScript や Python といった汎用プログラミング言語と結びつけがちですが、実際には思わぬ分野でも活躍しています。

以下に具体的な事例をまとめました。

eBPF:カーネル内部の拡張メカニズム

Linux カーネルには、**eBPF(Extended Berkeley Packet Filter)**という非常に興味深い仕組みが存在します。これは登録型(レジスタ型)の VM で、汎用レジスタ 10 つ、多くの opcode を備えています。

歴史と進化

  • 起源: 1993 年の USENIX 論文で説明された「Berkeley Packet Filter」。ネットワークモニターがユーザ空間プロセスとして動作するため、不要なパケットを早期に破棄する仕組みとして導入されました。BSD パケットフィルターは従来の設計より最大 20 倍高速でした。
  • 初期実装: Linux 初期の実装は簡素化されており、汎用レジスタ 2 つ、スウィッチ型インタープリター、後方分岐なしという特徴を持っていました。
  • 進化の過程:
    • 2011 年: x86-64 アーキテクチャ向けの JIT コンパイラーが追加されました。
    • 2012 年: ネットワーク以外の利用用途が登場しました。
    • 2014 年頃: 「カーネル内普遍仮想マシン」へと大幅進化。
      • レジスタ数を 2 つから10 つに増加。
      • 実装ハードウェアの指令に近い新しい命令の追加。
      • 64 ビットレジスタの導入。
      • カーネル関数セットへの呼び出し可能化。

DWARF 表現式:コンパイル済みバイナリのデバッグ情報

GCC や LLVM などのコンパイラが使用し、コンパイルされたバイナリにデバッグ情報を埋め込む形式です。

需要と課題

void add_two(int x) {
    int ans = x + 2;
    return ans + 2; // Oops!
}

デバッガーで

ans
変数の値を確認したい場合、コンパイラや最適化の種類によっては**どこに存在するか(レジスタかスタックか、あるいは消去されているか)**が不透明になりやすいです。

解決策:表現式言語

コンパイラに対して「ローカル変数の値を計算するための指示(表現式)」を指定します。DWARF 仕様にはそのための言語が含まれています。

DWARF 表現式は、値を計算する方法や位置を指定します。

  • 値のスタックに対して操作を行う DWARF オペレーションに基づいて記述されます。
  • 各オペアンドが opcode に続いてゼロ個以上のリテラルオペランドからなる一連の操作としてエンコードされます。

評価の実行者: GDB や LLDB などのデバッガーが、DWARF 表現式用のスウィッチ型インタープリターを搭載してこれらを実際に評価しています。

GDB Agent の表現式

GDB 自体も別のバイトコードインタープリターを実装しています。

仕組みと用途

  • trace
    コマンドや
    collect
    コマンドを使用すると、特定地点での任意の表現式の評価を指定できます。
  • リモートデバッグ時: ターゲット上に動作する GDB アージェントコードが自前で値を計算します。
  • 通信プロトコル: ソース言語側の複雑な表現式をそのまま送らず、単純化されたバイトコード言語に変換してアージェントへ送信・実行させます。

バイトコードの特性

  • シンプルさ: 約 40 種類の opcode を有し、C の演算子(加算、減算、シフトなど)やメモリアドレス参照操作に対応します。
  • 軽量性: マシン値(整数や浮動小数点数)のみを扱います。型情報やシンボル情報は不要です。
  • 実装効率: 内部データ構造がシンプルであり、各バイトコードを実装するのに数命令のネイティブマシン指令で十分です。
  • 適用性: メモリ使用量や処理時間を厳格に制限でき、リアルタイムアプリケーションでのデバッグエージェントに適しています。

WinRAR:圧縮率向上のための仮想マシン

Google の脆弱性情報研究者である Tavis Ormandy 氏が指摘したように、WinRAR は独自のファイル形式を採用しており、内部にデータ変換用のバイトコードを含むことがありました。

  • RarVM: 簡易なx86 風の仮想マシンです。
    • 目的: 入力を反転可能な変換(フィルタ)を通じて冗長性を高め、結果として圧縮効率を向上させること。
  • アーキテクチャ:
    • 8 つの名付けられたレジスタ(
      r0
      から
      r7
      )。
    • r7
      はスタックポインタとして使用されます(スタック操作時のみ)。
    • x86 と同様、レジスタ値への制限はありますが、スタック操作中はアドレス空間内へ調整されます。

GPU 上のフレキシブルなシェーダー

動的な形状定義において、モデル固有のプログラムを逐次コンパイルするのではなく、汎用的なインタープリターとエンコーディング形式を採用するアプローチです。

課題解決策

  • 再コンパイルの問題: 数万もの特殊化プログラムにつき一フレームごとにシェーダーを再コンパイルするのは不可能です。
  • Uber シェーダー方式:
    • ゲーム起動時に**巨大で柔軟な「Uber シェーダー」**をコンパイルします。
    • 描画時には、自身を構成して処理を行い、新しいシェーダーの追加なしで完了します。
    • これにより、シェーダーコンパイルによるスタッター(遅延)を回避でき、コンパイルそのものを不要にすることで「不可能な問題」を解決します。

その他:バイトコード VM が活用されている分野

  • TrueType フォント: グリフ描画およびヒントリング用に200 以上の指令を含んでいます。
  • PostScript: ページ記述言語であるだけでなく、比較的強力なスタック型プログラミング言語としても機能します。
    • プレーンテキスト形式で書けますが、仕様にはバイナリエンコーディング(バイトコード)も含まれています。
    • レンダラーによっては必ずしもバイトコード経由で実行しない場合もありますが、内部の処理機構としては存在します。

同じ日のほかのニュース

一覧に戻る →

2026/05/26 2:45

Exit IP VPN サーバー対策の展開

## 日本語訳: 2026 年 5 月 25 日付で、12 つの特定サーバー識別子への新しい緩和措置の適用を含む重要な運用上のアップデートが確認されました。この措置は、北米、ヨーロッパ、オセアニアを含む主要なグローバル地域にわたるインフラに影響します。影響を受けたサーバーは、以下の通り明示的にリストされています:au-mel-wg-402, au-syd-wg-001, ca-mtr-wg-302, de-fra-wg-103, fi-hel-wg-201, fr-par-wg-101, ie-dub-wg-101, no-osl-wg-101, se-sto-wg-208, us-dal-wg-701, us-lax-wg-002, us-nyc-wg-601, us-slc-wg-303。この実装は、内部での判断を踏まえたこれらのエンドポイントの状態における決定的な変化を表します。このアナウンスメントでは、識別子のリストとアップデートの日付のみが提供されており、脅威の具体的な性質、先行文脈、またはエンドユーザーおよび産業エンティティに対する直接的な影響について言及していません。したがって、この変更の原因や以降のタイムラインに関するさらなる説明はまだ発表されていません。 ## 原文: **Improved Summary:** Effective May 25, 2026, a significant operational update has been confirmed involving the application of a new mitigation to twelve specific server identifiers. This action impacts infrastructure across major global regions, including North America, Europe, and Oceania. The affected servers are explicitly listed as: au-mel-wg-402, au-syd-wg-001, ca-mtr-wg-302, de-fra-wg-103, fi-hel-wg-201, fr-par-wg-101, ie-dub-wg-101, no-osl-wg-101, se-sto-wg-208, us-dal-wg-701, us-lax-wg-002, us-nyc-wg-601, and us-slc-wg-303. This implementation marks a definitive shift in the status of these endpoints following an internal decision. The announcement provides only the list of identifiers and the update date; it does not elaborate on the specific nature of the threat, prior context, or direct impacts on end-users and industry entities. Consequently, further clarification regarding the reasons for this change or subsequent timelines has not yet been released.

2026/05/26 4:37

ノルウェーのHuaweiフラッシュストレージによる2ペタバイトとLLMトレーニング

## 日本語訳: ノルウェー国立図書館は、地元のノルウェー語に対する商用ソリューションの深刻な不足に対応するため、自らのデジタルアーカイブにのみ基づいて訓練された主権性の高い大規模言語モデルを起動する予定である。このプロジェクトは文化省によって推進され、IT 責任者マリウス・フスネス氏の率いるものであり、私企業の手に負えない著作権保護付き新聞への図書館特有の法的アクセスを活用して、約 60 ピタバイトのデジタル化された遺産(現在は 3-2-1 保存形式で保管されている)をこの AI に訓練している。 技術的なアーキテクチャでは、3 つの異なるシステムをオーケストレーションするものであり、初期処理段階には Nvidia DGX H200 クラスターと华为(Huawei)OceanStor Dorado フルフラッシュアレイ(高速フラッシュ容量 2 PB を提供)を用い、その後、最終的な訓練は国立スーパーコンピューター Sigma2 Olivia で行われる。主要なボトルネックは計算能力ではなく、データの品質、クリーニング、パイプラインのスループットであり、これは AI パイプラインの低遅延要求と大規模かつ高遅延の保存アーカイブとの間の遅延不一致によって複雑化している。さらに、使用制御のためのガバナンス枠組みの確立や標準的な評価ツールの利用という課題にも直面している。このイニシアチブにより、ノルウェーは外国のテクノロジー大手に依存せずに技術的未来を確保することができ、他の英語圏外における国々が主権性の高い AI 基盤を求めるためのモデルとして挙げられている戦略となっている。

2026/05/26 3:19

カリフォルニア州、Linuxの年齢認証免除を法改正で検討へ:抗議運動を受け

## Japanese Translation: カリフォルニア州の法律家は、2026年2月11日にデジタル年代保証法(Digital Age Assurance Act)からほとんどのオープンソースオペレーティングシステムを除外することを目的としたアセンブリビル1856号(AB 1856)を導入した後、厳格な年齢検証要件から撤退する方針を検討しています。AB 1856は、同州の以前のパックであるアセンブリビル1043号(2025年後期に可決)を改正し、2027年1月1日までに年齢検証の手続を個々のウェブサイトやアプリからオペレーティングシステムレベルへ移行することを求めていました。AB 1043の下では、オペレーティングシステムはセットアップ時にユーザーの生年月日を収集し、アプリおよびストアに対して「年齢層」(例:「13歳未満」、「18歳以上」)をシグナル送信することが義務付けられていました。提案されている改正案では、「オペレーティングシステム提供者」は、ソフトウェアのコピー、再配布、修改を可能にするライセンスの下でソフトウェアを配布する者を含まないと定義しています。この定義により、Debian、Fedora、Ubuntu、Arch Linux、Mintなど主流のLinuxディストリビューションが遵守要件から除外され、Electronic Frontier Foundationなどのプライバシー擁護者や、無限にフォーク可能なプロジェクトに対しては元の規則が侵襲的かつ実行不可能であるという懸念に対処しました。同法案は元の法的措置を廃止するものではありません。商用プラットフォームでプロプライエタリなアプリエコシステムを持つもの(ValveのSteamストアに紐づく特定のSteamOSバージョンなど)も引き続き審査の対象となる可能性があります。アセンブリメンバーBuffy Wicksによって提出された最新版は2026年5月18日付けのものであり、2026年5月19日に2回目に朗読され、3回目の朗読に付議されるよう命じられ、現在、委員会での審査が予定されている6月の間に立法機構を通過中としています。