All Unix-like systems had exactly the same issues with large file support on 32b architectures. The solution was standardized in 1996 and adopted by most relevant OSes relatively quickly. Another issue is that support for large files has to be opt-in for user space code and this opt-in has to be same for all modules that share anything whose ABI depends on sizeof(off_t).
Server software that needs larger address space than what is conceivable size of main memory became somewhat common only after mass adoption of amd64. In fact, amd64 is first 64bit architecture where it is common to have 64-bit only userspace, essentially all "64b" unix vendors in 90's shipped systems with most of userspace built in 32b mode (IIRC this includes even technically 64b-only OSF/1 AXP^W^WTru64, which while running on CPU that really does not have 32b mode had 32b ABI in the style of linux's x32 ABI).
Server software that needs larger address space than what is conceivable size of main memory became somewhat common only after mass adoption of amd64. In fact, amd64 is first 64bit architecture where it is common to have 64-bit only userspace, essentially all "64b" unix vendors in 90's shipped systems with most of userspace built in 32b mode (IIRC this includes even technically 64b-only OSF/1 AXP^W^WTru64, which while running on CPU that really does not have 32b mode had 32b ABI in the style of linux's x32 ABI).