On an iBook G4 running Mac OS X 10.4.11, a network volume just mounted in the Finder. Desktop icon, drag-and-drop, eject. Nothing remarkable on the surface except one detail: the share lives on a recent NAS that only speaks SMB2/SMB3, and no PowerPC Mac has ever been able to do that with its built-in tools. Apple's own SMB driver stayed stuck on SMB1, the protocol everyone has spent years switching off.13
That is exactly the gap AquaLink fills. It is a small Cocoa application by watermark_hd, a developer who describes the work as a personal, non-commercial contribution to the PowerPC community.1 As far as the author knows, it is the first working SMB2/3 client ever run on PowerPC Mac OS X.1 Hackaday picked up the story in late August 2026.4
The software itself stays modest: roughly thirty downloads at the time of writing, one publicly verified hardware setup, a 35-commit repository whose first commit dates to August 9.13 What deserves a closer look is how the problem was attacked, and the build journal the author took the trouble to write.2
The SMB1 wall
An old machine does not lose the network because it breaks. It loses the network because the network moves around it.
Apple shipped Samba, the open source SMB implementation, inside Mac OS X from version 10.2 onward so Macs could share files with Windows PCs.6 Leopard, the last release compatible with PowerPC processors, still ran on that stack, which stops at SMB1/CIFS. When Apple replaced Samba with its own SMBX implementation in Lion, then made SMB2 the default sharing protocol in Mavericks, the PowerPC branch had been dead for years.6
The world outside raised its floor. SMB3, introduced with Windows Server 2012, brought transport encryption among other things; NAS vendors expose the minimum protocol version as an explicit setting,8 and SMB1 carries a long exploitation history behind it, missing message integrity among other things.10 2026 adds another layer: macOS 27 removes the AFP client outright, Apple's own legacy file-sharing protocol, closing even the Mac-to-Mac path between old and new machines.7
So an iBook G4 boots perfectly fine, HFS+ included, yet its owner ends up copying files over USB sticks or improvised FTP because the NAS share simply will not mount. That daily reality is what AquaLink goes after.
gcc 4.0 vs SMB3
The author did not hand-write an SMB3 stack. He started from libsmb2, a C userspace library maintained by Ronnie Sahlberg under LGPL 2.1, able to speak SMB2 and SMB3 and already ported to improbable platforms, including several PowerPC machines like the PlayStation 3 and the Wii.5 According to the repository, it is pretty much the only SMB2/3 client library that still builds against a toolchain this old.1
Building still hurt. The build journal describes three precise obstacles.2 Tiger's SDK contains no CommonCrypto framework, so libsmb2's automatic detection assumes it can use it on Apple platforms and picks an AES code path that does not exist there: configure.ac needs a patch to test for the header explicitly. The era's gcc 4.0 flags far more shadowed declarations than modern compilers, turning -Werror into a wall, so warnings stay warnings. And Kerberos support has nothing to link against since Tiger ships neither GSS.framework nor krb5.h, so the build falls back to the library's built-in NTLMSSP authentication, judged plenty for a home NAS.
The result is verified on real hardware, not in an emulator: smb2-ls lists a modern host Mac's share while forcing ?vers=3, Japanese filenames intact.2 The final application links libsmb2 statically, builds its whole interface in code without a nib file, and ships as a zip you unpack straight onto the iBook.13
The loopback bridge
Then came the experience problem. libsmb2 gives programmatic access to files, but nothing appears in the Finder, and the Finder is what a Mac user actually wants.
The normal route for this kind of bridge is FUSE, a userspace filesystem layer. Per the author, MacFUSE and OSXFUSE never supported his setup and PowerPC support died around 2011, so that door is shut.3 The solution comes in two parts.23 First, AquaLink embeds a tiny HTTP/WebDAV server written directly on BSD sockets, handling just enough verbs: PROPFIND, GET, PUT, DELETE and neighbors. Second, it calls mount_webdav, the utility Tiger already ships, pointing it at 127.0.0.1. The system sees an ordinary WebDAV mount, and the NAS share shows up in /Volumes like any other network volume.
Drag-and-drop both ways, double-click, eject: everything works through the usual gestures. The project goes further in the opposite direction too. Turned around, the same small server exposes folders local to the iBook onto the LAN, turning the old machine into a small NAS browsable from a modern Mac or PC. The original need was concrete: reading old RAW photos stored on the iBook from a current machine, without transferring anything first.2
In plain text
One point needs care: the coverage and its comment section got tangled.4
The repository carries an unambiguous warning: AquaLink's NAS mode transmits the password via HTTP Basic Auth over plain, unencrypted HTTP, because no practical alternative exists on this OS. The author restricts it to a trusted home LAN, forbids exposing it to the internet, and the bundled Windows helper script modifies registry settings to make the mode usable at all.1
Two different paths should not be conflated, though. The client path, the one linking the iBook to the NAS, runs an SMB session negotiated at version 3 with NTLMSSP authentication, and the library knows how to encrypt such sessions when asked.5 Hackaday reports that encrypted shares remain out of reach for now on this generation of machines,4 and neither the repository nor the article documents exactly where that block sits. Nobody knows yet precisely why end-to-end encryption fails; that is the honest open question of the project. The WebDAV hop itself is confined to the loopback interface and never physically leaves the machine.2
A few details show real care: the connection history keeps addresses but never passwords, and NAS mode stores the password in the system keychain using APIs that already existed under Tiger.2 The deeper issue stays, and the project owns it: these machines run security-unpatched systems, and the author asks users to treat them as inherently insecure.1
The PackBits lesson
The build journal alone is worth the trip, because it records useful failures rather than a success story.23
Getting a proper icon under Tiger required building an old-style .icns file out of raw bitmap chunks modern tools no longer write. The PackBits compression was implemented with a wrong control-byte formula, but since encoder and decoder were wrong the same way, the round-trip test passed anyway. Only real hardware revealed the bug, as visual noise inside the icon. The fix came from reading libicns source, then decoding Aquafox's own icon as an external reference. The author draws a general rule: a self-written encoder and decoder that agree with each other only prove they share the same wrong assumption, never correctness.
A more serious episode: for a while, the disconnect button stopped the WebDAV server before confirming the volume had actually unmounted. When the unmount failed silently, the system kept an orphaned mount and all of /Volumes froze; recovery required standing something up again on the port. The fix reverses the order: confirm the umount, retrying with force if needed, and only then stop the server.2
This care is written down at the root of the repository: a set of working instructions requires creating a .bak backup before every file modification and asking confirmation before any destructive operation, noting that the target machine is hard to restore and must be driven from a host Mac over SSH because no modern tools can be installed on it.9 The project is developed with AI assistance, and those instructions say something true: on fragile, irreplaceable hardware, prudence should be written down somewhere before commands start flying.
One more episode completes the picture. A user of an unofficially patched PowerPC Snow Leopard image reported ejection always failing; investigation showed two different privilege-elevation APIs failing identically while terminal sudo worked every time, and the author classified it as a known limitation of that particular image rather than promising an unfixable-by-him correction.2
What you can use today
Keeping an old machine alive? Sample library, scanning station, writing machine: AquaLink answers a genuine daily problem for free and without extra hardware. Read the limits first: one publicly verified hardware configuration, a personal project with no license declared, meaning no explicit reuse rights for the code, and a trust boundary that stays your home network.1
The announced next step fits in one line on the project page: browser-based access to the shared folders, removing the dependency on the app itself.3 If the bridge holds, the lesson gets sharper: when an industry closes a door behind hardware that still works, someone can sometimes reopen it in userspace, with an old gcc and a lot of patience.
