HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

Super Dimension Fortressへのラブレター

A Love Letter to the Super Dimension Fortress (brennan.day)

28 pointsby jruohonen3 コメント

要約

この記事は、1987年から稼働している非営利の公共アクセスUNIXシステムであるSDF(Super Dimension Fortress)への賛辞です。著者は、BBS時代から続くSDFの歴史、コミュニティ、そして現代のWeb開発とは異なるアプローチ(CGIやDillo互換サイト構築など)を紹介しています。SDFは、その長年の歴史とユニークなサービスを通じて、現代のインターネットとは一線を画すコミュニティプラットフォームとして存続しています。

全文翻訳

Super Dimension Fortressへのラブレター

Webについて学ぶほど、過去の遺産への感謝の念が深まります。私たちはまさに巨人の肩の上に立っているのです。先週、私はSDF、1987年から継続的に稼働している非営利の公共アクセスUNIXシステムおよびオンラインコミュニティのARPAメンバーになるという(ついに!)喜びを味わいました。

では、SDFとは何でしょうか? それに答えるには、40年前に遡り、BBS時代について語る必要があります。

電子掲示板システム(Bulletin Board Systems)

1987年6月16日。テッド・ユーレマン("iczer")は、誕生日に母親から贈られた電話回線にApple IIeの300ボー¹のモデムを接続し、Magic City Micro-BBS(Applesoft BASICで書かれた)を実行していました。彼は、お気に入りのアニメにちなんでSDF-1と名付け、Stephen Jonesによる30周年記念回顧録によると、「アニメ、インダストリアルミュージック、そしてChurch of the SubGeniusのファン」を惹きつけたいと考えていました。オリジナルのハードウェアは、1200bpsのモデム1台と、それぞれ280キロバイトのフロッピーディスクドライブ2台でした。

これがSDFの始まりでした。

SDFは自らを「新しいアイデアを刺激し、促進し、実装するためのコミュニティプラットフォーム」と説明しています。これは、501(c)(7)非営利団体としてメンバーからの資金のみで運営されているマルチユーザーNetBSDマシンであり、数万人がアカウントを保持しています。名前はアニメ『超時空要塞マクロス』(西洋では『ロボテック』の一部として知られる)に由来しており、システムは日本の​​アニメファンのためのBBSとして始まりました。SDFのBBS時代は、Stephen Jones(SDFの長年のsysadmin)の録画インタビューを含む、YouTubeの8部構成の2004年のドキュメンタリー『BBS: The Documentary』で垣間見ることができます。

電子掲示板システムは現代のインターネットに先行しており、おそらくパーソナルコンピュータを単なる高価な趣味のキットから、はるかに人気のあるマシンに変えたと言えるでしょう。BBSは、1980年代から1990年代初頭にかけて、PCをグローバルおよびローカルコミュニケーションのための必須ゲートウェイに変えたものでした。それらは、コンピュータが他の人とつながるためのものであることを証明しました。

当時は検索エンジンがなかったため、コンピュータ雑誌や他のボードからのテキストファイルを探してBBSを見つける必要がありました。「ウェブサイトのアドレス」は、ローカルの7桁の電話番号でした。コンピュータのターミナルプログラムを開き、コマンドを入力してモデムにBBSの電話番号をダイヤルさせていました。自宅の電話回線を使用していたため、オンライン中は家で誰も電話を使えませんでした。コンピュータが物理的に電話番号をダイヤルする音、そしておなじみの、耳障りなスクリーチ音と静的なヒス音で2つのモデムが通信しているのが聞こえました。

人気のピーク時には、北米で15万以上のBBSが稼働していました。2005年までには、わずか数百にしかなっていませんでした。

2006年のbsdtalkインタビューで、長年のメンバーがその存続の理由を次のように要約しています。

"SDFは単なるシェルアカウント以上のものです。それは、SDFが提供する様々な方法を通じて互いにコミュニケーションをとる人々のコミュニティです… SDFが特別なのは、インターネット初期のコンピューティング環境のように運営されていることです。全く企業的ではありません。"

大学の研究者による2019年の公共アクセスUNIXシステムに関する調査、『History, Evolution and Future of Public Access UNIX』(SDF自体でホストされている)は、現代のシステムを「完全に形成されたソーシャルコミュニティ」と描写し、SDFが「デジタルアーティスト、コンピュータ歴史家、Web開発者、ゲーマー、そしてもちろん多くのプログラマー」とともに、アマチュア無線(SDFARC)、Python、Gopher愛好家、Minecraftプレイヤーのための特別関心グループをサポートしていると付け加えています。SDF自身のピクチャーツアーは、1985年まで遡るハードウェアを年ごとに記録しており、電話博物館での一時的な展示や現在稼働中のマシンも含まれています。

現在、ネットワークにはDEC AlphaおよびAMD Opteronハードウェア上のNetBSDサーバーに加え、ライブのレトロコンピューティング環境が含まれています。TOPS-20システム(twenex.org、2台のXKL TOAD-2でPanda Distribution TOPS-20を実行)、Symbolics Generaマシン、およびITSシステムです。これらすべてで無料アカウントが利用可能です。

過去40年間、SDFはハードウェア障害、数え切れないほどのDDoS攻撃、ISPによるサービス終了、そしてアメリカ国内での複数回の移転を乗り越えてきました。商業化されたことはなく、その間にユーザーベースを失うこともありませんでした。何十年もSDFを運営しているJones氏は、30周年記念の手紙で次のように書いています。

"今日、私たちを時代遅れで『レトロ』だと見る人もいるかもしれません。しかし、関わってみれば、新しいアイデアで非常に活気に満ちていることがわかるでしょう。"

SDFが提供するサービス

SDFはBBS時代から大きく進化しましたが、今でも無料ダイヤルアップアクセスを提供する数少ない場所の一つです。SDFでメンバーになると、多くのサービスが利用できます。これはTildeverseやomg.lolのアカウントを取得するのと非常によく似ており、それらを先取りしています。

シェルから始まります。ssh you@tty.sdf.orgコマンドを実行すると、bash、ksh、tcsh、rc、zshなどの一般的なツールや、edからemacsまでのエディタを備えたNetBSDに入ることができます。また、ping、traceroute、dig、whois、fingerなども利用可能です。

あなた自身のウェブページも取得できます。シェルでmkhomepgを実行すると、~/htmlフォルダが作成され、希望するURLが尋ねられます。~/htmlにファイルを置くと、サイトはyou.sdf.orgで即座に公開されます。ARPAメンバーは、約60の選択肢(pdp10.org、twenex.org、chaosnet.org、freak.net、multics.orgなど)から vanity ドメインを選択できます。リストについてはwiki.sdf.orgを参照してください。CGIはすぐに利用可能です。シェル/awk/sedは全員が利用でき、ARPAメンバーは完全なphp/perl/python/rubyを利用できます。

GopherおよびGeminiプロトコルは、通常SDFユーザーによってより多く使用されます。シェルでmkgopherを実行し、セットアップを選択します。これにより、~/gopher(/ftp/pub/users/youへのシンボリックリンク)が作成され、gopher://sdf.org/1/users/youとgemini://sdf.org/users/youの両方として提供されます。1つのディレクトリ、2つのプロトコル! gophermapを作成するか、.gmiファイルを追加してください。gopherの設定とgeminiの設定を参照してください。

そして、これは氷山の一角にすぎません。

サービス場所
IRCirc.sdf.org:6667
Jabber/XMPPjabber.sdf.org
Matrixmatrix.sdf.org
Giteagit.sdf.org
Mastodonmastodon.sdf.org
PixelFedpixelfed.sdf.org
PeerTubetoobnix.org
TT-RSSttrss.sdf.org
Lemmylemmy.sdf.org
Gallerysdf.org/g
Deskshotsdeskshots.org
Jitsijitsi.sdf.org
aNONradioanonradio.net
Minecraftmc.sdf.org
BZFlagsdf.org:5154
SDFMudsdf.org/mud
TOPS-20twenex.org

参加方法

当初、SDFに参加して認証される唯一の方法は、シアトルの私書箱に1ドルを郵送することでした。これはスパムや悪用を防ぐための巧妙な方法でした。

幸いなことに、現在ではPaypalで寄付することができ、プロセス全体がずっと簡単になりました。

SDFの最もクールな点の1つは、生涯有効なARPAメンバーシップだと思います。一度限りの36米ドルの料金で、以下のものが得られます。

  • 送信ツール:telnet、ssh、sftp、ftp、snarf、wget、ytalk、外部IRC。無料アカウントは受信のみですが、ARPAはネットワークを双方向に開きます。
  • ファイル転送:scp/sftpおよび非対話型SSH:ssh-copy-idが有効です。
  • 開発:ボックス上でgcc、perl、php、python、ruby、elispが利用可能です。
  • 完全なCGI:サイト上でphp/perl/python/rubyが利用可能です。
  • VoIP:インターネット通話、ボイスメール、会議(PSTN通話は、実際のDIDオプション付きで四半期あたり15ドルの追加料金)。
  • UUCP + ClariNET:TCPまたはダイヤルアップ経由のメールとニュースフィード。
  • 投票権:システム機能とポリシーに関する投票権。
  • クォータ:ホーム、メール、Webスペース、Gopherspaceそれぞれ約150MB / 5000ファイル。

これらすべてが生涯利用できるだけでなく、私が生まれるよりも長く続いているネットワークコミュニティをサポートすることになるのです!

ボーナス:SDFでPerl CGIゲストブックを作成する

昔は、ウェブサイトに機能を追加するために、Common Gateway Interface(CGI)プロトコルを介してWebサーバーと対話するスクリプトを書いていました。1990年代後半から2000年代初頭にかけて、これはWorld Wide Webを静的なHTMLページから動的でインタラクティブなWebサイトへと移行させるための主要な技術でした。

残念ながら、現代のWeb開発ではあまり使われなくなり、時代遅れで推奨されないと見なされています。従来のCGIは、訪問者のクリックごとに新しいオペレーティングシステムプロセスを生成していました。そのため、トラフィックの多いウェブサイトでは、サーバーメモリを大量に消費し、パフォーマンスを著しく低下させていました。

しかし、小さな個人ウェブサイトを作成する場合、「スケーリング」や「効率的なリソース使用」といったことは度外視できます!誰が気にするでしょうか? ARPAメンバーとしてPerl CGIにアクセスできるので、私の小さなSDFウェブページにシンプルなゲストブックを作成することにしました。以下にその方法を説明します。

1. SDFのディレクトリ構造を理解する

SDFでは、ウェブページのルートは~/htmlディレクトリですが、これはあなたのホームディレクトリではありません。むしろ、/www/<a>/<b>/<username>(親ディレクトリはユーザー名から派生するため、私の場合は/www/af/b/bren)へのシンボリックリンクです。実際のホームディレクトリは、/sdf/arpa/af/b/brenのような場所にあります。データファイルは、訪問者が直接リクエストできる公開されている~/htmlフォルダ内に置きたくありません。代わりに、Webルートの外、1つ上のレベルに配置します。

/sdf/arpa/af/b/bren/guestbook.dat   <- データファイル、Webからはアクセス不可
/www/af/b/bren/guestbook.cgi        <- スクリプト本体、~/html内に配置

また、CGIスクリプトはsuexecの下で実行される際に$ENV{HOME}が設定されていないため、スクリプト内で~のような相対パスに依存することはできません。私はデータファイルへの絶対パスをハードコーディングしました。

2. スクリプトの作成

これには、コアPerlとファイルロック用のFcntlを使用します(もし2人の訪問者が同時に署名した場合のためですが、それだけです)。スクリプトは$ENV{REQUEST_METHOD}を読み取り、POSTされたフォームボディを手動で解析し(CGI.pmは非推奨なので使用しません)、名前/メッセージの長さを検証し、ファイルに行を追加します。

#!/usr/pkg/bin/perl
use strict;
use warnings;
use Fcntl qw(:flock);

my $DATA_FILE = "/sdf/arpa/af/b/bren/guestbook.dat";

sub add_entry {
    my ($name, $message, $url) = @_;
    my $ts = scalar localtime;
    my $enc_message = $message;
    $enc_message =~ s/\\/\\\\/g;
    $enc_message =~ s/\n/\\n/g;

    open(my $fh, '>>', $DATA_FILE) or return;
    flock($fh, LOCK_EX);
    print $fh join("\x01", $ts, $name, $enc_message, $url) . "\n";
    flock($fh, LOCK_UN);
    close($fh);
}

各エントリは1行で、タイムスタンプ 名前 メッセージ URLとなり、通常は使用されない制御文字 をフィールド区切り文字として使用します。これにより、通常の句読点を含む名前やメッセージが解析を壊すことを防ぎます。メッセージ内の改行は書き込み時にリテラル にエスケープされ、読み取り時に再度エスケープ解除されるため、複数行のメッセージも単一行になります。

また、CSSで訪問者には隠されているwebsiteというハニーポットフィールドもあります。これが入力されると、送信は無視されますが、ロボットには「署名ありがとう!」と表示されます。

3. データファイルのロックダウン

データファイルはApacheがアクセスできる場所に配置する必要があるため(私の場合はシンボリックリンクについてあまり深く考えたくありませんでした)、~/htmlに.htaccessを追加します。

<Files "guestbook.dat">
    Order allow,deny
    Deny from all
</Files>
4. アップロードと実行権限の付与

SDFではCGIスクリプトは(1) .cgiで終わる必要があり、(2) 実行可能である必要があります。cgi-binディレクトリの要件はないため、~/html内のどこにでも配置できます。

scp guestbook.cgi bren.sdf.org:html/
ssh bren.sdf.org
chmod 755 html/guestbook.cgi
mkhomepg -p

mkhomepg -pは、ホームページのパーミッションをSDFが期待する安全なデフォルトに正しくリセットします。

5. アクセス

これで完了です! guestbook.cgiは、GET(フォームと最後の50件のエントリを表示)とPOST(新しいエントリの検証と保存)の両方で同じページをレンダリングします。データベース、フレームワーク、ビルドプロセスはありません。2026年の基準では少しぎこちないですが、それが気に入っています。もしよろしければ署名してください:bren.sdf.org/guestbook.cgi(httpsではなくhttpに注意してください)。

ボーナス:Dillo互換ウェブサイトの作成

最後に、Sunnyのブログ記事『positive, human-made software』に触発されました。この記事では、インターネットブラウザのDilloがリストアップされていました。

昔、私の唯一のコンピュータが非常に遅いIntel Core 2 Duoだった頃、ウェブサーフィンをより快適にするための軽量ブラウザを探していたのを覚えています。Dilloはその一つです!「コードベースは現在Chromiumの0.2%のサイズ」であり、メモリ使用量も驚くほど低いです。

予想通り、それには代償が伴います。Dilloの制限により、レンダリングや機能が正しく動作しないWebサイトが多く存在します。しかし、私にとってはそれが機能なのです。Webページがsmol webの原則を尊重し、かつ初心者でも読みやすいソースコードを持つことを保証する最良の方法の1つは、サイトをDillo互換にすることです。

では、これは実際には何を意味するのでしょうか?

DilloはHTML 4.01のサブセットをサポートし、いくつかのHTML5要素が追加されています。また、CSS 2.1のサブセットにいくつかのCSS3が追加されています。JavaScriptは一切サポートされていません。

<script>タグとすべてのインラインイベントハンドラ(onclickなど)は無視されます。frameset/frame/iframeにはレンダリングサポートがありません。また、<canvas>やvideo、audio、source、embed、objectの再生サポートもありません。

CSSとスタイルに関しては、CSS変数(var())のサポートはありません。また、flexboxもCSS gridもありません。Gridルールは無視されるだけです。レイアウトは(うっ…)tableとfloatで行う必要があります。

@font-faceによるカスタムWebフォントもありません。フォントは5つのCSS汎用ファミリー(serif、sans-serif、monospace、cursive、fantasy)に解決され、これらはすべてユーザーのdillorc設定(font_serif、font_sansなど)で設定されます。Dilloは特定のWebフォントファイルを読み込む能力を持っていません。

これはあくまで参考としてください。というのも、公式の互換性テーブルを見つけることができなかったからです。Dilloの開発者は、マニュアル、変更ログ、バグトラッカーを通じてコミュニケーションをとっています。

結論

面白いことに、Web開発について学ぶほど、私はよりシンプルで過去に戻るようになります。これは理にかなっていると思います。良いコードとは、肥大化していないコードです。インターフェースに近づけば近づくほど、インターフェースは良くなります。これはプログラミングとコンピュータ作業の驚くほど逆説的な側面です。これらは常に有限の限界を持つ機械であり、私たち人間と何ら変わりありません。私たちはそれを意識するだけでなく、それに寄り添う必要があります。


  1. ターミナルボーレートは、ハードウェアターミナルまたはシリアルコンソールが通信する速度で、毎秒送信される信号変化(シンボル)の数で測定されます。300ボーでは、ターミナルは毎秒30文字を表示します。これはおおよそ速いタイピストの速度です。テキストが瞬時に表示される代わりに、画面上に文字が1つずつ、1行ずつ表示されるのを物理的に見ることができます。↩︎