ユーザーは、システムのLinux互換レイヤーと、ディレクトリ読み取りエラーを修正する特定のカーネルパッチを活用することで、FreeBSD上でZedエディタのリモート開発サーバーを実行できるようになりました。この回避策は、ZedのリモートサーバーがFreeBSDをサポートされているプラットフォームとして認識できず、プロジェクトツリーが空になったり「Invalid argument」エラーが発生したりする制限に対処するものです。

ホストプラットフォームの偽装

Zedは現在ネイティブなFreeBSDリモートサーバーを提供していないため、ユーザーはZedチームが提供するLinuxバイナリを利用できます。これには、FreeBSDホストでのLinux互換性の有効化と、`uname`コマンドをインターセプトするためのラッパースクリプトの使用が必要です。

ラッパースクリプトは、他のすべての引数を実際の`uname`ユーティリティに渡しつつ、プラットフォームを「Linux x86_64」として識別します。この「小さな嘘」により、Zedは接続を正常に開始し、Linuxサーバーバイナリをホストにアップロードできるようになります。

Zedのためにホストプラットフォームを偽装するために使用されるシェルスクリプトを表示するターミナルウィンドウ。
unameコマンドをインターセプトし、プラットフォームをLinux x86_64として報告するためにラッパースクリプトが使用されます。hayzam.com

このスクリプトにより、ZedエディタはLinuxホスト上で動作していると認識でき、FreeBSD上で公式のLinuxリモートサーバーバイナリを使用できるようになります。

「それは小さな嘘ですが、限定的なものであり、私ができれば廃止したいと思っている部分です。」

— Lying to Zed to get its remote server running on FreeBSD | Hayzam

768バイトのバッファデグレード

プラットフォームを偽装しても、プロジェクトファイルを表示しようとした際に「Invalid argument (os error 22)」エラーが発生する場合があります。これは、ディレクトリエントリのサイズに影響を与えるFreeBSDカーネルのLinuxエミュレーションレイヤー(Linuxulator)のデグレードによって引き起こされます。

平たく言えば、Zedはファイル名のバッチを要求しますが、Linuxulatorはこれらのバッチのサイズを512バイトのブロックに切り上げます。合計サイズが呼び出し側によって割り当てられた768バイトのバッファを超えると、エミュレーションレイヤーはエラーを返し、Zedはフォルダを空として報告します。

Linuxulatorバグにおけるバッファおよびブロックサイズ: 呼び出し元バッファ 768 bytes; ブロックサイズ (DEV_BSIZE) 512 bytes
Linuxulatorバグにおけるバッファおよびブロックサイズhayzam.com

HN Digestによる図表(hayzam.comの報告数に基づく)。数値はソースの表記通り。

カーネル修正と実装

この問題は、FreeBSD 15.2-RELEASEブランチにマージされたカーネルパッチ ec6629628cb を適用することで解決されます。このパッチは、要求されたカウントが標準の512バイトブロックよりも小さい場合、最大バッファサイズを超えずに読み取りサイズが正しく切り上げられることを保証します。

FreeBSD Linuxulatorのカーネルパッチの詳細を表示するターミナルウィンドウ。
特定のカーネルパッチ ec6629628cb は、Linuxエミュレーションレイヤーにおける768バイトのバッファデグレードに対処します。hayzam.com

このパッチにより、ディレクトリ読み取りサイズが正しく丸められ、ファイルシステムアクセス中の「os error 22」の失敗を防ぐための上限が設定されます。

ネイティブな体験を求める人のために、`editors/zed`ポートもリモートサーバーをビルドしますが、公式リリースより遅れる可能性があります。エディタの最新機能を維持するためには、一般的にLinuxベースのルートが推奨されます。

Hacker Newsの読者の反応

  • 代替案: あるコメント投稿者は、特殊なサーバーを使わなくてもSSHを使用するだけでリモート編集が可能であり、この方法は多くのユーザーにとって十分であると指摘しました。 コメント ↗
  • 疑問: 別のユーザーは、なぜリモートサーバーをFreeBSD用にネイティブにコンパイルできないのか疑問を呈し、エディタ自体はオーディオコールに関してわずかな問題に直面しているだけであると述べました。 コメント ↗

Hacker Newsのスレッドで出た意見の要約です。事実として検証されたものではありません。 議論の全文を読む ↗