« アプリ一覧に戻る

AquaLink

PowerPC Mac (Tiger) 向け

20年前のPowerPC Mac(iBook・PowerMac、Mac OS X Tiger/Leopard)を、今のネットワーク環境でも使えるようにする自作アプリです。

  • 現代のNAS・Windows・Macに接続して、ファイルをドラッグ&ドロップでやり取りできます(今までPPC Macにはこの機能がありませんでした)
  • 逆に、このMac自体を簡易NASとして公開することもできます。現代のMac・Windowsから、共有フォルダとして接続できます
AquaLink.zip をダウンロード
最終更新日: 2026-09-23(v0.5.23)
これまでのダウンロード数: 152
WindowsからこのMacの共有機能を使う場合のみ必要です。2つのZIPファイルは同じフォルダに置いたまま使ってください。
※ Tiger標準のSafari/curlは現代のHTTPS証明書を検証できないため、ここから直接ダウンロードできない場合があります。当サイトでは Aquafox(当サイトが日本語化パックを配布しているPowerPC向けブラウザ)をおすすめします。現代のHTTPSも普通に扱えます。難しい場合は、現代のMacで取得してからコピーするか、Tigerbrew/MacPorts経由の新しいcurlをご利用ください。

更新履歴

  • 2026-09-23 — AquaLinkの「このMacを共有する」機能のHTTPS対応を、Windows側でも使えるように拡張(それまではMac/Finderのみ対応)。Windows用接続ガイドが自己署名証明書を自動取得・信頼登録し、「@SSL@ポート番号」形式のパスで接続。実装の過程で証明書自体の本物の不具合を2件発見・修正: ホスト名検証用のSAN(Subject Alternative Name)が入っておらず、Windowsが証明書を拒否していた問題(サーバーのLAN内IPをSANとして追加して解決)。SAN追加時にX.509のバージョンをv3に上げていなかったため、.NET側の厳格な証明書パーサーに「破損した証明書」として拒否されていた問題。あわせて、接続スクリプトを管理者権限で実行すると、マウントしたドライブが通常のデスクトップのエクスプローラーから見えなくなり「成功しているのに繋がらない」という分かりにくい失敗の原因になっていたため、管理者権限での実行を検知して警告するように変更。Windows 11・Ventura・High Sierra・M2 MacBook Air(Tahoe)で実機確認
  • 2026-09-22 — Windows用接続ガイド(AquaLink-windows-setup.zip)のhostsファイル更新処理を修正。サーバー名の一致判定が部分一致になっていたため、例えば「aqualink」という名前で登録しようとしても、既存の「aqualink-nas」に含まれる文字列だと誤認され、本来必要な行が追加されないまま名前解決に失敗していた。加えて、名前が一致していてもIPアドレスまでは確認していなかったため、以前の実行で登録された古いIP(Macの再起動などで変わりうる)がそのまま残ってしまうケースもあった。名前とIPの両方を正しく突き合わせてから書き換えるよう修正
  • 2026-09-22 — Windows用接続ガイド(AquaLink-windows-setup.zip)を修正。AquaLinkの既定ポート(8091)がWindows標準のWebClient設定では許可対象外で、認証情報が送られず「認証されていません」(エラー1244)とだけ表示され原因が分かりにくかった問題を修正。WebClientの許可リスト(AuthForwardServerList)は「http://サーバー名」形式(ポート番号なし)で登録する必要があり、単純な「*」は正式な書式ではなく実際には効いていなかったため、正しい形式に修正した上で、既存の登録内容を上書きせず追記する方式に変更(複数のAquaLink共有を別名で使う場合に備えて)。あわせて、この修正後に見つかったもう1件も対処: サーバー名だけを指定する通常のUNCパスはWebClient側で常にポート80とみなされるため、AquaLink既定の8091には別途「サーバー名@ポート番号」形式での指定が必要だった(「ネットワークパスが見つかりません」エラー67の原因)。実際にWindows 11実機で確認
  • 2026-09-22 — 「このMacを共有する」機能にHTTPS(暗号化通信)対応を追加(共有設定の「HTTPS(暗号化・実験的)」チェックボックスで有効化、既定はオフ)。OpenSSLを実機上でビルドして組み込み、自己署名証明書を初回のみ生成して以降使い回す(Finder側の信頼設定が毎回リセットされないように)。これまで注意喚起していた「LAN内が平文」という弱点が、有効にすれば補えるようになった。Windows側の証明書信頼は今回対象外のため、Windowsからの接続は引き続き平文
  • 2026-09-22 — 任意送信のクラッシュレポート機能を追加。前回起動時にクラッシュログが新しく記録されていた場合、起動時にその内容を全文表示し、本サイトへ送信するか毎回確認(同意なしに送信されることはなく、内容の書き換えも一切なし)。実装中にTiger実機だけで再現する本物の不具合を2件発見・修正(この環境に存在しない-[NSAlert setAccessoryView:]の呼び出し、確認ダイアログを閉じた直後にAppKitのドラッグ型登録処理と競合してクラッシュしていた問題)
  • 2026-09-21 — 「共有名」「ユーザー名」欄にIPアドレスのような文字列が入っている(アドレス欄と入れ替わっている可能性がある)場合、内容は書き換えずに確認するようにした
  • 2026-09-18 — セキュリティレビューを実施。「このMacを共有する」機能に、短時間に大量の認証失敗を繰り返す相手を自動的に一時遮断するレート制限を追加(通常利用には影響しない)。あわせて、この機能を使う場合はルーターのUPnPを無効にすることを推奨(実際に有効なままだとLAN外への露出リスクがあると確認)。パスワードをより安全な方式(Digest認証)に切り替える対応も試したが、Windows/macOS純正クライアントの両立ができず見送り
  • 2026-09-12 — PowerMac G4実機で見つかった、ファイル一覧で行をクリック後にスクロールすると落ちることがある不具合を修正。ファイル名のアイコン表示に使っていた仕組みを、AppleのNSCellが標準で保証する方式に作り直し、機種によって起きる可能性のあるクラッシュの原因を根本から断った
  • 2026-09-11 — アドレス欄のプルダウンで、発見したサーバーの表示を「名前 — IPアドレス」から名前だけに短縮(選ぶと今まで通りIPが自動で入る)。また、接続に成功したらウィンドウのタイトルバーに接続先(アドレス/共有名)を表示するように(小さなラベルだけでは見落とされていたため)
  • 2026-09-11 — 一部の環境で「取り外す」が、管理者パスワードを入力しても「Operation not permitted」で失敗し続ける不具合を修正。mount_webdav自身と同じ方式(setuid rootの専用の小さなプログラムをアプリに同梱)で取り外すようにし、パスワードダイアログもターミナルも使わずに確実に外せるように(初回だけ準備のためのパスワード入力が必要)。あわせて、「取り外す」ボタンの表示がFinderから直接取り出した後などに古いまま残る不具合と、取り外し後にデスクトップのアイコンが残ってしまうことがある不具合も修正
  • 2026-09-10 — メニューバーに「編集」メニュー(コピー/ペースト/全選択など)を追加。これまで手組みメニューだったため ⌘C / ⌘V がどのテキスト欄でも効かなかったのを解消。また「Finderに接続」でマウントに成功したら、そのフォルダをFinderで自動的に開くように(何がどこにマウントされたか分かりにくかったため。マウント先はAquaLinkを動かしているマシン側です)
  • 2026-09-10 — 「Finderに接続」(WebDAVマウント)の失敗が、ウィンドウ下部に小さく出るだけで気づきにくかったのをダイアログでも表示するように。また、mount_webdav コマンドの管理者権限(setuid)がOSアップデート等で外れているとマウントが必ず失敗するため、事前に検知して復旧コマンドを案内するように
  • 2026-09-10 — アドレス欄のプルダウンに、LAN上のSMBサーバー(NASや共有中のMac)をBonjourで自動発見して表示するように。IPアドレスを知らなくても、一覧から選ぶだけで繋げます(選ぶとIPアドレスが自動で入ります)。共有名・パスワードは従来通り入力してください
  • 2026-09-06 — ファイルブラウザの列ヘッダ(名前・サイズ・更新日時)をクリックしてソートできるように。再クリックで昇順/降順を反転、▲▼で現在の並び順を表示。フォルダは常に先頭
  • 2026-09-06 — ファイルブラウザの一覧を Transmit / Cyberduck 風に刷新(見た目中心)。名前列の行頭にフォルダ/ファイルのアイコンを表示し、代わりに「種類」列を廃止。「更新日時」列を追加(ファイル本来の更新日時を「2026-09-06 | 14:32」形式で表示)。サイズ・更新日時は右寄せ&固定幅で、ウィンドウを広げると名前列だけが伸びる。全列を標準システムフォントに統一
  • 2026-09-06 — ファイルブラウザ画面のUIをまとめて調整(見た目中心)。「上へ」ボタンを「▲ 上へ」表記に変更し(ブラウザの戻る/進むと紛らわしかったため)、Finderと同じ ⌘↑ ショートカットを追加。角丸ボタンの上辺が描画で欠けていた不具合を修正。一覧に .DS_Store 以外の隠しファイル(.lesshst 等)が出ていたのを、ドットファイル全般を非表示にして解消(表示上のフィルタのみ。ファイルは削除しません)
  • 2026-09-01 — 接続失敗時のエラーメッセージが2行目(詳細情報)を表示できていなかった不具合を修正(ステータス表示欄が1行専用だったため。ダイアログでも表示するよう変更)
  • 2026-08-31 — PPCPortsなどタグ付きリリースのlibsmb2でSMB2_SEC_NTLMSSPが未定義でビルドが失敗する不具合を修正(libsmb2本体側で公開ヘッダへの反映がまだのため、互換定義を追加)
  • 2026-08-29 — 直前の修正でMakefileに加えた変更が、Leopard/Snow Leopardでのビルドを壊していたのを修正(システム側のヘッダーが実際に無い場合のみSDKにフォールバックするよう変更)
  • 2026-08-29 — PPCPorts経由(Kerberos対応込み)でビルドしたlibsmb2で、認証がKerberos経由を試みて失敗し接続できない不具合を修正(NTLM認証を明示するよう変更)
  • 2026-08-28 — SMB3暗号化を必須にするオプションを追加。実装過程で、libsmb2本体のビッグエンディアン環境向けバグ(暗号化ヘッダーのSessionIdがエンディアン変換されていなかった)を発見・修正し、上流に報告した
  • 2026-08-23 — 管理者権限での実行時にumountコマンドが見つからず失敗する不具合を修正(/sbin/umountをフルパスで指定するように変更)
  • 2026-08-20 — UIを英語対応(日本語/英語切り替え)
  • 2026-08-20 — メニューバーが開かなくなる不具合を修正

ダウンロードするもの

  • AquaLink.zip — アプリ本体。動かしたいPowerPC Mac(Tiger/Leopard)に入れてください
  • AquaLink-windows-setup.zip — Windowsから共有機能に接続するための補助ファイル。この2つは中身を分離せず、同じフォルダに置いたまま使ってください

使い方(かんたん)

  1. AquaLink.zip を解凍し、AquaLink.app を対象のPPC Macで起動
  2. Mac同士・現代のNASに繋ぐだけなら、これで完了です
  3. iBook側をNAS化してWindowsから使いたい場合は、AquaLinkの「このMacを共有(NAS化)」→「Windows用接続ガイド」の案内に沿って、AquaLink-windows-setup.zip内のconnect-aqualink.batを実行してください

対応環境

動作環境PowerPC Mac / Mac OS X 10.4.11 (Tiger)
動作確認機種iBook G4 (PowerBook6,5)

個人の趣味プロジェクトにつき無保証です。詳しい技術情報・ソースコードはGitHubをご覧ください。

AquaLinkの中身は、SMB2/3をしゃべるCライブラリ libsmb2 です。私が調べた限りだと、PowerPC Mac OS Xで実際に動くSMB2/3クライアントはこれが世界初じゃないかと思います(Appleの純正 smbfs.kext はSMB1止まりで、そもそもPPC Macから今どきのSMB3 NASに繋ぐ手段自体がありませんでした)。ここでは実装のポイントと、ハマったところを紹介します。

「AIって楽だと思うでしょう?」とよく言われます。たしかに楽になった部分はあります。コードのスペルミスやインデントのミスは、もうほとんど起きません。でも実際にやってることは、Windows・PowerMac G4・iBook G4・M2 MacBook Air・MacBook 2010(いずれも実機)を、最低3台、多い時は4台並べて、手作業でログを取って、M2 MacBook AirのVSCode上でバグを1個ずつ潰していく作業です。AquaLinkは特にこれをやりました。

なぜlibsmb2にしたか

PPC MacからSMB2/3のNASに繋ぐ手段が、そもそも無かったんです。まず土台になるライブラリを探して、 libsmb2がこの世代のハード・古いツールチェーンでもビルドが通る、ほぼ唯一のSMB2/3クライアントライブラリだったので、これに決めました。

Tiger(gcc 4.0.0)向けにビルドを通す

TigerのSDKにはCommonCryptoフレームワークが無くて、素の __APPLE__ 判定だけだと誤って CommonCrypto版のAES実装を選んでしまい、ビルドが落ちます。なので configure.ac に CommonCrypto/CommonCrypto.h の有無を明示的にチェックするパッチを書きました。あと 2つオプションが要りました。 --disable-werror は、古いgcc 4.0.0が今のgccより広い範囲で shadowed declarationを警告してくるので、 -Werror のままだと大量の警告が全部ビルドエラー扱いになってしまうのを防ぐためです。 --without-libkrb5 は、Tigerに GSS.framework や krb5.h が無くて、Kerberos対応を有効にするとヘッダが無くてビルドが止まるのでその回避策。個人のNAS用途なら、内蔵のNTLMSSP認証だけで十分でした。

自己完結のCocoaアプリ

UIはnibファイルを使わず、全部コードで組んでます。libsmb2は静的リンクしているので、 make install は不要。zipを解凍してそのまま動きます。

NASをFinderの実ボリュームとしてマウントする

libsmb2だけだとプログラムからアクセスできるだけで、Finderにアイコンが出るわけじゃないんですよね。そこでAquaLinkは自作の極小HTTP/WebDAVサーバー(生のBSDソケットでOPTIONS/PROPFIND/GET/HEAD/PUT/ DELETE/MKCOL/LOCK/UNLOCKに対応)を 127.0.0.1 で立ち上げて、そのループバックアドレスに対して mount_webdav を呼ぶことで実現してます。結果、 /Volumes に普通のボリュームとして現れて、他のネットワーク共有と同じようにFinderでドラッグ&ドロップできます。もっと素直な方法としてFUSEも考えたんですが、MacFUSE/OSXFUSEはMac OS X 10.4 Tigerを一度もサポートしたことがなくて(PowerPC対応自体も2011年頃には業界的に打ち切られてます)、選択肢になりませんでした。

逆方向: PPC Mac自体をNAS化する

これは最初のスコープには入ってなくて、「iBookに入ってる古いRAW写真を、今のMac/Windowsから直接見たい・編集したい」っていう実際の要望を受けて後から足した機能です。 LocalWebDAVServer は同じ自作WebDAVサーバーを土台に、libsmb2の呼び出しをPOSIXのファイルI/O(open/read/write/opendir)に置き換えて、 127.0.0.1 限定じゃなく INADDR_ANY でLAN上の他の機器からも繋げるようにした上で、Basic認証とパストラバーサル(../)対策を足してます。

ハマった点

日本語の文字化け。 古いgcc 4.0.0のObjective-Cコンパイラ、 @"日本語" みたいな文字列リテラルをたまに正しく解釈してくれないんです。Cの生バイト列からUTF-8として明示的にデコードする [NSString stringWithUTF8String:"日本語"] に置き換えたら直りました。
[重大] 取り外し処理の事故でMac全体がハング。 最初の「取り外す」ボタンは、 diskutil unmount が成功したか確認せずにWebDAVサーバーを止めてました。取り外しが実は失敗(またはハング)してたケースだと、OSは「マウント中」のつもりなのに応答するサーバーがいない、っていう壊れた状態になって、 /Volumes 全体へのアクセスがハングしたんです。復旧には、そのポートに何かHTTP応答を返すプロセスを一時的に立てないといけませんでした (kernel側が保留中の応答を待ち続けてたんだと思います)。教訓は、OSの状態を変えるコマンドは、成功したか確認してから次の後始末をする、ということ。直した後は diskutil unmount じゃなく umount(失敗したら -f で再試行)を使って、成功を確認できたときだけサーバーを止めるようにしました。
自作アイコンフォーマットでの思い込みバグ。 今の iconutil は PNGベースのアイコン表現しか書き出してくれなくて、Tigerのファインダーはそれを一切読めません。 Tiger互換の .icns には生ビットマップの古いチャンク(is32/ il32/it32 とか)が必要で、これは自分で組み立てるしかありませんでした。最初に書いたPackBits(RLE)のエンコーダ/デコーダは、制御バイトの意味を思い込みで間違えてたんですが、自分で書いたエンコーダとデコーダのペアで往復検証しても一致しちゃうので、この手のバグは自己検証だけじゃ見つからないんですよね。実機(Tiger)で「白い角丸にノイズ」って症状で初めて気づいて、実績のあるOSSの libicns の実装を見て正しい式を突き止めて、 Aquafox自身のアイコンを実際にこの式で復元できることまで確認してから直しました。教訓は、独自フォーマットの自己検証(round-trip)は「自分の思い込みと矛盾しない」ことしか証明しない、ってことです。
特定環境でのumount権限エラー。 非公式パッチ当ての10.6.8(Snow Leopard)PPC イメージを使ってる人から、「取り外す」がいつも失敗するっていう報告がありました。調べてみたら、 mount_webdav がsetuid rootで動くのでマウント自体がroot所有扱いになってて、一般ユーザー権限だと取り外せなくなってたんです。 NSAppleScript 経由の管理者権限実行と、もっと低レベルな AuthorizationExecuteWithPrivileges の2種類を試したんですが、どっちも同じ Operation not permitted で失敗。一方でターミナルの sudo (GUI認証を通らない別系統の仕組み)は毎回ちゃんと成功してました。2つの違うGUI認証APIが両方同じ失敗をするってことは、このパッチ当てイメージのGUI認証まわり自体が壊れてて、アプリ側をどういじっても直せなさそうだと判断して、この環境については既知の制限として受け入れることにしました。手動で sudo umount -f を実行するのが確実な回避策です。無改造の Tiger/Leopard/Snow Leopardでは、この問題は起きてません。

今後

専用アプリを使わない、ブラウザ経由でのNASアクセスも検討中です。

ソースコードはGitHubにあります。

このアプリへのひとこと

評価(任意)