Upgrade to Pro — share decks privately, control downloads, hide ads and more …

37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022

37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022

関西オープンフォーラム KOF2022 の「BSDなひととき」のセミナーで発表した『37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話』のスライドです

Izumi Tsutsui

November 12, 2022
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. 37年前の Sun 3/60 のために 最新の NetBSD と 最新の X.org を

    メンテする話 関西オープンフォーラム 2022 2年10か月ぶり 謎マシン実機展示記念 Izumi Tsutsui [email protected] Twitter: @tsutsuii Mastodon: @[email protected]
  2. Sun 3/60  1985年発表 PC-8801mkIISR が出た年。まだ 8bit が全盛の時代 CPU: Motorola

    MC68020 20MHz RAM: 4MB 〜 最大 24MB (!) Video: 1152x900 白黒 or 256色 Device:SCSI, 10BASE-2/5 Ethernet OS: SunOS 4.1.1 までサポート ちなみに SONY NEWS が出たのは 1987年
  3. 1980年後半の Sun  今は亡き Sun の最盛期 • バークレーBSD開発者 Bill Joy氏の参画

    • NFS, NIS といったネットワーク機構 • 日本でも大学や企業に多数採用 アスキー出版局「サン・マイクロシステムズ」前書きより サン・マイクロシステムズの物語は、80年代でもっとも 印象的な成功物語のひとつとして登場した。そしていまや 90年代。サンの強運は長期にわたり、その勢いは少しの 衰えも見せていない。(後略)
  4. わたしと Sun3/60  NetBSDの発展とともに • 1992年頃に大学サークルで購入 • 本体, CRT, HDD,

    QICテープ 一式 20万円 • 「386BSDでは力不足だから」と導入 →NetBSD に ypserv もなかった時代 • 1995年頃、Pentiumが出て NetBSDも 安定してくると完全に時代遅れに
  5. わたしと Sun3/60  初めての 非x86 NetBSD 誰も使わないのでいろいろ遊ぶ • X端末解説でネットワークブートを知る •

    SunOSで NetBSD/sun3 カーネルビルド →なんかカーネルメッセージ出たよ! • ある時 SunOS の HDDが死亡 → NetBSD/sun3 1.1 をトライ。動く! • XFree86サーバーのパッチ投げたり Sun3/80 の NetBSD/sun3x を試したり
  6. その後の Sun3  またいつか、と思いながら20年 • その後 Sun3/80 をもらう • Sun3x

    の pmap を直したり 2011年のOSC京都で展示したり • Sun3/60は「いつかまた欲しいな〜」 →そのつぶやきが命取り
  7. NetBSDのXサポート  XFree86 3.x という時代 • NetBSD 1.2 (1996年)までは XFree86

    を自前ビルド ➔当時はまだクロスビルド環境がなくて Sun3でも自力でビルドしてました • NetBSD 1.3 (1998年)で XFree 3.2 のソース を NetBSD本体に取り込み ➔ソース一式が取り込まれただけで、 ビルドはまだ個別にやっていたような……
  8. Xのビルド方式  “make World” • 展開するとトップディレクトリが “xc” • そこで “make

    World” すると一式ビルド • xc/config/cf 以下に OS別設定ファイル • NetBSD.cf に NetBSDの各機種別の設定 • Imakefile : Makefile 生成用ファイル • imake(1) : 機種別 Makefile 生成コマンド
  9. Xのクロスビルド対応  NetBSDといえばクロスビルド環境 • カーネルその他のリリースビルドの クロスビルド対応は NetBSD 1.6(2002年) から ➔詳細はOSC2012北海道セミナー資料参照

    http://www.ceres.dti.ne.jp/tsutsui/osc12do/NetBSD-cross-liveimage.html • Xサーバー含むX環境のクロスビルドは 2003年頃 NetBSD 2.0から対応? いまいち覚えていない
  10. NetBSDのXクロスビルド  NetBSDだけなら決め打ちが可能 • xc/config/cf や imake は使わない • src/x11

    または src/external 以下に NetBSD 専用 Makefile を用意して 自力で設定を書く • Makefile が xsrc 以下のソースを参照 • ドキュメントがほとんどない(?)ので、 自力で各 Makefile を読み解く必要がある • xsrc/xc は XFree 3.2 で X11R6.1ベース • xsrc/xfree/xc は XFree 4.x で X11R6.4 ベース • xsrc/external/mit がおおむね X.org で X11R7 ベース
  11. Xserverの構造 「Solaris Xサーバーの概要」より https://docs.oracle.com/cd/E19455-01/806-2735/6jbubqoec/index.html • デバイス独立層 (DIX) - クライアント要求のディスパッチ、イベント待ち行列の管理、クライ アントへのイベント分配、表示用データ構造の管理を行います。この層には、グラフィックス

    ハードウェア、入力デバイス、またはホストオペレーティングシステムに依存しない機能が含 まれます。 • デバイス依存層 (DDX) - ピックスマップ、クリッピング処理用領域、カラーマップ、画面、 フォント、グラフィックスコンテキストを生成し、操作します。また、DDX 層は入力デバイス からイベントを収集し、DIX 層に渡します。この層には、サーバーで使用するグラフィックス ハードウェアと入力デバイスに依存するルーチンが入っています。 • オペレーティングシステム層 (OS) - クライアント接続と接続認証機構を管理し、メモリの割り 当て、解放用ルーチンを提供します。OS 層には、ホストのオペレーティングシステムに依存す る機能が入っています。
  12. Xserverの構造 「Solaris Xサーバーの概要」より https://docs.oracle.com/cd/E19455-01/806-2735/6jbubqoec/index.html • デバイス独立層 (DIX) - クライアント要求のディスパッチ、イベント待ち行列の管理、クライ アントへのイベント分配、表示用データ構造の管理を行います。この層には、グラフィックス

    ハードウェア、入力デバイス、またはホストオペレーティングシステムに依存しない機能が含 まれます。 • デバイス依存層 (DDX) - ピックスマップ、クリッピング処理用領域、カラーマップ、画面、 フォント、グラフィックスコンテキストを生成し、操作します。また、DDX 層は入力デバイス からイベントを収集し、DIX 層に渡します。この層には、サーバーで使用するグラフィックス ハードウェアと入力デバイスに依存するルーチンが入っています。 • オペレーティングシステム層 (OS) - クライアント接続と接続認証機構を管理し、メモリの割り 当て、解放用ルーチンを提供します。OS 層には、ホストのオペレーティングシステムに依存す る機能が入っています。
  13. Xserverの構造  どこかで見たような構造 • DIX層: デバイス独立層 Device Independent X •

    Xクライアントとの通信 • イベント処理 • 表示用データ構造管理 • DDX層: デバイス依存層 Device Dependent X • VRAM構造に応じたデータ処理・カラー処理 • 表示アクセラレータ処理 • キーボード入力、マウス入力 等
  14. 参考: NetBSD MI/MD構造 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 機種共通(MI)

    デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい?
  15. OSとXserverの関係 デバイス独立(DIX)層 Xクライアントとの通信 イベント処理 表示用データ構造管理 キーボード デバイス依存(DDX)層 DDXキーボード 入力ドライバ キーイベント処理

    DDXマウス 入力ドライバ マウスイベント処理 DDXビデオ ドライバ 描画・パレット制御 デバイスドライバ マウス ビデオカード Xserver /dev/cgsix /dev/mouse /dev/kbd 物理 デバイス OS カーネル
  16. OSとXserverの関係  入力デバイス階層 • キーボード固有入力データ →OSのキーボードデバイス定義に変換 →DDX層 XKeySym等のイベントに変換 →DIX層へのイベント通知 •

    マウス固有 X移動, Y移動, ボタンデータ →OSのマウスプロトコル定義に変換 →DDX層 Xマウスイベントに変換 →DIX層へのイベント通知
  17. OSとXserverの関係  出力デバイス階層 • ビデオカード出力 ←OSの mmap(2) や ioctl(2) による操作

    ←DDX層 ピクセルVRAM表現 カラーパレット操作 アクセラレータ処理 ←DIX層 アプリ描画操作 スクリーンセーバー 等
  18. OSとXserverの関係  NetBSD共通コンソール wscons(4) の場合 • キーボード入力 • /dev/wskbd でキーコード読み出しI/Fを提供

    • マウス入力 • /dev/wsmouse で wsmouse プロトコルI/Fを提供 • ディスプレイ出力 • /dev/ttyE0 で VRAMに対する mmap(2) I/F や パレット操作 ioctl(2) I/Fを提供
  19. OSとXserverの関係  SunOS仕様 Xsunサーバーの場合 • キーボード入力 • /dev/kbd で Sun固有キーコード読み出しI/Fを提供

    • マウス入力 • /dev/mouse で sun固有プロトコルI/Fを提供 • ディスプレイ出力 • /dev/bwtwo や /dev/cgsix 等で VRAMに対する mmap(2) I/F や パレット操作 ioctl(2) I/Fを提供
  20. OSとXserverの関係(再掲) デバイス独立(DIX)層 Xクライアントとの通信 イベント処理 表示用データ構造管理 キーボード デバイス依存(DDX)層 DDXキーボード 入力ドライバ キーイベント処理

    DDXマウス 入力ドライバ マウスイベント処理 DDXビデオ ドライバ 描画・パレット制御 デバイスドライバ マウス ビデオカード /dev/cgsix /dev/mouse /dev/kbd 物理 デバイス ②カーネル側ドライバを  既存DDXモジュール  対応の標準wscons仕様  に書き換える ①Xserver側 DDXを  対応する DIX および  旧来カーネルドライバ  仕様で動くようにする 以下のいずれでも 動作は可能
  21. XFree86での Xsunサーバー  NetBSDカーネルがSunOSデバイスを提供 • /usr/X11R7/bin/Xsun が DIX, DDX すべてが入ったサーバー

    • NetBSDカーネルが SunOS互換の 各デバイスI/Fを提供 ➔OS差異の部分だけ修正すればそのまま動作
  22. X.orgでのサーバー構成変更  モノリシックサーバー廃止・モジュール化 • DIX部分が /usr/X11R7/bin/Xorg に • DDX部分は個別モジュールに分割 •

    xf86-video-wsfb • xf86-input-keyboard • xf86-input-mouse 等 • これらは /usr/X11R7/lib/modules/drivers 以下の ダイナミックリンクライブラリとなり動的構成に
  23. X.orgとXsunサーバー  謎マシン存亡問題 • モノリシック Xsunサーバーは消滅 • NetBSD wscons: xf86-input-keyboard

    や xf86-input-mouse でサポート • Solaris用に kbd, mouse, cgsix は モジュールとして書き換えた人がいる? • でも sun3の bwtwo や cgfour は消滅? ➔NetBSD 8.0 でも Xsunサーバーは削除に
  24. NetBSD/x68k用 Xサーバー  実は8年前にも似たようなことをやっていました • SHARP X680x0 の NetBSD/x68k 用にも

    X11R6 Xsun サーバーベースで書かれた X68k サーバーが存在 • この X68kサーバーも Xsun 同様に NetBSD 8.0 以降で消滅の危機に • OSC広島とかでの X68030 実機展示で Xサーバーが動かないとさびしいので、 2014年に X68kサーバーを見ていました
  25. Xnest とは  Xserver client on Xserver? • man は「a

    nested X server」という説明 • Xサーバー上でクライアントとして動く Xサーバーの実装? • 誰が何の用途で使っているか不明だが、 継続メンテされているということは DIX開発者用?
  26. X68kサーバー移植作戦  Xなにもわかりません • Xnestのソースと X68kサーバーのソース を見比べてみる ➔初期化とか DDX⇔DIX I/Fはなんとなく同じ?

    • NetBSD/x68kカーネル側は変更なし ➔Xnestサーバーの XFree86→X.org差分を X68kサーバーにも当てれば動くのかも??
  27. X68kサーバー移植作戦  ドキュメント? なんですかそれ? • ひたすら xnest と X68k のソースを読む

    • I/Fをエスパーするのは NetBSDカーネル のドライバを読むのと同様(?) • サーバーバイナリビルドはクロスビルド • テストはエミュレータで、バイナリは NFSで転送、実行時は「高速モード」 ➔キーボードまわりの XKBの差異で難儀したが 3日ほどでなんとなくXサーバー動作!
  28. とりあえず公式MLに報告 Subject: X11R7 Xserver for x68k Date: Thu, 27 Feb

    2014 22:05:23 +0900 Hi, Last weekend I've managed to port old xfree X68k Xserver to X11R7. x68k port has not been wscons'fied (yet), so I just copied old style xsrc/xfree/xc/program/Xserver/hw/netbsd/x68k server sources to xsrc/external/mit/xorg-server/dist/hw/netbsd/x68k and put minimum changes (for Xorg API changes) to build a 'monolithic' Xserver binary like Xnest and Xvfb. Patch is here (can be applied both HEAD and netbsd-6): https://gist.github.com/tsutsui/9167958 https://mail-index.netbsd.org/port-x68k/2014/02/27/msg000043.html
  29. 即返信  謎マシンに寛容? Date: Fri, 28 Feb 2014 08:06:10 +1100

    this sounds pretty good! • こうして NetBSD/x68k では 8.0 以降も Xサーバー提供が継続 https://mail-index.netbsd.org/port-x68k/2014/02/27/msg000044.html
  30. Xsunサーバー問題  モチベーション問題 • X68kサーバーは存続したものの NetBSD 8.0 から Xsunサーバーは消滅 •

    Sun 3/80 実機は持っていたものの、 cgfour フレームバッファが認識されない 問題で手がつかず • Sun3エミュレータ (TME) もあるが、 実機がないと作業モチベが出ない問題
  31. Xsunサーバー再始動  太古ソースの憂鬱 • 適当に github に push しつつ作業 https://github.com/tsutsui/xorg-server-Xsun

    • 最新は Xorg 1.20 になっていたけれど 差分の少なそうな Xorg 1.10 で作業 • X68kサーバー移植時作業メモを見ながら 機械的置き換え作業部分から開始 (記録の重要性を再認識)
  32. Xsunサーバー  いつもの NetBSDクロスビルド開発 • 2022/7/6に作業開始 • プロトタイプ宣言不足やSun固有のcgsix などでややハマる •

    2022/7/12にクロスビルドのリンク到達 • Sun 3/60実機がすぐテストできる状態で 置いてあったのでNFSでバイナリ転送して 雑に動作テスト
  33. キーボードがまだおかしいものの 今回も公式MLに報告 Subject: X11R7'fied Xsun servers Date: Sat, 18 Jul

    2020 04:12:31 +0900 Hi, Somehow I've managed to port ancient X11R6 based Xsun servers (was in src/xfree/xc/programs/Xserver/hw/sun) to recent X11R7, by mechanically adapting all MD sources to Xorg API changes as I did for X68k server back in 2014: https://mail-index.netbsd.org/port-x68k/2014/02/27/msg000043. html Sources and patches ------------------- https://mail-index.netbsd.org/port-sun3/2020/07/17/msg000157.html
  34. 今回も即返信  いつもの安心感 Date: Sat, 18 Jul 2020 10:18:42 +1000

    this is great news! • 反対もなさそうなので作業を継続 https://mail-index.netbsd.org/port-sun3/2020/07/18/msg000158.html
  35. キーボードの問題は残課題にして いったんコミット Module Name: xsrc Committed By: tsutsui Date: Wed

    Jul 22 20:38:29 UTC 2020 Added Files: xsrc/external/mit/xorg-server/dist/hw/sun: README Xsun.man circleset.h constype.c constype.man kbd_mode.c kbd_mode.man sun.h sunCfb.c sunCfb24.c sunCursor.c sunFbs.c sunGX.c sunGX.h sunInit.c sunIo.c sunKbd.c sunKeyMap.c sunMfb.c sunMouse.c sunMultiDepth.c Log Message: Import WIP Xorg-Server-1.20'fied monolithic Xsun servers. This is based on 1.10 version imported into xorg-server.old and all upstream API changes between xorg-server 1.10 and 1.20 are applied almost mechanically. https://github.com/tsutsui/xorg-server-Xsun/commits/xorg-server-1.20 Xsun and XsunMono servers are also confirmed working with bwtwo on 3/60 and tme, and cgtwo on tme. XKB stuff is still to be resolved. https://mail-index.netbsd.org/source-changes/2020/07/22/msg119657.html
  36. XKB の調査  謎マシン保存問題 • Xorg ではキーボード設定に XKB 設定を定義する xkeyboard-config

    のファイルが必要なのですが…… https://twitter.com/tsutsuii/status/1287754235824574465
  37.  NetBSD と Xserver と謎マシン  機種依存部⇔機種独立部I/Fがキモ  とりあえずI/F追従なら何とかなる 

    クロスビルド環境最強!  エミュレータもあればさらに快適  作業記録を残すことが大事! まとめ (1)
  38.  むりやりBSDについても考える  Xも BSDも 30年もののコードがある ➔現状を見てる限りまだなんとかなる? つらい?  modular化のようなモダン化改修と

    旧機種サポートのトレードオフ ➔Linuxのrust化のようなことがあったらもう無理かも  BSDは良くも悪くもコンサバ? ➔正直、マンパワーではLinuxに到底勝てない  昔のマシンで動かすことの意味 ➔非GPL組み込み用途のローエンド性能要件次第かも まとめ (2)