HN 日本語サマリー

← 一覧へ戻る
プログラミング

Kermit 45周年を祝う:15年ぶりの新C-Kermitリリース

Celebrating 45 Years of Kermit with the First New C-Kermit Release in 15 Years (changelog.complete.org)

161 pointsby roryirvine40 コメント

要約

1981年にコロンビア大学で開発されたKermitプロトコルは、異なるコンピューターシステム間のファイル転送を可能にするために生まれました。45年の歴史を経て、C-Kermitは最近15年ぶりのメジャーアップデートであるバージョン11をリリースしました。このアップデートは、セキュリティ強化、IPv6サポートの追加、テストスイートの拡充など、現代的な期待に応えるための多くの改善を含んでいます。

全文翻訳

1981年はコンピューティングにとって異なる時代でした。ハードウェアもソフトウェアも高価で、あるベンダーのマシンが別のベンダーのマシンと通信できることは当然ではありませんでした。実際、コロンビア大学はまさにそのような問題を抱えており、1981年にフランク・ダ・クルーズとビル・キャッチングスはKermitと名付けたシリアルプロトコルを設計しました。 DEC-20やIBMメインフレームの多くの癖のため、Kermitプロトコルは最初から非常に適応性が高かったです。一度に96バイト以上のデータを処理するのが難しいシステムを扱え、7ビットリンクで8ビットファイルを転送でき、文字セット(当時はASCIIとEBCDIC、現在は様々なUnicodeも)間の変換ができ、そしてもちろん、エラーを起こしやすいシリアルリンクを扱えました。 Kermitは急速に広まりました。1982年までに、KermitはMS-DOSとUnixに移植されました。最終的に、C言語で実装されたC-KermitがフラッグシップKermitとなりました。TCPサポート、対話型CLI、強力なスクリプト言語(シェル、Lisp、expectの機能を持つ)、そしてジャンボパケット、スライディングウィンドウ、ストリーミングモードなどの今日の高速リンク向けの最適化を獲得しました。 その過程で、Kermitは国際宇宙ステーションで飛行し、ハリケーン中のセンサーからのデータ収集を実行し、郵便システム、ボーイング787製造など、多くの用途で使用されました。今日、私はそれを強力なsshラッパー(複数のネストされたssh、sudo、suなどのコマンド経由で簡単にファイルを転送できる)、BBSクライアント、HP 48GX電卓とのデータ交換などに使用しています。また、組み込みデバイスへのファームウェアアップデートの送信にも今日使用されています。そしてもちろん、ビンテージシステムを扱う人は誰でも、いつかはKermitを使用する可能性が高いです。 TCP/IPスタックがほとんどのOSベンダーに最終的に採用され、通信の共通基盤のようなものが確立されるのは1990年代後半まで待たなければなりませんでした。もちろん、私たちは今日これを当然のことと考えています。しかし、OS間(例えばLinux、Windows、MacOS、Android、iPadなど)で大きなファイルを転送することは、それらがすべてTCP/IPを話すとしても、依然として課題です!私が2台のコンピューター間で大きなファイルを取得する最も簡単な方法は、Kermit(Windows版C-Kermitのフォークであるckwinを参照)を起動し、LAN上でTCP接続を確立することです。実際、C-Kermit 11に新しいshow interfacesコマンドを追加し、システムのローカルIPを簡単に確認できるようにしました。 その歴史のほとんどの間、コロンビア大学のKermitプロジェクトは自己資金で運営されていました。コロンビア大学は商用利用に対して料金を課しており、Linuxディストリビューションへの組み込みを制限していました。2011年、設立から30年後に、コロンビア大学はKermitプロジェクトを中止し、C-KermitをBSDライセンスの下でオープンソースとしてリリースしました。長年Kermitプロジェクトに携わってきたフランク・ダ・クルーズは、コロンビア大学外でKermitのメンテナンスを続けることを申し出て、2025年にプロジェクトから引退するまでアルファ版およびベータ版リリースで開発を続けました。 DebianのKermitメンテナーとして、私はこのCコードベースに飛び込み、現代の期待に合わないいくつかの領域に気づきました。一つの領域は、その年齢のプロジェクトとしては驚くことではありませんが、セキュリティでした。もう一つの領域は、その文字セットや行末の変換が、現在では通常望まれていないことでした。私たちはバイト単位で同一のバイナリ転送に慣れており、デフォルト設定は混乱やまれにデータの破損を引き起こしました。そこで、昨年いくつかのパッチを作成し始めました。 私は以前、Varnishのような古いCコードベースで作業したことがあります。一般的にそれは嫌いでした。通常、悪い習慣とひどい習慣の混合、不明瞭なメモリ管理などが見つかります。しかし、私は数ヶ月間C-Kermitのコードベースに住んでおり、楽しんでいます。はい、このものはまだVMS、OS/2、そしてANSIを耳にしたことのないコンパイラ、そして現代的なプラクティスを要求するコンパイラでビルドできるように設計されています。(そのエミダッシュは私のものです。LLMが存在する前にそれらの使い方を知っており、LLMが私のような人々をコピーしたからといってやめるつもりはありません!この投稿にAIは使用されていません。)それらすべてにエレガンスがあります。 作業を進めるにつれて、メモリ安全性と、数年前にscpのパッチの一部が行ったのとほぼ同じ方法で悪意のあるリモートからの保護の両方に関して、さらに多くの潜在的なセキュリティ問題を修正しました。IPv6サポートを追加しました。もちろん、C-Kermitがビルドされる一部のシステムはIPv6を聞いたことがなく、これからも聞くことはないため、条件付きでコンパイルされます。(そしてもちろん、IPv6サポートはあるがIPv6接続がないシステムのための実行時フォールバックアルゴリズムを備えています。)単体テストとPythonベースのエンドツーエンドテストを追加し、合計で約2000のテストケースを実行しました。その過程で、数十年前の多くのバグを見つけて修正しました。macOSでFIONREADが壊れていること、NetBSDのptyドライバのバグ、そしてKermitプロトコル実装自体のバグを学び、修正しました。gkermitおよびekermit(組み込み)実装、そして最後のフルリリースである2011年のC-Kermit 9.0.302(現代のシステムでコンパイルするのが困難でした)との互換性テストを追加しました。 C-Kermit 11のすべての改善点を説明する詳細な変更履歴があります。C-Kermitの開発は、これまで一度もVCS(バージョン管理システム)を使用していませんでした。ただし、Kermitのベテランであるジェフリー・アルトマンは、リリースされなかったいくつかのパッチとともに、過去のリリースをGitリポジトリにインポートしました(私もそれらをプルしました)。#ifdef COMMENTの後ろに無効化されたコードがたくさんあり、なぜそれがもはや使用されていないかを説明するコメントがありました。Gitを使用すれば、通常は古いコードを削除し、コミットメッセージでその理由を説明します。私はそれを行い、その多くを整理しました。つまり、最後に確認したところ、C-Kermitは実際には以前よりもコード行数が少なくなっています。 新しいリリースに向けて Debianのパッチシリーズとしては意味をなさないほど多くの変更を加えていることが、かなり早く明らかになりました。それだけでなく、DebianやUbuntuユーザーだけでなく、より多くのユーザーに広く適用可能になるでしょう。LinuxやBSDディストリビューションは、最後の非ベータリリース(2011年の9.0.302)から最後のベータリリース(約1.5年前)まで、ベータ版の実行に関する異なるポリシーに応じて、さまざまなものを実行していました。そのため、パッチを共有することさえ有用な形で行うことは非常に困難になるでしょう。そこで、Open Kermitでプロジェクトを立ち上げ、将来の開発をオープンに調整し、Kermitを継続させることにしました。 現代のCIを使用すると、Linux(x86_64およびarm64)、macOS、FreeBSD、NetBSD、OpenBSDでテストスイートを実行します。これらのすべてのプラットフォームでバイナリリリースをビルドし、さらにmusl libcでビルドされた静的リンクされたLinuxバイナリもビルドします。最新のC-Kermitリリースをダウンロードでき、もちろんC-Kermitとそのウェブサイトに貢献することもできます。 献身 フランク・ダ・クルーズは44年間、Kermitに直接関わっていました。他のオープンソースプロジェクトの創設者がこれほど長く関わっていた例は知りません。リチャード・ストールマンは1984年にGNU Emacsの作業を開始しましたが、フランクがKermitの作業を開始した3年後ですが、リチャードは2008年頃からその役割にはいませんでした。したがって、C-Kermit 11はこの献辞を掲げています。 このC-Kermitのリリースをフランク・ダ・クルーズに捧げます。 フランクは1981年の初期設計から2025年まで、44年間Kermitに直接関わっていました。コロンビア大学がスポンサーシップを終了した後、彼はKermitをオープンソースプロジェクトとして維持しました。創設者がこれほど長期間個人的に関与し続けたオープンソースプロジェクトは他に知りません。 Kermitが開始されたとき、異なるハードウェアとオペレーティングシステム間の転送は困難または不可能でした。フランクは橋を架けるのを助けました。Kermitは国際宇宙ステーションからポケット電卓まで、システムを統合し、相互運用性の新しい基準を設定しました。それは今もそうし続けています。 Kermitは今日でも、コンピューティングの静かに機能する柱の一つであり、ラジオのファームウェアアップグレードからすべてを可能にしています。そして、はい、それは依然としてシリアルライン経由でファイルを確実に転送します。 Kermitのコードベースに多くの時間を費やし始めるにあたり、私たちは巨人の肩の上に立っています。フランク、Kermitでの長年の仕事に感謝します。 ジョン・ゴーゼン、2026年7月 はい、UMN #gopherを復活させた男がまたやっています。今回は、最初の新しい#K