WoofWare.PawPrint:決定論的.NETランタイム

2026/06/04 16:32

WoofWare.PawPrint:決定論的.NETランタイム

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

要約

Japanese Translation:

WoofWare.PawPrint は、高度なデバッグおよびメモリアドレス追跡を主に目的とした革新的な決定論的 .NET ランタイムを導入します。速度の最適化を行う標準的なランタイムとは異なり、PawPrint はショートカットを用いずに中間言語(IL)コードを解釈し、.NET 10 の Base Class Library (BCL) を支えるためにのみ JIT 内在関数とネイティブコードに対するシャイミングを行います。この部分的な統合にもかかわらず、現在、BCL 内のネイティブコードは完全には処理できず、モデル化されていない大規模なネイティブ命令量が原因であり、ネイティブサポートが標準化されるまで非生産環境での使用に適していません。

該ランタイムは、

Console.WriteLine
async void Main
Task.Run
、反射、ならびに
Monitor
などの低レベル同期プリミティブを含む主要な操作をサポートします。スケジューリングは、「興味深い」というスレッド順序の探索を最大化する確率的並行性テスト(Probabilistic Concurrency Testing)の変種を使用します。初期試験では、このハネスは決定論的な手法を用いて 6 つの標準的なデータ競合を迅速に特定し(多くの場合、試行シードが数回以内)、そのことが確認されました。

現在、早期版の NuGet パッケージとして利用可能である PawPrint は、メモリアドレスを生の整数ではなくオブジェクト識別子でマークすることで、そのコアな安全性を実現しています。この設計により、.NET のルールに違反しアプリケーションを予測不能にクラッシュさせる不適切な算術エラーを防ぐことができます。ただし、同じ配列内であると既知のポインタに対する算術演算は引き続きサポートされています。プロヴェナンス追跡も包括的であり、各ポインタは対象となるオブジェクト/フィールド/メソッドがわかるようにされており、バイト配列では投影(projection)と生のユーザーデータを区別しています。

今後の開発では、ユーザーが独自のネイティブコードハンドラーを統合できるようにすること、および実行履歴の豊かな内部モデルを作成して、タイムトラベルとデバッグに対する完全な制御を実現することに焦点が置かれます。大規模言語モデル(LLM)は、リファレンス(.NET)、仕様検索(ECMA-335 via Gemini 2 Pro)、コード補完の用途に活用され、2026 年以降には Sonnet 4.6、Claude Opus 4.7、GPT-5.5 などのモデルを開始します。ネイティブコード処理に関するアーキテクチャ上の一つの決定事項は、当初 GPT-5.5 に abdicated(譲渡)され、配列に対してフェイクアドレスを使用するというものであり、後にこれにより、「I am the address of heap object Foo」というマーカに置き換わる完全な手書きの再書き換えが必要となり、.NET はそのような整数値を未定義として定義しているため意図した通りこれらの算術演算が不可能となる事態となりました。複雑なシステムにおける目から鱗となるバグの検出においては強力ですが、ネイティブサポートが標準化されさらに機能が成熟するまで、開発者は現在これを非生産環境に制限して使用する必要があります。

本文

WoofWare.PawPrint の発表:決定論的な .NET 実行環境

WoofWare.PawPrint(初期版)を NuGet に公開しました。PawPrint とは、CHESS(確定した状態の評価)に似た概念を持つ、「決定論的」な .NET 実行環境です。

  • .NET 10
    の基礎クラスライブラリ(BCL)を実行します。
  • IL(中間言語) を解釈的に実行し、BCL 内での JIT 関数やネイティブコードのみを「シャイム(代替実装)」で対応しています。
  • これに頼った近道は一切取りません。

機能範囲

現在以下の処理に対応可能です:

  • Console.WriteLine
    の実行
  • async void Main(string[] args)
    メソッドのサポート
  • ブロックコード
    {...}
    の解釈
  • Task.Run
    の利用
  • リフレクション(動的型情報の取得など)の多様な利用
  • Monitor
    などの低レベル同期プリミティブの動作

「稼働準備」判定の仕組み

6 つの標準的な競合条件を取り上げ、決定論的に検出できることを実証しました。『Deadlock Empire(デッドロック帝国)』をヒントに、「スレッドの交错による既知の不良状態(デッドロックや例外発起)」を検出する形式でテストを行っています。

  • 高い検出率: 私が試したあらゆるテストにおいて、テストハネスはすぐにバグを検出しました。
  • 少ないトライアル: よくあるケースでは、僅か 2 つのトライアルシード(試行用種)だけで結果が得られました。

制限事項:まだ対応できない領域

現状では、そのままお使いいただくと直後に「爆発」する可能性があります。

  • BCL の内部には極めて大容量のネイティブコードが含まれており、PawPrint 内で明示的にモデル化しないと実行できません。

今後の計画

次期リリースでは以下の対応を目指します:

  • ユーザーが独自の実装をプラグインできるようにする。
  • 内蔵される不完全さによる待ち時間を解消する。

全体設計

PawPrint は最終的に、**「タイムトラベルデバッグ」と「履歴への制御」**を可能にすることを目的としています。そのために IL マシンの極めて豊富な内部モデルを維持しています:

  • プロベナンス(起源)の追跡: すべてに施されています。
  • インテリジェントなポインタ: 自身が指し示すオブジェクト/フィールド/メソッドなどの情報を把握します。
  • バイト配列の区別: 「フォオというオブジェクトからの生/raw バイトへの投影」か、「ユーザーから渡された単なる一連のバイト」かを識別します。
  • 演算結果の識別: 「生整数の合計」「同一配列内のポインタ間の差」などの種類を識別します。

LLM(大規模言語モデル)の利用について

  • 当初は独自発想で手作業から始めました。一部で Sonnet 4.6 が参考情報として利用されました。
  • ECMA-335 の仕様書に対しては、Gemini 2 Pro を使ってフージー検索(あいまいな単語一致)を行って利用しました。
  • 2026 年以降、Claude Opus 4.6/7GPT-5.5 を用いてコードを「完成形」へと仕上げました。
    • これにより開発が数年単位で短縮されました(驚異的な加速要因)。
    • 代償として、コードには多少の "Claude らしい雰囲気" が滲み出しました。
  • .NET 10
    という参照実装と
    ECMA-335
    という仕様書が存在するため、LLM の力を借りやすいプロジェクトです。

ボットが犯したエラーと修正

アーキテクチャ的な方向性を維持する必要があったため、複雑な判断を GPT に丸投げしたのは唯一のケースでしたが、結局は全てを手作業で書き直す惨劇となりました。

1. その判断(起因)

  • 背景: ネイティブコードや
    unsafe cast
    は実際のバイト配列を使って結果を計算する必要があります。
  • 課題: BCL には多くの
    Unsafe.As
    コールが含まれており、プロベナンス追跡されたポインタを平坦なバイト配列経由で「洗う」ことが極めて困難です。
  • 信念: PawPrint でプロベナンスの追跡を徹底的に行うべきだ

2. その間違い(GPT の提案)

  • GPT-5.5 が、配列を記憶領域の特定の位置にあるものとして表す方法を選びました。
  • 手法: ある範囲内の偽りのアドレスを割り当てる。
  • 問題点:
    • 時間が経つにつれて扱いづらくなり、演算処理が煩雑化しました。
    • 配列を「記憶領域内での位置を示す生整数」として扱うことで、それまでのプロベナンス情報を失いてしまいました。

3. その修正(最終方針)

  • 対応策: 上記のアプローチを取り払い、代わりに合成された**「フォオというヒープオブジェクトのアドレス」**という意味を持つマーカー(整数)を置き換えました。
  • 動作確認: このようなオブジェクトに対する演算は通常 PawPrint をクラッシュさせますが、.NET の仕様上これらの整数値自体が定義されていないため構いません
  • 保持機能: 「同一配列内にあるポインタに対して演算を行う」ための特別なサポート機能は保持しています。

同じ日のほかのニュース

一覧に戻る →

2026/06/07 4:17

Ntsc-rs ~アナログテレビおよびVHS のアーティファクトを模倣するオープンソースのビデオエミュレーター~

## 日本語翻訳: ntsc-rs は、単純なカラーフィルターではなく、実際の送信符号化の原理に基づいた高度なアルゴリズムを使用して、ヴィンテージ NTSC テレビと VHS テープのアートファクトを本物らしく再現する無料のオープンソースツールです。マルチスレッドおよび SIMD 加速を実現した Rust で構築されており、超標準解像度でもリアルタイムで動画を処理し、ntscQT といった旧来のツールよりも優れたパフォーマンスを発揮します。そのアルゴリズムは composite-video-simulator、zhuker/ntsc、および ntscQT で開発されたものを採用しています。独立したアプリケーション、ウェブプラットフォーム、または Adobe After Effects、Premiere Pro、DaVinci Resolve、Hitfilm、Vegas(すべての OpenFX ソフトウェアと互換性あり)用のプラグインとして利用可能であり、歴史的正确性と現代の効率性を兼ね備えており、クリエイターがリアルなアナログの美学を現代的なワークフローに直接統合できるよう支援します。

2026/06/07 3:35

Meta、AI チャットボットの悪用によるInstagramアカウントの乗っ取りが数千件あったと確認

## Japanese Translation: Metaは、ハッカーがAIチャットボットのバグを悪用し、Instagramのアカウント20,000個以上を乗っ取ったという重大なセキュリティ不備を公表しました。このシステムは、パスワードリセット用として設計されたものの、誤って認証コードを受け取るメールアドレスを登録済みのアカウント所有者に限定せず、任意のメールアドレスに入力した者に送信してしまっていました。これにより、無許可ユーザーが数日以内にして完全なアクセス権を引き渡すことができました。脆弱性は二段階認証を行っていないアカウントを狙い、4月中旬から最近まで活性していました。 この侵害事件は、人工知能(AI)に対する大幅な投資が行われている時期に発生しており、人員削減を踏まえ、イノベーションとセキュリティのバランスに関する懸念が浮上しています。Metaはこの乗っ取られたボットを停止し、コードを修正済みですが、同社は直接メッセージやプロフィール情報など機密データの暴露があったことを認めています。メイン州在住の30人が直接通知を受けたものの、同社は犯罪者がアクセスした個人データ総量について現在把握していないと確認しています。専門家は、この事件がAIの急速な展開に伴う重大なリスクを浮き彫りにしているとし、ユーザーに対して即時にパスワードのリセットと、認証済みチャネル経由での再認証を行ってアカウントのセキュリティを回復するよう求めており、またMetaは同様の再発を防ぐため、現在自社プラットフォーム上の他のチャットボットの調査を進めています。

2026/06/06 23:59

Zeroserve:eBPF を用いてスクリプト可能なゼロ設定 Web サーバー

## 日本語訳: ゼロサーブ(Zeroserve)は、最小限のセットアップで静的ファイルを配信できる軽量かつ高性能な HTTPS サーバーです。各サイトごとに単一のタールアーカイブのみを用いて動作を開始できます。改行・認証・レート制限・リバースプロキシなどの機能を実装するサンドボックス化されたミドルウェアとしてユーザー空間で動作する eBPF プログラムをサポートしています。パフォーマンスの主な特徴は、io_uring I/O インターフェースと即時コンパイル(Just-In-Time コンパイル)された eBPF スクリプトによる卓越したシングルスレッド速度です。Ryzen 7 3700X ベンチマークでは、小規模ファイルにおいて nginx を約 17% 上回り、Caddy よりも大幅に高性能であることが示されました。そのアーキテクチャはバイナリコードを共有する複数プロセスの並列実行によりスケールし、各インスタンスはシングルスレッドモデルの monoio ランタイムを使用します。BoringSSL を用いた高度な TLS 機能もサポートしており、TLS 1.3、暗号化された ClientHello(ECH)、SNI サーティフィケート選択、JA4 フィンガープリント、および ECH リレーモードを含みます。運用上の利点として、原子スワップ(SIGHUP)によるホットリロードやダウンタイムなしの瞬時の構成更新が可能です。eBPF プログラミングモデルは、ヘッダー操作やテンプレート置換を行うために共有されるパーリクエストメタデータマップを持つ、ファイル名順ソートされたスクリプトチェーンを使用します。ヘルパー関数はリクエスト検査・変異、暗号処理(SHA-256、HMAC、base64)、JSON 処理、トークンバケット方式のレート制限、AWS SigV4、および XChaCha20-Poly1305 クッキーを用いた OIDC ログインをカバーします。デフォルト設定では eBPF インスタンスあたりのメモリ使用量の上限が 256 KB で、他の接続を止めることを防ぐためにプリエンプト間隔は 2 ms に設定されています。この間隔を増やすことで動的レスポンスのスループットをさらに向上させることが可能です。リバースプロキシとしての性能では、プーリングされた io_uring コネクションを用いて小規模応答において最先端の速度を発揮し、大規模ボディにおいては nginx と競合するレベルのパフォーマンスを示します。全体として、このサーバーは Lua や Perl などの遅いインタプリターに依存せず、ユーザー空間内で直接低レイテンシーとより細かいセキュリティ制御を提供します。

WoofWare.PawPrint:決定論的.NETランタイム | そっか~ニュース