Das liegt in der verwendeten Schreib/Lese-Routine begründet, die eben nur 32-Bit-Adressierung unterstützt, wobei es den Unsigned nicht gibt, daher die Grenze eben bei 2GB und nicht bei 4GB liegt.

IFS-Dateien > 2GB können nur mit den 64-Bit-C-Funktionen für IFS verarbeitet werden.

Der Standard XML-Parser benutzt eben nur die 32-Bit-Funktionen.

Im Windows/Linux ist das auch nicht anders.