As far as I know it actually works fine and is well-supported in Linux. Sure, getting more than 3GB address space in user space apps isn't possible and if you need more than that you have to either use a real 64-bit OS, or use special hairy remapping APIs. But if all you want to do is run a gazillion processes that don't come anywhere near the 3GB ceiling individually, PAE actually has memory efficiency advantages. 64GB of physical RAM are the hard limit in PAE mode, though, which I suppose screams "temporary measure". Back then, we were all going to switch to IA-64 (Itanium) according to Intel.
I'm not aware of the "corner cases" you're referring to. The page table format changes, (4 levels instead of 3, rather like in 64-bit mode) and if you wish you can use the x86 memory segmentation system in creative ways, IIRC. You also need to watch the addresses you can use as DMA sources and destinations, but you have to do that in real 64-bit mode as well. (not all PCI devices support >32-bit memory addresses for DMA) Plain Windows XP even enables PAE if supported by the hardware, but refuses to touch memory above the 4GB address barrier.
The real problem, as far as I can tell, is kernel-mode code, which must be aware of PAE and must be able to deal with it accordingly, especially concerning the DMA issue mentioned above. And for better or worse, there's a lot of third-party kernel-mode code running on the average Windows system (drivers, virus scanners, etc.) and MS understandably don't want to deal with the support quagmire of third-party drivers that don't properly support PAE. Because even if it's the driver developer's fault, the customer will see Windows crashing, and therefore it's Microsoft's fault.
Certain server versions of Windows do support PAE, but they have their own, more expensive driver certification process, which is fine for hardware and software created for "enterprise" customers. And things like databases from Oracle and IBM did and presumably still do use the hairy remapping APIs in their 32-bit versions, because the 64-bit-era has only arrived relatively recently in windows-land.
Linux solves this by controlling all officially supported drivers because they ship with the official kernel, so making all drivers PAE-aware is easy. Everything outside of that is the user's or the distributor's responsibility.
I'm not aware of the "corner cases" you're referring to. The page table format changes, (4 levels instead of 3, rather like in 64-bit mode) and if you wish you can use the x86 memory segmentation system in creative ways, IIRC. You also need to watch the addresses you can use as DMA sources and destinations, but you have to do that in real 64-bit mode as well. (not all PCI devices support >32-bit memory addresses for DMA) Plain Windows XP even enables PAE if supported by the hardware, but refuses to touch memory above the 4GB address barrier.
The real problem, as far as I can tell, is kernel-mode code, which must be aware of PAE and must be able to deal with it accordingly, especially concerning the DMA issue mentioned above. And for better or worse, there's a lot of third-party kernel-mode code running on the average Windows system (drivers, virus scanners, etc.) and MS understandably don't want to deal with the support quagmire of third-party drivers that don't properly support PAE. Because even if it's the driver developer's fault, the customer will see Windows crashing, and therefore it's Microsoft's fault.
Certain server versions of Windows do support PAE, but they have their own, more expensive driver certification process, which is fine for hardware and software created for "enterprise" customers. And things like databases from Oracle and IBM did and presumably still do use the hairy remapping APIs in their 32-bit versions, because the 64-bit-era has only arrived relatively recently in windows-land.
Linux solves this by controlling all officially supported drivers because they ship with the official kernel, so making all drivers PAE-aware is easy. Everything outside of that is the user's or the distributor's responsibility.