First, I tested this on Fedora linux and it worked fine. I was going to test it for OpenSuse and UBuntu - but Lazarus crash on the first compile (cant find the unit Interfaces.. its the same story every time) so that sort of cripples my testing process. I was sort of hoping people would add the req. code for their distros of preference.
I also tested it on OS X (which has aliases for all system folder names btw) - so it does not care if you write "pictures" or "bilder" (norwegian). Just try it yourself on the mac. You can use the alt+mac+G shortcut from finder, then type in a path. It works in both english and norwegian on my machine. I also tested the binaries with a friend and they work there too.
Secondly, yes i did realize that I could use $UNIX as a compilerswitch afterwards. The compiler switching is actually taken from the shellcontrols unit that ships with lazarus.. ahem..
Third, it's a start

You wrote: "1. it drags in the VCL just to access environment variables via the application object."
Well most visual application ends up using those units anyways. But i see your point and it can be easily changed. This is a sidekick unit for my filebrowser component. Concidering that I have little or no documentation, and that lazarus crashes on all platforms in some way or another - i think i did a pretty good job having used lazarus for roughly 2 weeks. I also noted earlier when i posted this, that if anyone could contribute to the unit then please do so.
Also: "It fails for everything but Linux, Darwin and Windows derivatives. Both FPC and Lazarus support more.". Eh.. thats sort of the point. I will write for two platforms (mac & windows), and since its my unit -- well.. im dont really care about Amiga or win-CE. But someone might, and im sure they can add the needed code for that.
And "Partially duplicates badly, what is already system provided:". Well, i did not know about those so i didnt duplicate anything by intention. But the true purpose was to get access to the same folders on mac & windows. But now that i do know, i can take a look at the sourcecode and see what can be done to upgrade my own code, or simply replace my code with calls to those you mention. Thanks for the heads up.
As for the messy part.. what exactly is messy? If you remove the compiler switches and replace it with $UNIX like you propose.. it's not even 100 lines long. Messy is writing code like "If something then begin". Standard pascal syntax demans a LF after "then". There is even a book on proper pascal syntax, which very few seems to follow these days.
Your just picking to pick.. (*smile*) No i get your point. It will be updated to meet better req.