1 ポイント 投稿者 GN⁺ 2023-10-01 | 1件のコメント | WhatsAppで共有
  • かつてハッカーなら自然に知っていた ASCIIのビット構造、RS-232、ハードウェア端末、モデムの知識は、機器とネットワーク環境の変化により、もはや入門過程で受け継がれなくなった
  • ttySIGHUPcore dumpREADMECtrl-D のような表現は、消えた道具の残滓であり、その由来を知ると現代のUnixや開発慣習をよりよく理解できる
  • ASCII、36ビットマシン、8進数、RS-232設定、MIME、termios、curses、ANSI端末制御は、現在のシステムに残る 歴史的互換性 の層を示している
  • 大衆向けインターネット以前には、UUCP、USENET、BBS、FidoNet、FTP、Gopher、商用タイムシェアリング、学術WANがそれぞれ ファイル転送・メール・フォーラム・協業 を担っていた
  • 公開リポジトリベースの開発は、DECUSテープ、FTPと電子メール、USENETのソースグループ、patch(1)、SCCS/RCS/CVS、SourceForge、Subversionを経て、2005年のGitに至って形成された

消えたハードウェアが残したUnixの痕跡

  • 若いハッカーたちがASCIIのビット構造や独特な制御文字を知らなくなったのは個人の問題ではなく、ハードウェア端末 とRS-232が日常から姿を消した結果である
  • かつての端末はソフトウェアのウィンドウではなく中央コンピュータに接続された ビデオディスプレイ端末(VDT) であり、それ以前には紙に出力するteletype系の装置が使われていた
  • Unixの tty はteletypeの略に由来し、/dev/lplp はline printer、一部のBSD Unixの /dev/drum は初期の回転ドラム装置に由来する
  • \r Carriage Return はプリントヘッドを行の左端へ戻す動作であり、Unixは行末を \n 1つで処理したが、他のオペレーティングシステムは \r\n を使い続けた
    • \r\n の順番になった理由は、初期ハードウェアでは carriage return に1文字の送信時間より長くかかり、先に実行する必要があったためである
  • 複数の利用者が1台の中央コンピュータのCPUを分け合って使う方式は timesharing と呼ばれ、現代のUnixにおける複数の仮想端末の構造にもその痕跡が残っている

RS-232、モデム、ATコマンド

  • RS-232は1960年代初頭にteletypewriterとモデムが通信できるよう開発されたハードウェアプロトコルであり、USB以前の「serial」リンクは通常RS-232を意味した
  • モデムはデジタル信号を電話線で送れるようにする装置で、ハッカーたちは別箱の 外付けモデム を多く使っていた
    • 内蔵モデムはケース内部のRFノイズに弱く、外付けモデムのインジケータは障害診断に有用だった
    • 接続成功と同期失敗は、モデムのピーピー・ザーという音である程度聞き分けることができた
  • Unixの SIGHUP における HUPHang Up であり、もともとはモデム接続が切れて制御端末が消えた状況を指した
  • モデム速度は110bpsから1990年代末の56kbpsまで上がり、1984~1991年ごろの安定期には9600bpsが一般的だった
    • このため、今も残るserial-protocol機器ではデフォルト値として9600bpsが使われることが多い
  • Hayes Smartmodemの AT コマンド接頭辞は1981年以降事実上の標準となり、ATDT の後ろに電話番号を付けて発信できた
    • AT のビットパターンは、受信側が伝送速度を知らなくても認識しやすい形で、自動同期に有利だった
    • 2017年時点でもスマートフォンの3G/4Gセルラーモデム制御機能にATコマンドが見つかっており、広く配布されたある種類では AT+QLINUXCMD= がチップファームウェア内のLinuxインスタンスへ命令を渡す接頭辞として使われていた

「core」、36ビットマシン、8進数

  • 1955~1975年ごろ、半導体メモリ以前の主流メモリは小さなフェライトコアと銅線で作られた core memory であり、in corecore dump といったUnix用語はここから生まれた
  • 2000年以降、マルチプロセッサシステムがデスクトップでも一般化すると、core はprocessor coreの略としても使われるようになり、昔のメモリという意味は次第に理解されなくなっていった
  • 8ビットバイトと16/32/64ビットワードの階層が事実上普遍化したのは1983年以降であり、それ以前には 36ビットワード アーキテクチャの伝統が大きかった
    • DEC PDP-10とSymbolics 3600 Lisp machineが代表的な36ビットマシンだった
    • PDP-10の中止は1983年にこの系統の終焉を告げ、Symbolics 3600はその後およそ10年持ちこたえた
  • 36ビットワードは3ビットのフィールド12個に分けられるため8進表記が自然で、メモリダンプに7より大きい数字が現れるかどうかで32ビット系か36ビット系かを見分けられると考えられていた
  • Cの数値リテラルで先頭の 0 が8進数を意味する文法は、BとPDP-7/PDP-11の歴史に由来し、JavaやPythonなど多くの言語がCの低レベルな語彙規則に従ってこの痕跡を受け継いでいる
    • Python 3、Perl 6、Rustは危険な先頭0の8進数文法を削除したが、Goは維持している
    • x86命令セットも説明には通常16進数が使われるが、大きな部分は3ビットのフィールドとして理解すると8進表現のほうが自然である

RS-232設定地獄と7ビット世界

  • TCP/IPリンクは通常きれいな8ビットのバイトストリームに見えるが、RS-232機器では双方が回線速度、バイトフレーミング、parity、stop bitを合わせる必要があった
  • 1984年以降は 8N1 —8ビット、no parity、1 stop bit— が一般的になったが、それ以前にはさまざまな組み合わせが使われ、設定が合わないと baud barf と呼ばれるランダムな8ビットのゴミしか見えなかった
  • POSIX/Unixの端末インターフェース termios(3) に、現代の感覚では意味が見えにくい複雑なオプションが多い理由は、こうしたRS-232設定を操作しなければならなかったためである
  • parityが有効だと8ビットのバイナリデータの上位ビットが壊れることがあり、上位ビット 0x80 を壊さないネットワークやソフトウェアは 8-bit clean と呼ばれた
    • 電子メール向けのMIMEエンコーディングとMIME64は、このような7ビット制約が残っていた環境のために登場した
    • MIME以前には、8ビットデータを7ビットに変換する uuencode / uudecode がUnix環境で使われ、今日でもときどき目にすることがある
  • RS-232コネクタもDB-25とDB-9が混在しており、gender changer、DB-25↔DB-9アダプタ、breakout box、null modemのような機器が必要だった
    • 2000年以降は、DB9/DB25の標準RS-232と回路基板のTTL serialが同じRS232表記を使うという落とし穴が生まれた
    • TTL serialは3.3Vまたは5Vレベルで、標準RS-232ははるかに大きい電圧スイングを使うため、level shifterなしで接続するとTTL側の部品が損傷する
  • RS-232は1990年代後半には一般常識から消えたが、2010年ごろまでは汎用コンピュータから完全には消えず、POS機器、商用ルーターの診断コンソール、組み込みデバッグコンソール、GPSセンサー、IoT機器に残っている

インターネット以前のWANとコミュニティ

  • 今日のWANはほぼTCP/IPインターネットへと収斂したが、1970年代末から1990年代半ばまでは複数のpre-Internet WANが共存していた
  • UUCPはUnix to Unix Copy Programの略で、1979年にBell Labsの外へ出た後、1990年代半ばに一般向けインターネットが普及するまで、モデムと電話網を使ってUnixサイト間の低コストなネットワーキングを提供した
    • もともとはソフトウェア更新を伝播するためのstore-and-forwardシステムだったが、主な用途は電子メールと、1980年に始まったUSENETになった
    • 電話料金がlocal定額とlong-distance従量課金に分かれていた構造の下で、UUCPトラフィックはlocal hopをつないで長距離転送を迂回できた
  • USENETはソースコード共有グループから現代のオープンソース慣習の種になり、READMENEWSINSTALLのようなプロジェクト用メタデータファイル名が1980年代初頭にそこで定着した
    • 1987年のGreat RenamingはUSENETグループ名の階層再編だった
    • 1993年にAOLがユーザーへUSENETアクセスを開放すると、“September that never ended”が始まり、大量の新規ユーザー流入によって文化への適応が難しくなった
  • UUCPアドレスは…!bigsite!foovax!barbox!userのようなbang-path形式で、1990年代初頭にインターネット接続が増えるにつれてuser@hostname形式へ置き換えられた
    • 移行期には%でUUCPルーティングとインターネットルーティングを組み合わせたハイブリッドアドレスもあった
  • BBSは通常、モデムが1台接続されたコンピュータに1度に1人ずつ接続し、メッセージ、ファイルのアップロード・ダウンロード、ゲームを提供するシステムだった
    • 最初のBBSは1978年にChicagoで運営され、その後18年間で10万を超えるBBSが生まれては消えた
    • 1984年からFidoNetがBBS間の電子メールとUSENETに似たフォーラムシステムを支えた
    • XMODEM、YMODEM、ZMODEMはBBS文化のほぼ唯一残った記憶であり、2018年になってもCisco機器の一部はserial port経由のXMODEMアップロードでパッチを受けていた
  • AOL、CompuServe、GEnie、The Source、Prodigyのような商用タイムシェアリングサービスや、CSNET、BITNET、EARN、VIDYANETのような学術WANもあり、listservという語はBITNETのメールreflectorに由来する

FTP、Gopher、Web以前の情報アクセス

  • World Wide Webが1990年代初頭の数年で一般化する前は、1971年以降、インターネットサイト間のファイル転送は通常ftpとFile Transfer Protocolで行われていた
  • WebブラウザがFTPプロトコルを直接扱えるようになると、ftpの利用はほとんどブラウザに吸収され、ftp: URL接頭辞はFTPサーバーと通信すべきことを示した
  • 1991年、Tim Berners-LeeがWorld Wide Webを作っていたのと同じ年に、University of Minnesotaのハッカーたちはメニュー中心のハイパーテキストプロトコルGopherを作った
  • Gopherは初期のWebと数年間競合したが、1993年初めに大学が実装へライセンス料を課す方針を決めたことで採用が鈍化した
  • 初期のWebブラウザはGopherプロトコルと文書表示をサポートしていたが、2000年にはGopherは事実上姿を消し、一部のサーバーだけがノスタルジーやアイロニーの意味合いで運用されていた

ターミナルエミュレータとVDTの遺産

  • 現代Unixのターミナルエミュレータは、teletypeを模した初期の表示装置、すなわちglass TTYやdumb terminalから続く最後の形態に近い
  • この種の最初の装置は1969年に出荷され、よく知られるモデルには1975年のADM-3がある
  • 初期のVDTはASR-33のように大文字しか表示できず、Unixと2018年時点のLinuxは、ログイン名が大文字で始まるとすべての入力を大文字に変換するモードへ切り替える動作を維持している
  • 1975年から登場したADM-3Aや、1978年のDEC VT-100のような“smart terminal”は、パンチカード由来の80文字幅と24x80または25x80の標準画面サイズを残した
  • cursor addressing、bold、underline、reverse-videoのような制御機能は一般化し、これを抽象化するためにUnixのterminfoデータベースとcurses(3)ライブラリが使われた
  • 1979年以降、DEC VT-100ベースのANSIターミナル制御コードが広まり、1990年代初頭にはVDTでANSI互換性がほぼ普遍的になった
  • 1992年ごろ、パーソナルコンピュータのbitmapped color displayが単色VDT並みのdot pitchと鮮明なテキスト表示に追いつき、汎用コンピューティングにおけるVDT市場は急速に崩壊した
  • UnixのコマンドラインはVDTより前のprinting terminal時代に由来し、出力する意味で“printing”という語を使う理由もここにある
  • vi(1)top(1)mutt(1)のような文字ベースの2次元インターフェースは、VDT時代の高度な視覚インターフェースであり、後にGUIという語が一般化してからTUIという名前が付いた
  • screensaverはCRTのphosphor burn-inを防ぐために画面イメージを変えるソフトウェアとして始まり、flat screenでは本来の目的が失われた

初期のbitmapped displayと8-bit美学

  • 今日のピクセル単位で操作するディスプレイへつながる実用システムの最初の例は、1973年のXerox PARCのAltoだった
    • Altoのディスプレイは608x808ピクセルで、1024x1024級だったという記憶は後年のディスプレイとの混同である
    • 1981年のDandelionは1024x809を達成し、Xerox Starとして商用化しようとした試みは失敗した
    • 1982年、Sun MicrosystemsのSun-1は1024x800ピクセルを提供し、Sun級ワークステーションは多くのハッカーが欲しがる対象になった
  • パーソナルカラーコンピュータは1975年からprimitive bitmapped displayを提供していたが、Apple IIのHi-resモードは280x192にすぎなかった
  • ハッカーたちはプログラミングに適したテキスト表示を必要とし、1024x1024級ワークステーショングラフィックスを知っていたため、消費者向けのTVベースのカラーディスプレイをほとんど役に立たない玩具のように見ることが多かった
  • 1984年のoriginal Macintoshは、512x342のモノクロ専用bitmapped displayを備えた最初の消費者向けマシンで、その後すぐにIBM EGAとそのクローンが640x350・16色を提供した
  • 1990年ごろになってようやく1024x1024カラーモニターが消費者市場のハイエンドに到達し、1992年ごろに一般化すると、PCメーカーがワークステーションベンダーを圧迫し始めた
  • 1980年代半ばの若いハッカーの一部は、低解像度カラーディスプレイと初期のサウンドハードウェアから最大限の性能を引き出そうとし、その成果であるchunky graphics、pixelated sprites、chirpy/buzzyサウンドは21世紀のゲームで8-bitノスタルジーとして使われている

GUI以前のゲーム文化

  • bitmapped color displayが一般化する以前は、テキストインターフェースとVDTの文字セルグラフィックスだけで動作するゲームの伝統が強かった
  • Trek 系は1971年にさかのぼるゲーム群で、プレイヤーがEnterpriseを操縦してKlingon、Romulanなどと戦う形式だった
    • teletype向けに設計された非常に粗いインターフェースの背後に、initiative、tactical surprise、logisticsが重要な比較的精巧なウォーゲームが隠れていた
  • Colossal Cave Adventure は1977年の最初の dungeon-crawling adventure game であり、“You are in a maze of twisty little passages, all alike” と xyzzy はこのゲームに由来する
    • PDP-10の6文字ファイル名のため、初期ユーザーはこのゲームをADVENTと呼ぶこともあった
    • 現代的なC移植版である ADVENT もある
  • Zorkは1979年にMITハッカーたちがPDP-10で最初に公開したADVENTの直接の後継作で、その後商業的にも成功した
    • zorkmid、Great Underground Empire、grue といった表現はここから生まれた
  • roguelikeは1980年の Rogue にちなんで名付けられたゲーム群で、トップダウンの地図形式のダンジョンでモンスターと戦い、宝物を探す方式だった
    • Hackは1982年、Nethackは1987年に登場した
    • Nethackは、開発グループがインターネット経由の分散協業として意識的に組織された最も初期のプログラムの1つであり、その新しさがプロジェクト名に反映されている
  • Rogueの子孫たちは最も人気があり成功したTUIゲーム群だったが、1990年代半ば以降は一般常識から姿を消し、今日でも少数の熱心なファン層に支えられている

ASCIIのビット構造と制御文字

  • ASCIIは1960年代初頭のteletype文字コード系から発展し、Unicodeの下位127コードポイントがASCIIとして設計されているため、長く生き残る可能性が高い
    • UTF-8を知っていれば、すべてのASCIIファイルは正しいUTF-8ファイルでもある
  • キーボードのControl modifierは基本的に入力文字の上位3ビットを消して下位5ビットだけを残し、0〜31の範囲の制御文字にマッピングする
    • Ctrl-SPACECtrl-@、`Ctrl-``はすべてNULを意味する
  • 非常に古いキーボードでは、Shiftはキーに応じて32または16ビットをトグルする方式で実装されており、このためASCIIの小文字・大文字の関係や数字・記号の関係に規則性がある
  • 1963年の元のASCIIは現在使われている1967年ASCIIとは異なり、tildeとvertical barがなく、5Eはcaretではなくup-arrow、5Fはunderscoreではなくleft arrowだった
  • 制御文字0〜31の多くはteletypeプロトコルの名残で、一部はテキストやUnixの慣習に、一部はバイナリデータのプロトコルに残っている
    • NUL: C文字列終端子
    • EOT / Ctrl-D: Unixターミナルでの end of file 入力
    • BEL / Ctrl-G: teletypeの bell またはVDTの attention signal
    • BS, HT, LF, FF, CR, ESC, DEL: 比較的よく知られた制御文字群
    • DC1/DC3: XON/XOFFソフトウェア flow control に使われ、Unix、CP/M、DOSにも実装された
    • SUB / Ctrl-Z: DOSとWindowsの end-of-file 文字であり、CP/MやDECミニコンピュータOSから受け継がれたもの。Unixでは process suspend キーとして使われる
    • ESC: VT100、ANSI VDT、現代のターミナルエミュレータの制御シーケンス introducer として今も使われている
  • DEL の値 0x7F は、paper tape上で7つの穴によってどのASCII文字でも上書きできたことに由来し、tape readerはDELとNULを読み飛ばしていた
  • MetaまたはAltキーはVDTでは通常ASCII keycodeに128を加えたが、現代のターミナルエミュレータでは修飾キーの前に ESC を入れる方式も多く使われる
  • ASCIIのビット構造は ascii(1) で確認でき、本文のASCII表もこのツールで生成されている

分散協業のゆっくりとした誕生

  • 現代では公開分散バージョン管理とリモート協業を当然視しているが、その基盤となるツールと利用慣行が形作られるまでには長い時間がかかった
  • 初期の祖先の1つは、1961年に設立されたDigital Equipment Corporation Users' Groupである DECUS のテープ共有だった
    • DECユーザーたちはpublic-domainソフトウェアを収めたmagnetic tapeを回覧しており、1976年にはこの慣習が定着していた
    • README の慣習はUSENETを通じてUnix世界に入ったが、DECUSテープから広まった痕跡とみられる
  • 1970年代には、メールでソースをやり取りし、FTPサイトに配布物を置く学術ソフトウェア協業があった
    • ネットワーク電子メールは1971年に発明され、1973年にはARPANETトラフィックの75%を占めるほど広く使われていた
    • Donald KnuthのTeXは、1978年に始まったこの時代の代表的な現存例である
  • 1980年以降は、専用のUSENET newsgroupでソースコードを公開し、外部の貢献者がメールでパッチを送る方式が急速に慣習化した
    • comp.sources.unix はUnixハッカーたちが新しいコードを探す日常的な場所だった
  • 完全な分散開発にはversion control、patching、forgeが必要だった
    • SCCSは1972年に誕生したが、Bell Labsの外に出たのは1977年になってからで、独占的ライセンスが普及を遅らせた
    • RCSは1982年に登場した自由に再利用可能な代替手段だった
    • patch(1) は1984年に登場し、それ以前は変更されたファイル全体をやり取りするのが一般的だった
  • Nethackは1987年に始まったroguelikeゲームで、開発者たちがメールでファイル全体とその後のパッチをやり取りし、SCCS/RCSをローカルなコピー管理に使っていた初期の完全分散開発の事例だった
  • CVSは1990年に登場し、1993年にネットワーク越しのリモート動作機能が追加された後、FreeBSDやNetBSDのような主要プロジェクトが急速に採用した
  • Linuxは1991年に分散協業の取り組みとして公開されたが、初期開発はNethackのようにメールパッチ方式で進められ、公開Linuxリポジトリはまだ存在しなかった
  • SourceForgeは1999年に登場した最初の専用software forgeで、当初はCVSしかサポートしていなかったが、2000年に登場したSubversionの採用を加速させた
  • Subversionは2000〜2005年に一般常識となり、2005年にLinus TorvaldsがGitを作ると、それ以前のバージョン管理システムは急速に時代遅れになった

覚えておくべき時代の流れ

  • 1969年、Ken Thompsonが後にUnixとなる作業を開始し、最初の商用VDTが出荷され、ARPANETで最初のパケットが交換された
  • 1970年、DEC PDP-11が出荷され、その後IntelやARMを含むアーキテクチャ系列に大きな影響を与えた
  • 1971年、初期のARPANETでネットワーク電子メールと@記号の使用が発明された
  • 1973年、Xerox Altoが高解像度ディスプレイとマウスを備えたネットワーク対応パーソナルコンピュータであるworkstationの先駆けとなった
  • 1977年、UnixがInterdataへ移植され、カーネルの大部分がCで書かれた最初のバージョンとなり、SCCSが公開され、Colossal Cave Adventureが出荷された
  • 1980年、Rogueが発明され、USENETが始まった
  • 1981年、IBM PCが出荷され、4.1BSD UnixのVAX-11/780でTCP/IPが実装され、ARPANETとUnix文化が合流し始めた
  • 1983年、PDP-10は中止され、ARPANETは技術的変化を経てInternetになった
  • 1987年、USENET Great Renaming、Perlの発明、Nethackプロジェクトの開始があった
  • 1991年、LinuxとWorld Wide Webがそれぞれ始まり、Pythonが発明された
  • 1993年、LinuxはTCP/IP機能を獲得して趣味の玩具から本格的なOSへと移行し、AOLのUSENET開放によって「September That Never Ended」が始まり、MosaicはWebにグラフィックスと画像機能を追加した
  • 1994年、米国で一般向けインターネットが本格化し、USBが公表された
  • 1995〜1996年は、UUCP/USENETとBBS文化の頂点であると同時に、一般向けインターネットの圧力で崩れていった時期でもある
  • 1999年、SourceForgeが始まり、LinuxがPCで動作するようになったことで、Sunなどの独占的なUnix workstation市場が崩壊した
  • 2005年、主要メーカーがCRT生産を中止してフラットパネルへ移行し、AOLがUSENETサポートを終了し、Gitが初めて出荷された
  • 2007〜2008年、一般向けPCの64ビット移行によって32ビット時代が終わり、iPhoneとAndroidがUnixベースのOSとともに初めて出荷された

1件のコメント

 
GN⁺ 2023-10-01
Hacker Newsのコメント
  • 興味深いのは、この記事が現代世界と結びつけるやり方がかなり不正確だという点。たとえば Hayes コマンドの接頭辞 AT には回線速度の自動同期に役立つ性質があると説明した直後に、2017年でも 3G/4G セルラーモデムの制御に AT コマンドが使われていると言っている
    しかし現代のモデムはシリアル接続ではなく、回線速度という概念もない。この性質は現代のハードウェアには関係なく、既存のコードベースを新しい環境へ拡張しやすかった、という説明のほうがずっともっともらしい
    「IoT devices still speak RS-232」も危険なほど間違った言い方。RS-232 は 0 に正電圧、1 に負電圧を使い、それぞれ 3〜15V の範囲なので、現代の IoT 機器のシリアルインターフェースに RS-232 を直接つなぐと機器を壊す可能性が高い。昔のシリアルと現代デバイスのシリアルポートが共有している部分は RS-232 の範囲外のもの、たとえば 8N1 フレーミングは RS-232 が定義していない
    「すべての ASCII ファイルは正しい UTF-8」という言い方も曖昧。ASCII は文字集合であってディスク上の表現を定義しておらず、文字を 7 ビットにパックして保存した ASCII ファイルは、加工なしでは UTF-8 ではない。前段でさまざまなワード長や 8 ビットクリーンでない転送形式を扱っていたことを考えると、奇妙な主張だ
    Git が以前のあらゆるバージョン管理システムを急速に時代遅れにしたという話も、Perforceを考えると誇張だ。Git は CVS や SVN より大きな改善だったが、それ以前のすべてを廃れ物にしたというのは、ソフトウェア産業の大きな部分を知らない主張のように見える
    もちろんこれはかなり揚げ足取りな話ではあるが、記事全体のトーンが上から目線で細かく詰めるものなら、同じ基準で批判しても不公平ではない

    • 「IoT機器はいまだに RS-232 を使う」というのは、実際にはかなり正しい。低電圧の現代的なデバイスを思い浮かべたのだろうが、産業現場ではModbus と RS-485/RS-232が今でも生きていて、IoT も活発だ
      現代のモデムがシリアル接続ではないというのも正しくない。必ずしも RS-232 と呼ぶ形ではないだけで、数年前でも普通は USB ラインを使っていたし、USB もシリアルバスだ
      AT コマンドは今でもほぼすべてのモデムで使われており、ポケットの中の携帯電話にもある。セルラーモデムが電話網に通話を設定する方式であり、由緒ある ATDT もネットワーク呼び出しの設定に使われ続けている。AT コマンドセットは通話の設定や最大速度、許可するプロトコルといった通話属性の制御用で、自動ネゴシエーションはネットワーク/モデム層の別段階だ。昔のモデムはその過程をスピーカーで聞かせてくれたが、今は聞こえないだけだ
    • 細かく言うなら、UTF-8もディスク上の表現を定義しておらず、Unicode 文字集合の文字エンコーディングにすぎない。ただしビット表現を定義するという点では、「ASCII は UTF-8 としても有効だ」という文は正しい
      こうした文字集合が別のプロトコルの上でどう運ばれるかは定義範囲外だ
    • 「現代のモデムはシリアル接続ではなく、回線速度の概念もない」なんて誰が決めたのかわからない。今まさに隣の画面で、LTE Cat M1 モデムにシリアルリンクで接続されたマイクロコントローラをデバッグしているところだ
      基本は 115200 8n1 の回線で、速度も変えられるし、自動速度検出もある。モデムが別ラインで準備完了を知らせたあと、望む速度で AT を送ると、たいてい3回目くらいで応答する
    • この記事は常識レベルの説明を目指したものだ。ソフトウェア産業全体を扱うのではなく、ハッカーなら知っていそうな部分だけを扱うと明記している
      その意味では、今ではGitがソースコードの分散協業に使われる事実上唯一のバージョン管理システムだ
    • これは本当に細かすぎる反応に見える。文脈上、8ビットバイトで保存された ASCIIを意味していると考えればいい
  • 老害から補足すると、電話モデムで56Kは本当に上限だった。電話網の内部では 8 ビットサンプルを毎秒 8000 回送っていて 64Kbps だったが、ときどき下位ビットが別の信号用に奪われ、電話の利用者には聞こえなかった
    モデムをその奪われたビットに同期させようとするより、信頼できる 7 ビットだけを使うほうが簡単で、それで 56Kbps になった。https://en.wikipedia.org/wiki/Robbed-bit_signaling
    事実上端末速度として使われた9600bpsは、9600bps モデムよりも古い慣習だ。80年代中〜後半ごろ、9600bps モデムはすごい代物で、端末ユーザーには十分速く、当時の端末にも処理可能な速度だった。Volker-Craig 4404 だったと記憶している端末は 9600bps についていけず、4800bps くらいまで落として使う必要があった

    • 端末で9600bpsが標準速度になった理由は、10ビットのフレーミング(開始/バイト/停止)で 80×24 の全画面を 2 秒以内に送れる一方、複数ユーザーを処理する際に小数 MIPS 級のホストへ割り込みや DMA の負担を過度にかけなかったからだ
      ミニコンピュータの端末マルチプレクサは通常、可能なときに送信をまとめ、DMA でメモリから文字のまとまりを取得して送ったあと、CPU には「完了」割り込みだけを送っていた。文字モードでも、受信バッファがいっぱいになったりキャリッジリターンのようなシーケンス文字が入ったときだけ CPU に通知した
      そのため多くのメインフレームやミニコンピュータはブロックモード端末を使っていた。アプリケーションはフォーム API を使い、編集と入力は端末側で処理される。コンピュータがフォーム全体を端末に送り、ユーザーが誤りの修正や数値/英数字フィールドの検証まで終えたあと、明示的な「完了」操作でフィールド内容をコンピュータへ送信する
      完全な対話型利用でも、こうしたシステムは現在行の内容が特定の操作時だけ送信され、行編集は端末で行われるラインモードを好んだ。UNIX式の「raw」モードは、端末コストが少し高くなるとしても、システムがさばくべきユーザー数に比べてオーバーヘッドが大きすぎた
    • 56k モデムがあっても、ブロードバンドが広く普及するまでは28.8 接続に縛られていた人が多かった。田舎の電話線が 56k を安定して扱えることはめったになかった
    • 4800bpsだって? 昔は 2400 が出るだけで幸せだった
      悲しいことに私は 1200 ボーで、叔父は最初のモデムが 300 だったと言っていた
      110 の設定も覚えているが、1948年のベルリン空輸作戦までさかのぼるのかもしれない
  • 4GモデムでATコマンドを初めて触ったときは、本当に笑ってしまった。手に馴染んだ感覚がそのまま通じた。ただ、ダイヤル操作とモデム音がないのは少し寂しかった
    3G/4Gモデム業界が、デバイスと対話するもっと良い方法を作れなかったというのは驚き。ISDNでさえ、広く実装されたまともなAPIがあった

    • 3G/4Gである必要すらない。ESP8266でWi-Fiを扱っているなら、おそらくATコマンドを使っている可能性が高い。もちろんHayesコマンドセットとはほとんど別物だが
      いずれにせよ、懐かしさと畏敬と恐怖が同じ割合で湧いてくる
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
    • 衛星通信の実験をしたとき、Iridiumに接続するのにATコマンドセットでハンドシェイクしなければならず、びっくりした
    • 最近の3G/4Gモデムの多くはUSBで接続され、QuectelチップセットではQMI、および/またはMBIMをサポートしていて、ソフトウェアからはATより使いやすい
      それでもATで対話する仮想通信ポートは残っており、一部の診断作業では今でも必要になることがある
      QMI/MBIMでデータ接続を設定するのは、ATとPPPをいじるよりはるかに簡単で効率的
    • 笑うべきか泣くべきか分からなかったのは、セルラーモデムにHTTPSでバイナリファイルをダウンロードさせようとしてATコマンドを投げたときだった。馴染みのあるコマンドセットを使い続けたいというのは分かるが、もはや元の姿が分からないほど拡張されている
    • より良いプロトコルとはどんなものだろうか。多くの領域では、後方互換性はかなり大きな利点になる
  • 「歴史的なUSENETアーカイブはGoogle Groupsで見つかる」というよりは、archive.orgを勧める。USENETグループをmboxファイルとして保存した素晴らしいコレクションがたくさんあり、ダウンロードできる
    mboxgrepのようなものをインストールするか、メールリーダーに取り込むか、あるいは単にテキストファイルとして読めばよい
    例はこちら
    https://archive.org/details/usenet-comp

  • 1980年代半ば、ロンドンのある大学のコンピュータ(ImperialのCDC Cyberだったように思う)から別の大学のコンピュータ(Queen Maryだったように思う)に接続し、Unixミニコンピュータにしかなかった記号代数パッケージを使ってみようとした
    途中のソフトウェア群の正しい端末設定と構成値を見つけるだけで丸2時間かかり、むしろ8ビット2MHz 64Kのマシンでできる範囲を自分でコーディングした方がましだという気分になった

    • その通り。当時、英国でコンピュータサイエンスの学位を取っていた人たちは、ZX Spectrum/BBC MicroでElite、Jet Set Willy、Manic Minerをハックしながら、Z80や6502の機械語を実戦で身につけていた可能性がかなり高かった
  • ソフトウェアには「上にどんどん積み上げる」問題がある。建設では既存の建物や構成要素を再利用したり、内部のいくつかをアップグレードしたり、取り壊して新しく建てたりできる
    ところがソフトウェアはそうしない。鉛管、CAT-3配線、馬毛断熱材、一枚ガラス窓を新しい超高層ビルにそのまま設置する。より良いPVC、CAT-6、吹き付け断熱材、三重ガラスを発明するより、何十年も前の古い技術の上に積み続ける方が楽だからか、あるいは古い建物が使っている標準を時代遅れにしたくなく、建物のオーナーたちがアップグレード費用を払いたがらないからだ
    その結果、動く超高層ビルはできるが、なぜか新しいエンジニアに馬毛断熱材を教えなければならない

    • 人々はいつも、完全に新しく、より優れたソフトウェア技術を作ろうとする。だがそうすると既存のものとの後方互換性が壊れ、導入が非常に難しくなる
      そのため大半は実験的な研究プロジェクトに留まり、運が良ければ最も良い部分だけが時間をかけて既存プロジェクトに段階的に取り込まれる
    • 過去60年以上のコンピュータの進化から学ぶ価値はない、と見ているような反応が多いのは興味深い
      見落としているのは、この「古くてひどい技術」のかなりの部分が今も残っている理由だ。それらは時の試練に耐えてきた。現代の技術が純粋なノスタルジーだけでこうしたものを維持しているわけではない。たいていは問題を優雅に解決するか、より現代的なシステムの上で有用な抽象化を提供するか、既存システムとの互換性を避けられないため、今でも有用なのだ
      もちろん、こうした古い技術にも欠点はある。数十年後には、あなた方のコードもすべてそうなるだろう
      標準についてのXKCDって、どれだったっけ?
  • 1997年生まれでソフトウェア業界で働いていて学んだことの一つは、ソフトウェア工学という分野は、ときにシステムの歴史理解に近いということだ。こういう文章を読むと、ある概念が突然ぴたりとはまることがあって良い

  • 組み込みシステムで働く立場からすると、この内容のかなりの部分はいまだに関係がある。RS-232そのもの、つまり物理層の仕様はあまり使われなくなったが、その下にあるUART通信プロトコルは今も健在だ
    たとえばBeaglebone開発ボードは、XModemでブートローダをアップロードして起動できる

    • 小型マイクロコントローラの多くも、今でもUARTポートとシリアルプロトコルでデバイスを再フラッシュする。ハードウェアインターフェイスの最小公分母であり、動作する最も単純な方法だ
  • 実は、ASR-33 が本来使っていた、もっと古い TTY インターフェースがあり、電信回路に由来する 電流ループ と呼ばれていた。1970年代には RS-232 もサポートするデュアルモードの ASR-33 が登場し始め、最終的に RS-232 が電流ループを完全に置き換えた
    KIM-1(https://en.wikipedia.org/wiki/KIM-1) がこの方式を使っており、電流ループ(https://en.wikipedia.org/wiki/Current_loop)インターフェースは産業制御の文脈では今でもかなり一般的。MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications)の基盤でもある

    • 電流ループは、ケーブル長が非常に長くなり得る場所で使われる。片側の端から 20mA を流せば、長さに関係なく反対側で得られることが分かるが、電圧方式ではそうはいかない
    • 電流ループは80年代まで広く使われており、長いケーブル区間が必要な場所ならどこでも使われていた。記憶では VAX 780 は 19200 をサポートしていたが、20mA ループでのみ可能だった
  • FF(Form Feed)、つまり Ctrl-L を、多くのビデオ表示端末が「画面消去」コマンドとして解釈し、ソフトウェアの端末エミュレーターも今でも時々そうする
    これは Usenet で スポイラー表示 としてよく使われていた。ユーザーが PgDn のようなキーで進むまで、メッセージの残りが表示されなかったためだ。画面には ^L と表示されるので、この先にまだ続きがあることが分かり、^L が画面外へスクロールされるまで残りの画面は消去されていた