20年前のPowerPC Mac(iBook・PowerMac、Mac OS X Tiger/Leopard)を、今のネットワーク環境でも使えるようにする自作アプリです。
- 現代のNAS・Windows・Macに接続して、ファイルをドラッグ&ドロップでやり取りできます(今までPPC Macにはこの機能がありませんでした)
- 逆に、このMac自体を簡易NASとして公開することもできます。現代のMac・Windowsから、共有フォルダとして接続できます
AquaLink.zip をダウンロード
最終更新日: 2026-09-09(v0.5.6)
これまでのダウンロード数: 87
WindowsからこのMacの共有機能を使う場合のみ必要です。2つのZIPファイルは同じフォルダに置いたまま使ってください。
更新履歴
- 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つは中身を分離せず、同じフォルダに置いたまま使ってください
使い方(かんたん)
AquaLink.zip を解凍し、AquaLink.app を対象のPPC Macで起動
- Mac同士・現代のNASに繋ぐだけなら、これで完了です
- 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に繋ぐ手段自体がありませんでした)。ここでは実装のポイントと、ハマったところを紹介します。
なぜ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にあります。