AquaLink

Met AquaLink kun je verbinding maken met moderne NAS-apparaten, Windows-pc's en Macs, en bestanden tussen deze systemen slepen en neerzetten — een functionaliteit die PowerPC Macs voorheen nooit hebben gehad. Daarnaast kun je de PowerPC Mac zelf configureren als een eenvoudige NAS, zodat moderne Macs en Windows-pc's verbinding kunnen maken met de Mac als een gedeelde map.

Downloads

  • AquaLink.zip: De applicatie zelf. Kopieer dit bestand naar de PowerPC Mac (Tiger/Leopard) die je wilt gebruiken.
  • AquaLink-windows-setup.zip: Hulpbestanden voor het verbinden met de deelfunctie van de Mac vanaf Windows. Bewaar beide zip-bestanden in dezelfde map en scheid de inhoud niet.

Let op: De standaardversie van Safari/curl in Tiger kan de huidige HTTPS-certificaten niet verifiëren, waardoor het directe downloaden kan mislukken. Gebruik in dat geval een modernere versie van curl via Tigerbrew of MacPorts.

Changelog

  • 2026-08-23: Opgelost dat umount faalde onder beheerdersrechten door dit aan te roepen via het volledige pad (/sbin/umount).
  • 2026-08-20: Ondersteuning voor Engelse gebruikersinterface toegevoegd (omschakelbaar tussen Japans en Engels).
  • 2026-08-20: Een probleem opgelost waarbij de menubalk niet wilde openen.

Snelstartgids

  1. Pak AquaLink.zip uit en start AquaLink.app op de betreffende PowerPC Mac.
  2. Als je alleen verbinding maakt tussen een Mac en een andere Mac, of met een moderne NAS, is dit voldoende.
  3. Om de Mac zelf als NAS te gebruiken vanaf Windows, volg je de Windows Connection Guide via Share This Mac (NAS Mode) in AquaLink en voer je connect-aqualink.bat uit vanuit AquaLink-windows-setup.zip.

Ondersteunde Omgevingen

  • Omgeving: PowerPC Mac / Mac OS X 10.4.11 (Tiger)
  • Geverifieerde hardware: iBook G4 (PowerBook6,5)

Dit is een persoonlijk hobbyproject dat wordt geleverd zonder garantie. Raadpleeg GitHub voor gedetailleerde technische informatie en de broncode.

Technische Details

AquaLink is in feite een dunne schil rond libsmb2, een C-bibliotheek die SMB2/3 spreekt. Voor zover bekend is AquaLink hiermee de eerste werkende SMB2/3-client die op PowerPC Mac OS X draait, aangezien de eigen smbfs.kext van Apple nooit verder is gekomen dan SMB1.

Waarom libsmb2?

Er was geen manier voor een PPC Mac om met een moderne SMB3 NAS te communiceren; de ingebouwde SMB-stack ondersteunt dit protocol simpelweg niet. libsmb2 bleek een van de weinige SMB2/3-clientbibliotheken die nog gebouwd konden worden op hardware en toolchains van deze ouderdom.

libsmb2 compileren op Tiger's gcc 4.0.0

De SDK van Tiger bevat geen CommonCrypto, waardoor een standaard build van libsmb2 onjuist APPLE detecteert, toch het CommonCrypto AES-pad kiest en vervolgens faalt tijdens het compileren. Dit is opgelost met een kleine patch voor configure.ac die expliciet controleert op CommonCrypto/CommonCrypto.h.

Daarnaast waren twee extra vlaggen nodig:

  • --disable-werror: Omdat gcc 4.0.0 waarschuwt voor een veel breder scala aan shadowed declarations dan moderne gcc-versies, en -Werror deze waarschuwingen omzet in harde fouten.
  • --without-libkrb5: Omdat Tiger noch GSS.framework noch krb5.h heeft. Kerberos-ondersteuning zou de build verbreken door ontbrekende headers. Voor een thuis-NAS was terugvallen op de ingebouwde NTLMSSP-authenticatie van libsmb2 voldoende.

Een zelfstandige Cocoa-app

De applicatie bevat geen .nib-bestand; de volledige gebruikersinterface is in code gebouwd. libsmb2 is statisch gekoppeld, waardoor er geen make install-stap of aparte bibliotheek nodig is. Na het uitpakken kan de app direct worden uitgevoerd.

De NAS zichtbaar maken als een echt Finder-volume

libsmb2 biedt op zichzelf alleen programmatische toegang; er verschijnt geen icoon in de Finder. AquaLink lost dit op door een eigen kleine ingebedde HTTP/WebDAV-server (ruwe BSD-sockets die OPTIONS/PROPFIND/GET/HEAD/PUT/DELETE/MKCOL/LOCK/UNLOCK afhandelt) te draaien op 127.0.0.1, en vervolgens mount_webdav aan te roepen tegen dit loopback-adres.

Het resultaat is dat het volume verschijnt in /Volumes als elk ander netwerkschijf, waardoor bestanden simpelweg via de Finder kunnen worden versleept. FUSE zou de logische route zijn geweest, maar MacFUSE/OSXFUSE ondersteunde Tiger nooit (PowerPC-ondersteuning werd industriebreed rond 2011 stopgezet).

De Mac omzetten in een NAS

Deze functie is toegevoegd om oude RAW-foto's op de iBook direct vanaf een moderne Mac of PC te kunnen bekijken en bewerken. LocalWebDAVServer hergebruikt dezelfde ingebedde server, maar vervangt de libsmb2-aanroepen door gewone POSIX-bestand-I/O (open/read/write/opendir). De server bindt aan INADDR_ANY in plaats van alleen aan de loopback, en voegt HTTP Basic-authenticatie en bescherming tegen path-traversal (../) toe.

Bugs en lessen

  • Vervormde Japanse tekst: De Objective-C compiler van gcc 4.0.0 parseert @"日本語"-stijl literals soms onjuist. Dit is opgelost door over te stappen op [NSString stringWithUTF8String:"日本語"], waarbij een ruwe C-byte string expliciet als UTF-8 wordt gedecodeerd.
  • Unmount-race die de Mac deed vastlopen: De oorspronkelijke Disconnect-knop stopte de WebDAV-server zonder te controleren of diskutil unmount daadwerkelijk was geslaagd. Als de unmount ongemerkt faalde, dacht macOS dat het volume nog gemonteerd was terwijl de server erachter weg was, waardoor heel /Volumes vastliep. De oplossing is het gebruik van umount (met herpogingen via -f) in plaats van diskutil unmount, en de server pas te stoppen nadat de unmount is bevestigd.
  • Fouten in het icoonformaat: Moderne iconutil schrijft alleen PNG-gebaseerde iconen, die de Finder van Tiger niet kan lezen. Een Tiger-compatibel .icns-bestand heeft de oude raw-bitmap chunks nodig (is32/il32/it32 voor 24-bit RGB, s8mk/l8mk/t8mk voor de masks). De eerste zelfgebouwde PackBits (RLE) encoder/decoder werkte intern consistent, maar produceerde visuele ruis op echte Tiger-hardware. Door de implementatie van libicns te bestuderen en het icoon van Aquafox te decoderen, is de fout gecorrigeerd.
  • Unmount-fout op een specifieke gepatchte image: Op een niet-officiële patched 10.6.8 PowerPC build faalde de Disconnect-functie altijd. Omdat mount_webdav met setuid-root draait, is het mount-punt eigendom van root, waardoor een normale gebruiker Operation not permitted krijgt bij umount. GUI-authenticatie-API's faalden hier consistent, terwijl sudo umount -f vanuit de terminal wel werkte. Dit is een bekende beperking voor die specifieke omgeving.

Toekomstplannen

Er wordt nagedacht over browser-gebaseerde toegang tot de NAS-functie, zodat een dedicated app niet langer nodig is.

De volledige broncode is beschikbaar op GitHub. Bugrapporten en suggesties voor verbeteringen zijn welkom via: tomo820@gmail.com.